VBA:如果单元格引用值为空,如何忽略自动筛选

VBA:如果单元格引用值为空,如何忽略自动筛选,vba,excel,Vba,Excel,我试图根据在单独的“过滤器”表中输入的多个条件,从“数据”表中过滤和提取数据。但是,由于工作表“过滤器”中的某些条件字段为空,因此返回的数据为空。 如果输入的某个条件为空,是否可以忽略,并继续使用其他条件筛选数据并返回数据? 以下是我迄今为止编写的代码: Sub CopyPastingFilteredData() Dim wb As Workbook Set wb = ActiveWorkbook If Sheets("Data").FilterMode Then Cells.AutoFilte

我试图根据在单独的“过滤器”表中输入的多个条件,从“数据”表中过滤和提取数据。但是,由于工作表“过滤器”中的某些条件字段为空,因此返回的数据为空。 如果输入的某个条件为空,是否可以忽略,并继续使用其他条件筛选数据并返回数据? 以下是我迄今为止编写的代码:

Sub CopyPastingFilteredData()
Dim wb As Workbook
Set wb = ActiveWorkbook
If Sheets("Data").FilterMode Then
Cells.AutoFilter
End If
'Filtering Data
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=1, Criteria1:=Sheets("Filters").Range("C4").Text
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=50, Criteria1:=Sheets("Filters").Range("C5")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=19, Criteria1:=Sheets("Filters").Range("C6")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=5, Criteria1:=Sheets("Filters").Range("C7")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=51, Criteria1:=Sheets("Filters").Range("C8")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=20, Criteria1:=Sheets("Filters").Range("C9")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=23, Criteria1:=Sheets("Filters").Range("C10")
wb.Sheets("Data").Range("A2:BB20000").AutoFilter field:=7, Criteria1:=Sheets("Filters").Range("C11")
'Copying Data post filtering
wb.Sheets("Data").Range("A3:BB20000").Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy

wb.Sheets("Extract").Select
Cells(12, 1).PasteSpecial Paste:=xlPasteValues


Set FilterRange = Nothing
Application.ScreenUpdating = True
Application.CutCopyMode = False
Sheets("Data").Select
Sheets("Data").Activate
Cells.AutoFilter
Sheets("Extract").Select
Sheets("Extract").Activate

End Sub

在筛选之前,可以先测试单元格是否包含数据。我已经更改了下面的
过滤数据部分

Sub CopyPastingFilteredData()
Dim wb As Workbook
Dim shF As Worksheet
Set wb = ActiveWorkbook
Set shF = wb.Sheets("Filters")
If Sheets("Data").FilterMode Then
Cells.AutoFilter
End If
'Filtering Data
With wb.Sheets("Data").Range("A2:BB20000")
    If shF.Range("C4").Value <> "" Then .AutoFilter field:=1, Criteria1:=shF.Range("C4").Text
    If shF.Range("C5").Value <> "" Then .AutoFilter field:=50, Criteria1:=shF.Range("C5")
    If shF.Range("C6").Value <> "" Then .AutoFilter field:=19, Criteria1:=shF.Range("C6")
    If shF.Range("C7").Value <> "" Then .AutoFilter field:=5, Criteria1:=shF.Range("C7")
    If shF.Range("C8").Value <> "" Then .AutoFilter field:=51, Criteria1:=shF.Range("C8")
    If shF.Range("C9").Value <> "" Then .AutoFilter field:=20, Criteria1:=shF.Range("C9")
    If shF.Range("C10").Value <> "" Then .AutoFilter field:=23, Criteria1:=shF.Range("C10")
    If shF.Range("C11").Value <> "" Then .AutoFilter field:=7, Criteria1:=shF.Range("C11")
End With
'Copying Data post filtering
wb.Sheets("Data").Range("A3:BB20000").Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy

wb.Sheets("Extract").Select
Cells(12, 1).PasteSpecial Paste:=xlPasteValues


Set FilterRange = Nothing
Application.ScreenUpdating = True
Application.CutCopyMode = False
Sheets("Data").Select
Sheets("Data").Activate
Cells.AutoFilter
Sheets("Extract").Select
Sheets("Extract").Activate

End Sub
子复制粘贴过滤器数据()
将wb设置为工作簿
将shF设置为工作表
设置wb=ActiveWorkbook
设置shF=wb.Sheets(“过滤器”)
如果是工作表(“数据”).FilterMode,则
自动过滤器
如果结束
'过滤数据
工作分解表(“数据”)范围(“A2:BB20000”)
如果shF.Range(“C4”).Value“”,则.AutoFilter字段:=1,Criteria1:=shF.Range(“C4”).Text
如果shF.Range(“C5”).Value为“”,则.AutoFilter字段:=50,准则1:=shF.Range(“C5”)
如果shF.Range(“C6”).Value为“”,则.AutoFilter字段:=19,Criteria1:=shF.Range(“C6”)
如果shF.Range(“C7”).Value“”,则.AutoFilter字段:=5,Criteria1:=shF.Range(“C7”)
如果shF.Range(“C8”).Value“”,则.AutoFilter字段:=51,Criteria1:=shF.Range(“C8”)
如果shF.Range(“C9”).Value“”,则.AutoFilter字段:=20,Criteria1:=shF.Range(“C9”)
如果shF.Range(“C10”).Value为“”,则.AutoFilter字段:=23,Criteria1:=shF.Range(“C10”)
如果shF.Range(“C11”).Value“”,则.AutoFilter字段:=7,Criteria1:=shF.Range(“C11”)
以
'复制数据后筛选
wb.表格(“数据”).范围(“A3:BB20000”).偏移量(1,0).特殊单元格(xlCellTypeVisible).复制
工作分解表(“摘录”)。选择
单元格(12,1).粘贴特殊粘贴:=XLPasteValue
设置FilterRange=Nothing
Application.ScreenUpdating=True
Application.CutCopyMode=False
工作表(“数据”)。选择
工作表(“数据”)。激活
自动过滤器
表格(“摘录”)。选择
工作表(“摘录”)。激活
端接头

Calico,非常感谢,这个很好用:)