提问人:M Muaz 提问时间:11/17/2023 最后编辑:braXM Muaz 更新时间:11/18/2023 访问量:33
用于动态数组筛选的 Excel 宏出错
Error with Excel Macro for Dynamic array filtering
问:
我有这条线可以完美地工作
ActiveSheet.Range("A6").AutoFilter Field:=6, Criteria1:=Array("13.1", "13.2", "13.3", "13.4", "13.5"), Operator:=xlFilterValues
问题是这不是动态的,我尝试了很多方法来使它动态化,但都失败了 我希望从活动表单元格 Q1,R1,S1,T1,U1,V1 中获取这些值。
但是我使用它的任何方法都只会过滤前两个,而不是全部。
答:
1赞
FaneDuru
11/17/2023
#1
好吧,您可以(直接)提取一个数组以用作条件。但是数组元素必须是字符串,即使过滤后的列包含数字......为了使其正常工作,必须将每个数组元素转换为字符串。
请尝试以下方法:
Sub testFilteringCol5()
Dim arrCrit() As Variant, i As Long
arrCrit = Range("Q1:V1").value 'place the range in an array
'cast each array element to string:
For i = 1 To UBound(arrCrit, 2): arrCrit(1, i) = CStr(arrCrit(1, i)): Next i
'use the strings array as `Criteria1` (columns headers must exist on the 6th row):
ActiveSheet.Range("A6").AutoFilter field:=6, Criteria1:=arrCrit, Operator:=xlFilterValues
End Sub
请在测试后发送一些反馈。
评论
1赞
FunThomas
11/17/2023
请注意,如果设置了范围的数字格式,并且结果与显示的数字不同,则过滤器将失败。示例:Q1 包含值 。 将返回字符串 ,(无论 Q1 的格式如何。如果现在数据单元格(F 列)的格式设置为显示 2 位数字 (),则筛选器将失败。CStr
13.1
CStr(Q1)
"13.1"
13.10
0赞
FaneDuru
11/17/2023
@FunThomas 当然,它会失败......条件(字符串转换)值必须与要筛选的列中的值完全匹配。我认为情况确实如此。OP 说,显示的代码可以正常工作,他只是不知道如何使其动态化,从“Q1:V1”范围内提取值。如果条件范围的格式设置为在现有的非零小数点之后添加的任何零,无论如何都会消失。现在我可以看到我使用了“Q1:U1”......我将编辑代码并更正它。General
0赞
M Muaz
11/20/2023
@FaneDuru哇,这 100% 正确工作,我放弃了,认为这是不可能的,即使是 chatgpt 在给了我 10-15 个宏尝试后也做不到
评论