【问题标题】:Autofilter parts of multiple argumentsAutofilter VBA excel对多个参数的一部分
【发布时间】:2022-01-26 15:07:55
【问题描述】:

我正在尝试使用 VBA 中的 AutoFilter 函数在 excel 中使用宏时使用自动过滤器。 在我的数据集中,我有一列需要过滤,该列中的单元格填充了以我要过滤的值开头的值,例如“致病”、“多态性”、“VUS”……但是以我不想在过滤器中使用的更多文本结尾。 例如。 |变体|类| |-------|-----| |V600E |致病变异 - BRAF| |V590A |VUS-D1234567| |G12D |致病变异 - KRAS| |G15A |多态| |A56D |多态性 - KFP| |E4654M|可能是致病变异| 在这种情况下,我想过滤类以“致病性变异”、“VUS”和“可能致病性变异”开头的所有行,例如第 1-3 行和第 6 行。 我找到了一种将自动过滤器用于 2 个值的方法:

ActiveSheet.Range("$A$2:$BB$550").AutoFilter _
Field:=17, _
Criteria1:=("=patho*"), _
Operator:=xlOr, _
Criteria2:=("=VUS*"), _
Operator:=xlFilterValues

这适用于过滤器中的 2 个参数,但我不能使用超过 2 个条件。当我使用以下代码时,过滤不起作用

ActiveSheet.Range("$A$2:$BB$550").AutoFilter _
Field:=17, _
Criteria1:=Array("=patho*", "=VUS*", "=presumably patho*"), _
Operator:=xlFilterValues

谁能告诉我我做错了什么或如何解决这个问题?

非常感谢!

【问题讨论】:

  • 您没有做错任何事情,只是一次不能有两个以上带有通配符的过滤器值。一种解决方法是将列写入数组,将其循环并用虚拟值替换每个匹配项,将数组写回额外的列,用虚拟值过滤额外列中的范围,做你想做的事情(删除或复制),最后删除多余的列。

标签: excel vba autofilter


【解决方案1】:

您可以使用高级过滤器。

  • A 列和 B 列:您的范围
  • D 列:标准
  • F 和 G 列:提取

您希望就地过滤,而不是使用复制取消最后一行的注释。

Sub AdvFilter()
    Dim yourRange As Range
    Dim criteriaRange As Range
    Dim extractRange As Range
    
    Set yourRange = Range("A1:B25")
    Set criteriaRange = Range("D1:D4")
    Set extractRange = Range("F1:G1")
    
    ' Advanced filter: Copy
    yourRange.AdvancedFilter Action:=xlFilterCopy, criteriaRange:=criteriaRange, CopyToRange:=extractRange, Unique:=False
    
    ' Advanced filter: Filter in Place
    'yourRange.AdvancedFilter Action:=xlFilterInPlace, criteriaRange:=criteriaRange, CopyToRange:=extractRange, Unique:=False
End Sub

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 2021-02-23
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多