使用自动过滤器时遇到问题。我需要一次过滤服务器值。 我在第一张纸上有值列表(第I2列:I50),在第二张纸上,我需要从数据库中过滤所有这些值。
到目前为止我的代码是:
Dim OZ As Variant
OZ = Array("100001", "100015")
Sheets("Sheet2").Select
Range("A1:M1").AutoFilter Field:=3, Criteria1:=OZ, _
Operator:=xlFilterValues
到目前为止这种方法非常有效。现在我想以某种方式设置宏,所以数组引用Sheet1和I2的范围:I50。此范围内的值是由函数计算的变量。
你能帮我解决一下吗?。
由于
答案 0 :(得分:0)
此For
会将您的OZ变量设置为Sheet1
'You need 49 values I2:I50
Dim OZ(49) As Variant
For i = 0 To 48
'1st data row starts at I2, hence + 2
OZ(i) = "=" & Worksheets("Sheet1").Range("I" & i + 2).Value
Next i
Worksheets("Sheet2").Range("A1:M1").AutoFilter Field:=3, Criteria1:=OZ, Operator:=xlFilterValues
答案 1 :(得分:0)
您可以使用Join()和Split()函数返回与Criteria1
兼容的Variant数组Dim OZ As Variant
OZ = Split(Join(Application.Transpose(Worksheets("Sheet1").Range("I2:I50").Value), "|"), "|")
Worksheets("Sheet2").Select
Range("A1:M1").AutoFilter Field:=3, _
Criteria1:=OZ, _
Operator:=xlFilterValues
但是你应该避免选择/选择/激活/ ActiveXXX 模式并使用明确的完全限定范围引用
Worksheets("Sheet2").Range("A1:M1").AutoFilter Field:=3, _
Criteria1:=Split(Join(Application.Transpose(Worksheets("Sheet1").Range("I2:I50").Value), "|"), "|"), _
Operator:=xlFilterValues
答案 2 :(得分:0)
我认为高级过滤器可以完成这项工作。
Sub ExampleCopy()
Sheets("Table").Range("A1:B7").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Cryteria").Range("A1:15"), _
CopyToRange:=Sheets("Result").Range("A1"), _
Unique:=False
Sheets("Result").Select
End Sub
'OR
Sub ExampleInPlace()
Sheets("Table").Range("A1:A11").AdvancedFilter Action:=xlFilterInPlace _
, CriteriaRange:=Sheets("Cryteria").Range("A1:A6"), Unique:=False
End Sub
第一个将结果复制到自定义位置。在这种情况下,对于“结果”单元格A1。 第二个将过滤到位,因此在表“表”中
请记住,为了使其工作,您的cryteria列标题必须与数据表列相同。
您可以尝试使用功能区选项卡“数据”部分“排序和过滤”中的“高级”录制此宏。
祝你好运。答案 3 :(得分:0)
范围可以是evaluated到数组:
[Sheet2!A1:M1].AutoFilter 3, [transpose(text(Sheet1!I2:I50, "@"))], xlFilterValues