9

我有一张表,我想按其中一列中的值过滤行。用于过滤的值存储在一个单独的列中,而不是在表中。这是我到目前为止所拥有的:

Dim table1 As ListObject
Dim range1 As Range
Set range1 = ActiveSheet.range("AM23:AM184")
'get table object
table1.range.AutoFilter Field:=3, Criteria1:=???

我不知道该为标准1 放什么。我知道它需要是一个数组,我可以将它设置为类似 Array("12","2","13") 但我需要它等于 range1 给出的范围内指定的值。任何帮助将不胜感激。

编辑:通过执行 range1.Value 然后将 Variant 转换为字符串数组,我已经能够将我的范围值放入一个数组中。这没有按我的意愿工作,因为它只是将我的过滤器设置为数组中的最后一个值。例如,如果我的数组包含 ID(“12”、“44”、“13”、“22”)并且我将 Criteria1 设置为该数组并运行它,则过滤器只选择了 22 个,而所有其他数字都被取消选择,包括12、44 和 13。

4

1 回答 1

17

我想到了!我曾尝试重新编码,但第一次尝试时,由于与一行代码相关的行太多,它给了我一个不完整的程序。所以我重录了录音给我整个代码,结果发现我遗漏了一些东西。这是整个代码:

Dim range1 As range
Set range1 = ActiveSheet.range("AM23:AM184")
Dim var1 As Variant
Dim sArray() As String
Dim i As Long
var1 = range1.Value

ReDim sArray(1 To UBound(var1))

For i = 1 To (UBound(var1))
    sArray(i) = var1(i, 1)
Next

ActiveSheet.ListObjects("Table1").range.AutoFilter Field:=3, Criteria1:=sArray, Operator:=xlFilterValues

“Operator:=xlFilterValues”是我第一次录制宏时错过的关键部分,因为录制过早停止

于 2013-04-12T20:12:31.770 回答