gpt4 book ai didi

excel - 使用excel vba过滤掉多个条件

转载 作者:行者123 更新时间:2023-12-01 17:49:43 24 4
gpt4 key购买 nike

我在 A 列、1、2、3、4、5 和 A、B、C 中有 8 个变量。
我的目标是过滤掉A、B、C,只显示1-5。

我可以使用以下代码来做到这一点:

My_Range.AutoFilter Field:=1, Criteria1:=Array("1", "2", "3","4","5"), _
Operator:=xlFilterValues

但是代码的作用是过滤变量 1 到 5 并显示它们。

我想做相反的事情,但通过过滤掉 A、B、C 并显示变量 1 到 5 来产生相同的结果

我尝试了这段代码:

My_Range.AutoFilter Field:=1, Criteria1:=Array("<>A", "<>B", "<>C"), _
Operator:=xlFilterValues

但是没有成功。

为什么我不能使用此代码?

它给出了这个错误:

Run time error 1004 autofilter method of range class failed

我该如何执行此操作?

最佳答案

我认为(通过实验 - MSDN 在这里没有帮助)没有直接的方法可以做到这一点。设置Criteria1Array相当于使用下拉列表中的复选框 - 正如您所说,它只会根据与数组中的其中一项匹配的项目来过滤列表。

有趣的是,如果您有文字值 "<>A""<>B"在列表中并过滤宏记录器提供的内容

Range.AutoFilter Field:=1, Criteria1:="=<>A", Operator:=xlOr, Criteria2:="=<>B"

有效。但如果你有文字值 "<>C"同样,当您在录制宏时过滤所有三个(使用复选框)时,宏记录器会精确复制您的代码,然后会因错误而失败。我想我会称其为错误 - 有些过滤器可以使用 UI 执行,但无法使用 VBA 执行。

无论如何,回到你的问题。可以过滤不等于某些条件的值,但最多只能过滤两个不适合您的值:

Range("$A$1:$A$9").AutoFilter Field:=1, Criteria1:="<>A", Criteria2:="<>B", Operator:=xlAnd

根据具体问题,有几种可能的解决方法:

  1. 使用“辅助列”和 B 列中的公式,然后对其进行过滤 - 例如=ISNUMBER(A2)=NOT(A2="A", A2="B", A2="C")然后过滤TRUE
  2. 如果无法添加列,请使用自动筛选 Criteria1:=">-65535" (或低于您期望的合适数字)这将过滤掉非数字值 - 假设这是您想要的
  3. 编写一个 VBA 子程序来隐藏行(与自动筛选器不完全相同,但根据您的需要可能就足够了)。

例如:

Public Sub hideABCRows(rangeToFilter As Range)
Dim oCurrentCell As Range
On Error GoTo errHandler

Application.ScreenUpdating = False
For Each oCurrentCell In rangeToFilter.Cells
If oCurrentCell.Value = "A" Or oCurrentCell.Value = "B" Or oCurrentCell.Value = "C" Then
oCurrentCell.EntireRow.Hidden = True
End If
Next oCurrentCell

Application.ScreenUpdating = True
Exit Sub

errHandler:
Application.ScreenUpdating = True
End Sub

关于excel - 使用excel vba过滤掉多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com