Excel AutoFilter XLFilterValues数组需要VBA

Excel AutoFilter XLFilterValues数组需要VBA,excel,vba,filter,unique-values,Excel,Vba,Filter,Unique Values,我是VBA新手,我正在尝试创建一个宏,该宏将根据另一个工作表中包含该列唯一值的单元格值过滤一个工作表中的列(规则)。唯一值用“&”分隔: 例如,单元格可能包含以下值:19.1&19.2&19.2c&14.3a&14.3b&14.3b(1)&14.3b(2)&14.3b(3)&14.3c&14.3c(1)&14.3c(2)&14.7a 这些值中的每一个在规则表的C列中都有一个唯一的行,我想在该列的表中筛选所有这些值 我尝试了以下方法,但无效: Sub ArrayFilter() Dim Rules

我是VBA新手,我正在尝试创建一个宏,该宏将根据另一个工作表中包含该列唯一值的单元格值过滤一个工作表中的列(规则)。唯一值用“&”分隔:

例如,单元格可能包含以下值:19.1&19.2&19.2c&14.3a&14.3b&14.3b(1)&14.3b(2)&14.3b(3)&14.3c&14.3c(1)&14.3c(2)&14.7a

这些值中的每一个在规则表的C列中都有一个唯一的行,我想在该列的表中筛选所有这些值

我尝试了以下方法,但无效:

Sub ArrayFilter()
Dim Rules As String
Dim ArrayFilter As String

Dim arr As Variant

'This is the cell with the values
' e.g 19.1 & 19.2 & 19.2c & 14.3a & 14.3b & 14.3b(1) & 14.3b(2) & 14.3b(3) & 14.3c & 14.3c(1) & 14.3c(2) & 14.7a
Rules = ActiveCell.Offset(0, 38).Range("A1").Value
' I'm trying to convert this to a string for the filter crieria
ArrayFilter = Chr(34) & Replace(Rules, " & ", Chr(34) & ", " & Chr(34)) & Chr(34)
'Now I make this an Array
arr = Array(ArrayFilter)


Sheets("2019 Rules Breakdown").Select
Application.Run "RemoveAndReApplyFilters"
Range("C1").Select

ActiveSheet.ListObjects("Table10").Range.AutoFilter Field:=3, Criteria1:=arr, _
        Operator:=xlFilterValues
        
'This fails, when I look at the filter deployed it is using Equals and just has the arr output.

End Sub
任何帮助都将受到衷心欢迎


谢谢

您尝试获取阵列的方式不合适。您可以通过以下方式进行检查:

 Dim rules As String, ArrayFilter As String, arr
 rules = "19.1 & 19.2 & 19.2c & 14.3a & 14.3b & 14.3b(1)"

 ArrayFilter = Chr(34) & Replace(rules, " & ", Chr(34) & ", " & Chr(34)) & Chr(34) 
 arr = Array(ArrayFilter)

 Debug.Print Join(arr, "|"), UBound(arr) 'it will return "19.1", "19.2", "19.2c", "14.3a", "14.3b", "14.3b(1)"    0 .
                                         'meaning an array with a single element, the long string...
End Sub
现在,使用下一种方法,对于相同的字符串,数组看起来应该是:

Sub testArrayFromString()
 Dim rules As String,  arr1

 rules = "19.1 & 19.2 & 19.2c & 14.3a & 14.3b & 14.3b(1)"
 arr1 = Split(rules, " & ")
 Debug.Print Join(arr1, "|"), Ubound(arr1) '19.1|19.2|19.2c|14.3a|14.3b|14.3b(1)       5 
                                           'proving that it is an array with 6 elements (0 based)
            'Being in VBE, press `Ctrl + G` to see the result in `Immediate Window`.
End Sub

尝试获取数组的方式不合适。您可以通过以下方式进行检查:

 Dim rules As String, ArrayFilter As String, arr
 rules = "19.1 & 19.2 & 19.2c & 14.3a & 14.3b & 14.3b(1)"

 ArrayFilter = Chr(34) & Replace(rules, " & ", Chr(34) & ", " & Chr(34)) & Chr(34) 
 arr = Array(ArrayFilter)

 Debug.Print Join(arr, "|"), UBound(arr) 'it will return "19.1", "19.2", "19.2c", "14.3a", "14.3b", "14.3b(1)"    0 .
                                         'meaning an array with a single element, the long string...
End Sub
现在,使用下一种方法,对于相同的字符串,数组看起来应该是:

Sub testArrayFromString()
 Dim rules As String,  arr1

 rules = "19.1 & 19.2 & 19.2c & 14.3a & 14.3b & 14.3b(1)"
 arr1 = Split(rules, " & ")
 Debug.Print Join(arr1, "|"), Ubound(arr1) '19.1|19.2|19.2c|14.3a|14.3b|14.3b(1)       5 
                                           'proving that it is an array with 6 elements (0 based)
            'Being in VBE, press `Ctrl + G` to see the result in `Immediate Window`.
End Sub

请尝试简单的:
arr=Split(ActiveCell.Offset(0,38).Range(“A1”).Value,&”)
您将获得必要的数组<代码>规则和
数组过滤器
变量是不必要的。我的意思是,您不能按照自己的方式获得您希望/相信/需要的数组。阵列将分别只有一个元素:
“19.1”、“19.2”、“19.2c”、“14.3a”、“14.3b”、“14.3b(1)”等。您可以使用
Debug.print Join(arr,“|”)测试获得的数组
fableus!工作很愉快。非常感谢您的快速响应和支持,弗雷斯。很高兴我能帮上忙!我将在回答中转换注释,添加一些相关的方式来检查…请尝试简单的:
arr=Split(ActiveCell.Offset(0,38).Range(“A1”).Value,&”)
,您将获得必要的数组<代码>规则
数组过滤器
变量是不必要的。我的意思是,您不能按照自己的方式获得您希望/相信/需要的数组。阵列将分别只有一个元素:
“19.1”、“19.2”、“19.2c”、“14.3a”、“14.3b”、“14.3b(1)”等。您可以使用
Debug.print Join(arr,“|”)测试获得的数组
fableus!工作很愉快。非常感谢您的快速响应和支持,弗雷斯。很高兴我能帮上忙!我将在回答中转换评论,添加一些相关的方式来检查。。。