根据值列过滤excel VBA中的表

时间:2013-04-12 17:45:06

标签: excel-vba excel-2010 vba excel

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

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

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

编辑:通过执行range1.Value然后将Variant转换为字符串数组,我已经能够将我的范围值放入数组中。这不是我想要的,因为它只是将我的Filter设置为我的数组中的最后一个值。例如,如果我的数组包含ID(" 12"," 44"," 13"," 22"),我设置了Criteria1对于该数组并运行它,过滤器只选择了22个,取消选择所有其他数字,包括12,44和13。

1 个答案:

答案 0 :(得分:14)

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

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”是我第一次录制宏时错过的关键部分,因为录制已经过早停止