Reputation: 11
How do I skip/ignore blank cells in my CriteriaRange (AdvancedFilter)?
Sub BrandExtraction ()
Application.CutCopyMode = False
Dim rngCrit As Range
Dim rngData As Range
Set rngData = Sheets("ProductPriceExport").Range("A1").CurrentRegion
With Sheets("Campaign")
Set rngCrit = .Range("C1", .Range("C" & Rows.Count).End(xlUp))
End With
rngData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCrit, CopyToRange:=Range("A1:AN1"), Unique:=False
I found an option to sort the Campaign sheet (Colum B) if it is a table area.
I tried the ActiveSheet.ListObjects function ("Table1"). ListColumns (2) .DataBodyRange.Select, but it's still copying the whole dataset from ProductPriceExport file.
Sub PrimaryBrandExtractionTestTable()
Application.CutCopyMode = False
Dim rngCrit As Range
Dim rngData As Range
Dim tbl As ListObject
**Set tbl = ActiveSheet.ListObjects("KampagneTabel")**
Set rngData = Sheets("ProductPriceExport").Range("A1").CurrentRegion
With Sheets("Campaign")
Set rngCrit = **tbl.ListColumns(2).DataBodyRange.Select**
End With
rngData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCrit, CopyToRange:=Sheets("BrandExtraction").Range("A1:AN1"), Unique:=False
End Sub
Upvotes: 1
Views: 223
Reputation: 54777
AutoFilter
)AutoFilter
.AutoFilter
to remove the copied 'blanks'.Option Explicit
Sub BrandExtractionBasic()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim rngData As Range
Set rngData = wb.Worksheets("ProductPriceExport").Range("A1").CurrentRegion
Dim rngCrit As Range
With wb.Worksheets("Campaign")
Set rngCrit = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
Dim rngCopy As Range
With wb.Worksheets("BrandExtraction")
.UsedRange.Clear
Set rngCopy = .Range("A1").Resize(, rngData.Columns.Count)
End With
rngData.AdvancedFilter xlFilterCopy, rngCrit, rngCopy
End Sub
Sub BrandExtraction()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim rngData As Range
Set rngData = wb.Worksheets("ProductPriceExport").Range("A1").CurrentRegion
Dim rngCrit As Range
With wb.Worksheets("Campaign")
Set rngCrit = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
With wb.Worksheets("BrandExtraction")
.UsedRange.Clear
Dim rngCopy As Range
Set rngCopy = .Range("A1").Resize(, rngData.Columns.Count)
rngData.AdvancedFilter xlFilterCopy, rngCrit, rngCopy
Set rngCopy = .Range("A1").CurrentRegion ' reusing variable!
With rngCopy
Set rngData = .Resize(.Rows.Count - 1).Offset(1) ' reusing variable!
.AutoFilter 9, "=" ' filter blanks ('9' means 'I' column)
End With
Dim rngVisible As Range
On Error Resume Next
Set rngVisible = rngData.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
.AutoFilterMode = False
If Not rngVisible Is Nothing Then rngVisible.Delete xlShiftUp
End With
End Sub
Upvotes: 1
Reputation: 26
You can try this :
CriteriaRange:=Array(rngCrit, "<>")
I have not tested it
Upvotes: 0