VBA AutoFilter - Criteria = Array。如果数组留空,请选择全部

时间:2016-12-29 17:09:30

标签: arrays excel vba excel-vba

我有一个宏用于根据输入到多个单元格的数据自动筛选范围。单元格A2包含文本“输入邮政编码”,邮政编码将在B2中输入。单元格A4包含文本“输入服务”,服务将在B4,B5,B6和B7中输入。

如果我将单元格B4,B5,B6和B7留空,则过滤器不会返回任何数据。但是,如果这些单元格为空,我试图让过滤器全部选中。我最初使用5个可能的选项将单元格B4作为下拉列表,并且我使用以下代码选择所有如果留空:

My_Range.AutoFilter Field:=11, Criteria1:="=" & Range("B2").Value
My_Range.AutoFilter Field:=1, Criteria1:=IIf(Trim(Range("B4").Value) = "", "<>", "=") & Range("B4").Value

但是,我希望根据输入到这些单元格中的数据(B4,B5,B6,B7)来过滤各种组合。为此,我将代码更改为以下内容:

My_Range.AutoFilter Field:=11, Criteria1:="=" & Range("B2").Value
My_Range.AutoFilter Field:=1, Criteria1:=Array(Range("B4").Value, Range("B5").Value, Range("B6").Value, Range("B7").Value), Operator:=xlFilterValues

此代码为我提供了所需的结果,但如果单元格保留为空白,则过滤器不返回任何内容,因为它在范围的“服务”列中搜索空单元格。

有没有办法将数组用于条件,但如果空白则选择全部?

1 个答案:

答案 0 :(得分:0)

只测试你想要陷入的状况:

If Len([B4] & [B5] & [B6] & [B7]) = 0 Then
    My_Range.AutoFilter Field:=1
Else
    My_Range.AutoFilter Field:=1, Criteria1:=Array(Range("B4").Value, Range("B5").Value, Range("B6").Value, Range("B7").Value), Operator:=xlFilterValues
End If