热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用excelvba过滤掉多个条件

如何解决《使用excelvba过滤掉多个条件》经验,为你挑选了1个好方法。

我在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

但它没有用.

为什么我不能使用这段代码?

它给出了这个错误:

运行时错误1004范围类的autofilter方法失败

我怎么能这样做?



1> aucuparia..:

我认为(从实验 - MSDN在这里没有用),没有直接的方法来做到这一点.设置Criteria1为a Array等效于使用下拉列表中的复选框 - 正如您所说,它将仅根据与数组中某个项匹配的项过滤列表.

有趣的是,如果您有文字值"<>A""<>B"在列表中并对这些文件进行过滤,则会出现宏录制器

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

哪个有效.但是,如果您具有文字值"<>C",并且在录制宏时过滤所有三个(使用勾选框),则宏录制器会精确复制您的代码,然后失败并显示错误.我想我称之为一个错误 - 你可以使用你无法用VBA做的UI做过滤器.

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

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

根据确切的问题,有几种可行的解决方法:

    在B列中使用带有公式的"辅助列",然后对其进行过滤 - 例如=ISNUMBER(A2),=NOT(A2="A", A2="B", A2="C")然后过滤TRUE

    如果您无法添加列,请使用自动Criteria1:=">-65535"过滤器(或低于您预期的合适数量),这将过滤掉非数字值 - 假设这是您想要的

    写一个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


推荐阅读
author-avatar
yyyyyyyyyyyyy燁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有