Excel VBA:如何筛选出数组

Excel VBA:如何筛选出数组,excel,vba,filter,Excel,Vba,Filter,如何通过VBA过滤出数组。我的意思是,我想从字段29中排除arrarrayarr是一个很长的列表。以下代码段不起作用 arr = Array("<>0735", "<>801124", "<>0613","<>0921", "<>1086", "<>0949", "<>0494&quo

如何通过VBA过滤出数组。我的意思是,我想从字段29中排除
arr
array<代码>arr是一个很长的列表。以下代码段不起作用

arr = Array("<>0735", "<>801124", "<>0613","<>0921", "<>1086", "<>0949", "<>0494", "<>0767", "<>0739")
MySheet.Range("AB1").AutoFilter _
    Field:=29, _
    Criteria1:=arr, _
    Operator:=xlFilterValues
arr=Array(“0735”、“801124”、“0613”、“0921”、“1086”、“0949”、“0494”、“0767”、“0739”)
MySheet.Range(“AB1”).AutoFilter_
字段:=29_
准则1:=arr_
运算符:=xlFilterValues

这是一个现有的SO答案,可能会有所帮助。基于此响应,听起来您可能需要解决方案,因为vba无法在一列中处理多个条件:


这里有一个现有的SO答案可能会有所帮助。基于此响应,听起来您可能需要解决方案,因为vba无法在一列中处理多个条件:


使用过滤器功能可能会获得您想要的功能

=FILTER(<data>, ISNA(MATCH(<criteria column>, <exclude list>, 0)))
=过滤器(,ISNA(匹配(,0)))

这将过滤掉中的值与中的某个值匹配的所有行。

使用筛选函数可能会获得所需的功能

=FILTER(<data>, ISNA(MATCH(<criteria column>, <exclude list>, 0)))
=过滤器(,ISNA(匹配(,0)))
这将筛选出中的值与中的某个值匹配的所有行。

如果要使用自动筛选并排除多个值,请创建一个仅包含“良好”值的数组。假设我们从以下内容开始:

我们想把走狗排除在外。我们需要创建一个“无走狗”阵列:

Sub NoStooges()
尺寸rng作为范围,c作为集合
尺寸r为范围,v为字符串,n为长度
我想我会很长的,嗯
设置rng=范围(“A2:A20”)
集合c=新集合
对于rng中的每个r
v=r.值
如果v“Larry”和v“Moe”和v“Curley”那么
出错时继续下一步
c、 加五,集体安全技术审查(五)
错误转到0
如果结束
下一个r
n=c.计数
ReDim arr(1到n)
对于i=1到n
arr(i)=c.第(i)项
接下来我
使用ActiveSheet
If.FilterMode然后Cells.AutoFilter
.Range(“$A$1:$A$20”)。自动筛选
.Range(“$A$1:$A$20”)。自动筛选字段:=1,标准1:=(arr),运算符:=xlFilterValues
以
端接头
数组
arr
及其关联集合只有三个元素{a,b,c}。该代码生成:

如果要使用自动筛选并排除多个值,请创建一个仅包含“良好”值的数组。假设我们从以下开始:

我们希望排除Stooges。我们需要创建一个“无Stooge”数组:

Sub NoStooges()
尺寸rng作为范围,c作为集合
尺寸r为范围,v为字符串,n为长度
我想我会很长的,嗯
设置rng=范围(“A2:A20”)
集合c=新集合
对于rng中的每个r
v=r.值
如果v“Larry”和v“Moe”和v“Curley”那么
出错时继续下一步
c、 加五,集体安全技术审查(五)
错误转到0
如果结束
下一个r
n=c.计数
ReDim arr(1到n)
对于i=1到n
arr(i)=c.第(i)项
接下来我
使用ActiveSheet
If.FilterMode然后Cells.AutoFilter
.Range(“$A$1:$A$20”)。自动筛选
.Range(“$A$1:$A$20”)。自动筛选字段:=1,标准1:=(arr),运算符:=xlFilterValues
以
端接头
数组
arr
及其关联集合只有三个元素{a,b,c}。该代码生成:


尝试手动录制宏,不包括
29
,并查看录制的代码。什么不起作用?您尝试按哪个列进行筛选(例如,
AC
BD
或…)?发布数据的图像肯定会使所有读者受益。Excel/VBA不允许使用两个以上的排除标准。您只能使用一个额外的列来执行此操作,其中使用的公式能够为所有涉及的条件返回相同的字符串/布尔值,然后根据它进行筛选。尝试手动录制宏,不包括
29
,并查看录制的代码。什么不起作用?您尝试按哪个列进行筛选(例如,
AC
BD
或…)?发布数据的图像肯定会使所有读者受益。Excel/VBA不允许使用两个以上的排除标准。您只能使用一个额外的列来执行此操作,其中使用的公式能够为所有涉及的条件返回相同的字符串/布尔值,然后根据它进行筛选。友好提示:工作表的
。由于[MS Help]()的原因,FilterMode
属性是只读的@T.M.谢谢…………我修复了代码…………友好提示:工作表的
.FilterMode
属性由于[MS Help]()@T.M.谢谢…………我修复了代码。。。。。。。。。。。。。。。。。。。。。。或者包括三个名称数组而不是列范围
=过滤器(A2:A20,ISNA(匹配(A2:A20,{“Curley”,“Moe”,“Larry”},0))
。无论如何,当前动态版本(MS 365/2019)的有效答案。如果能够添加/编辑一些解释,说明为什么这样做是可行的(至少对新手是这样:-)。。。或者包括三个名称数组而不是列范围
=过滤器(A2:A20,ISNA(匹配(A2:A20,{“Curley”,“Moe”,“Larry”},0))
。无论如何,当前动态版本(MS 365/2019)的有效答案。如果能够添加/编辑一些解释,说明为什么这样做是可行的(至少对于新手来说:-)