Requirement:
The user has an excel file with six worksheets, each one dedicated to different projects and their status.
Added another workship ("Report") for reporting purposes, and the user wants to populate it with all the rows that have a YES in column O, so I have used the VBA formula below (taken for another thread in this forum):
Option Explicit
Sub Received()
Dim ws As Worksheet
Dim i As Long, lr As Long, lastrow As Long
lastrow = Sheets("Report").Range("A" & Rows.Count).End(xlUp).Row
Sheets("Report").Range("A2:A" & lastrow).EntireRow.ClearContents
Application.ScreenUpdating = False
For Each ws In Worksheets
If ws.Name <> "Report" Then
lr = ws.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lr
lastrow = Sheets("Report").Range("A" & Rows.Count).End(xlUp).Row + 1
If ws.Range("O" & i) = "YES" Then
ws.Range("O" & i).EntireRow.Copy Sheets("Report").Range("A" & lastrow)
End If
Next i
End If
Next ws
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
The problem is that the user doen't need the entire row, but the data of the columns B, C, J, K and L. How can the user modify the code so only that information is shown in the reporting sheet?
Solution:
You placed the code in the "Report" sheet module. This code needs to be placed in a standard module as it is not an event code.
The CurrentRegion (the data set) starts at A4 not A1.
- You have an additional sheet "Other data", previously unmentioned, which the code was attempting to extract data from.
- One sheet had filters turned on already.
So, to tidy things up for you, here is the code again:-
Sub Test()
Dim ws As Worksheet, sh As Worksheet
Set sh = Sheets("Report")
Application.ScreenUpdating = False
sh.UsedRange.Offset(1).Clear
For Each ws In Worksheets
ws.AutoFilterMode = False
If ws.Name <> "Report" And ws.Name <> "Other data" Then
With ws.[A4].CurrentRegion
.AutoFilter 15, "YES"
Union(.Columns("B:C"), .Columns("J:L")).Offset(1).Copy
sh.Range("A" & Rows.Count).End(3)(2).PasteSpecial xlValues
.AutoFilter
End With
End If
Next ws
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
I've added an additional line (in blue font) which ensures that all filters are turned off prior to the code running.
I've added the "Other data" sheet (in red font) to be excluded from the whole process.
Obtained from the OzGrid Help Forum.
Solution provided by Carim.
See also: Index to Excel VBA Code and Index to Excel Freebies and Lesson 1 - Excel Fundamentals and Index to how to… providing a range of solutions and Index to new resources and reference sheets
See also:
| How to auto copy data from master list to sub worksheets based on data value in one column |
| How to use VBA code to transpose any copy values X number of times |
| How to copy the data from sheet 1 and paste the data to sheet 2 each first empty row of each row |
| How to copy from cell into next empty cell and loop through |
Click here to visit our Free 24/7 Excel/VBA Help Forum where there are thousands of posts you can get information from, or you can join the Forum and post your own questions.