【问题标题】:Excel VBA: using autofilter smartlyExcel VBA:巧妙地使用自动过滤器
【发布时间】:2016-04-22 08:39:45
【问题描述】:

所以,这是我的问题...

我有一列字符串如下所示:

“2,3” “1,2” “2” “3,22,1” "32,5"

现在,我想做的是找到一种方法(无需为此编写我自己的函数)来过滤不包含“2”的所有内容(带有“32”或“22”的行需要过滤掉)。

因此,例如,通过仅保留上面列表中的“2”,我想得到: “2,3” “1,2” “2”

我现在使用以下过滤器进行过滤: 1. 包含“2”或包含“,2”或等于“2”

不幸的是,前两个过滤器会保留“3,22,1”,而第二个过滤器会保留“32,5”。

关于如何使用过滤器功能做到这一点的任何想法? 就像我说的,我可以为它编写一个函数,但我会尽量减少代码并学习如何更好地使用 VBA。

提前感谢您! 里卡多

【问题讨论】:

  • 我只是想到了一个解决方案..需要测试,现在没有时间.. ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:=Array("2, ", ",2","2",",2,")
  • 酷,如果这不起作用,我很确定有一种方法可以遍历单元格并使用 InStr 根据标准进行检查!如果需要,我可以提供帮助,但同时祝你好运:)
  • 对每个 ",2" "2,", "2", ",2," 分别使用自动过滤器可以正常工作。当我尝试使用这样的数组组合它们时:Selection.AutoFilter field:=1, Criteria1:=Array(",2", "2,", "2", " ,2,") 它只给我数组最后一个元素的过滤器。我需要找到一种方法来应用由 OR 链接的 4 个条件。我知道原则上只能使用 2,但必须有一种解决方法。我认为使用 Array() 是其中之一,但它对我不起作用。有什么想法吗?
  • @Riccardo 我不认为你可以用AutoFilter 做到这一点。您可以通过编写用于测试2 的Excel 公式或UDF 轻松地使用AdvancedFilter 来完成此操作。当然,自己动手可能会更快。
  • @Riccardo 实际上,您可以使用 AutoFilter 和一个包含返回 true 或 false 的公式的帮助列来做到这一点。然后过滤帮助列。数组输入公式=OR(EXACT("2",TRIM(MID(SUBSTITUTE(A6,",",REPT(" ",99)),(ROW(INDIRECT("1:10"))-1)*99+1,99))))可以做到这一点。

标签: string excel vba autofilter


【解决方案1】:

我仍然有点不确定您要删除什么以及要保留什么,但是使用您的一系列标准,这个怎么样:

Sheets("Sheet1").Range("A:A").AutoFilter Field:=1, Criteria1:=Array("2,", ",2","2",",2,"),_ 
Operator:=xlFilterValues

值得注意的是,在编写宏以直接引用工作表时,这是一种更安全的方法,否则它们有时会在脚本中丢失:)

【讨论】:

  • 如果您不使用 *,则您不是按“包含”过滤,而是按匹配过滤,然后您只会得到正好包含“2”的行。但是,当我在数组中使用 * 时,它不起作用(虽然它适用于单个过滤“2,*”等)
猜你喜欢
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多