我正在尝试根据预定范围的变量过滤一组数据。这些将由电子表格的用户在“主页”工作表的设置区域中声明。但是,在运行宏时,它不会返回任何结果。我试图以多种方式解决此问题,但是没有任何结果返回期望的结果。
到目前为止,我尝试使用运算符,将值声明为数组,过滤将包含值和通配符的单元格范围。
我当前的代码如下,这两个都不返回我想要的输出
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,那么我会看到一组应包含 但不存在的结果。
答案 0 :(得分:0)
用于自动过滤条件的阵列可用于 1-D 阵列。拾取一列大块时,将创建一个 2-D 数组。您需要使用TRANSPOSE()
进行转换。
说Sheet1
中有我们>
和Sheet2
中的
运行:
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
将产生:
由TRANSPOSE()
构成 1-D 数组。