范围的VBA宏自动过滤器

时间:2019-05-04 09:29:27

标签: excel vba

我正在尝试根据预定范围的变量过滤一组数据。这些将由电子表格的用户在“主页”工作表的设置区域中声明。但是,在运行宏时,它不会返回任何结果。我试图以多种方式解决此问题,但是没有任何结果返回期望的结果。

到目前为止,我尝试使用运算符,将值声明为数组,过滤将包含值和通配符的单元格范围。

我当前的代码如下,这两个都不返回我想要的输出

Dim fliterStr As Variant
filterStr = wsHome.Range("R6:R12").Value
wsMissing.Range("G1").AutoFilter field:=7, Criteria1:=filterStr

wsMissing.Range("G1").AutoFilter field:=7, Criteria1:="*X*", Operator:=xlFilterValues, Criteria2:="*Y*"

预期结果将是过滤器搜索与R6:R12范围内的变量匹配的任何值,但是当前返回的是空白。

第二段代码返回一些但不是全部的期望结果。如果我不包括运算符和Criteria2,那么我会看到一组应包含 但不存在的结果。

1 个答案:

答案 0 :(得分:0)

用于自动过滤条件的阵列可用于 1-D 阵列。拾取一列大块时,将创建一个 2-D 数组。您需要使用TRANSPOSE()进行转换。

Sheet1中有我们

enter image description here

Sheet2中的

enter image description here

运行:

Sub AutoDemo()
    Dim wsHome As Worksheet, wsMissing As Worksheet
    Dim rng1 As Range, rng2 As Range, wf As WorksheetFunction
    Dim filterStr

    Set wsHome = Sheets("Sheet1")
    Set wsMissing = Sheets("Sheet2")

    Set wf = Application.WorksheetFunction

    Set rng1 = wsHome.Range("A1:G20")

    Set rng2 = wsMissing.Range("R6:R12")
    filterStr = wf.Transpose(rng2)

    rng1.AutoFilter Field:=7, Criteria1:=filterStr, Operator:=xlFilterValues

End Sub

将产生:

enter image description here

TRANSPOSE()构成 1-D 数组。