用于动态数组筛选的 Excel 宏出错

Error with Excel Macro for Dynamic array filtering

提问人:M Muaz 提问时间:11/17/2023 最后编辑:braXM Muaz 更新时间:11/18/2023 访问量:38

问:

我有这条线,效果很好

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 中获取这些值。

但是我使用的任何方法都只会过滤前两个,而不是全部。

数组 Excel VBA 筛选器

评论


答:

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 位数字 (),则筛选器将失败。CStr13.1CStr(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 个宏尝试后也做不到