Excel VBA 自动筛选数组

2024-01-06

我正在使用 Microsoft Excel 的 VBA 中的自动筛选器。我对它如何处理过滤数组有疑问;我已经将原来的上下文淡化为简化版本(最初是为了理解这个问题):

在范围 A1:A5 的工作表中,假设我们有Fruit, Apple, Banana, Orange, and Pear, 分别。已应用自动过滤器,以便Fruit是列标题。

运行以下代码将返回预期结果(Apple, Banana, and Orange但不是Pear):

Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
    Criteria1:=Array("=*an*", "=*app*"), Operator:=xlFilterValues

在我正在开发的项目中,过滤条件作为字符串变量传入,其工作方式如上。问题是并非所有标准每次都会应用,因此其中一些标准应该没有效果。

例如:

Dim A As String, B As String, C As String
A = "=*an*"
B = Empty
C = "=*ap*"

Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
    Criteria1:=Array(A, B, C), Operator:=xlFilterValues

With B放入混合中,过滤不返回任何记录(无论是否为空,设置为Empty,或使用通配符,如=*)。更换B with Empty然而,实际条件数组中的(硬编码)返回预期结果。

我过去使用过类似的代码(并且它可以工作),尽管 AutoFilter 是 ListObject 的一部分。此时,我唯一能想到的就是将过滤器连接成一个带有分隔符的字符串,并将其分割成一个数组变量(这样它就是精确的大小,因为集合中未设置的项目也会以同样的方式弄乱它)标准变量可以)。但这似乎不直观且麻烦。

我在这里遗漏了一些明显的东西吗?


我想不出一种不涉及测试空参数的方法来做到这一点,这是一种可能适合您的方法,并且还可以防止重复的表达式。

Sub Main()
    Dim a As String
    Dim B As String
    Dim C As String
    Dim filterCriteria as Variant
    a = "=*an*"
    B = Empty
    C = "=*ap*"
    filterCriteria = CombineArrays(Array(a, B, C))

    If Not uBound(filterCriteria) = -1 Then 

        Range("A1").Select
        ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
            Criteria1:=filterCriteria, Operator:=xlFilterValues

    End If
End Sub

Function CombineArrays(arr As Variant) As Variant
    Dim a As Variant
    Dim filterDic As Object 'Scripting.Dictionary
    Set filterDic = CreateObject("Scripting.Dictionary")

    For Each a In arr
        If Not filterDic.Exists(a) And Not a = vbNullString Then
            filterDic.Add a, a
        End If
    Next

    CombineArrays = filterDic.Keys

    Set filterDic = Nothing
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA 自动筛选数组 的相关文章

  • 查找并替换目录中所有 Excel 文件工作簿中的字符串

    我正在编写 VBA 代码来替换位于特定目录中的多个 Excel 文件 工作簿 中的特定字符串 我尝试在 Stack Overflow 上搜索 找到答案 但这与通过 Excel 中的宏替换文本文件中的字符串有关 相同的链接是查找并替换文件中的
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • 证明 Excel VBA Scripting.Dictionary 不保留项目插入顺序

    我正在尝试决定是否为我的项目使用 Excel VBA 集合或字典 出于多种原因 我倾向于字典 但在使用字典时我会继续阅读它For Each循环检索字典项目或从字典 Items 数组读取项目时 检索顺序可能不是添加项目的顺序 这对于我的应用程
  • MS Access - 粘贴确认事件后

    当用户将记录直接粘贴到数据表子报表中时 是否可以在显示粘贴确认消息后捕获事件 我需要它能够在审计表中创建新记录时进行记录 通过捕获更新前 更新后和插入事件 我可以轻松创建已添加的记录集合 准备将详细信息插入审核日志 但是在所有这些事件触发后
  • 复制一张工作表上的静态范围,然后根据单元格中的单个值粘贴到另一张工作表中的动态范围

    我对这个问题分为三个部分 我在 Sheet1 A1 中有一个带有周数的单元格 我在 Sheet1 B1 F1 中有一个需要复制的静态范围 然后 我需要将该值粘贴到 Sheet2 中的动态范围中 偏移量为行的周数 这是我正在为我经常使用的工作
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 将ADODB二进制流转换为字符串vba

    我有以下问题 我有一个存储在服务器上的 CSV 文件 但它有 3 个字符作为分隔符 我想从 URL 加载数据并使用 作为分隔符将数据填充到 Excel 页面的列中 到目前为止 我找到了使用 ADODB 记录集从网站加载文件的代码 但我无法进
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • 在二维范围内查找匹配的公式

    我需要一个公式来查找二维范围内的值并返回匹配单元格的坐标或单元格地址 例如 R A B C 1 John Matt Pete 2 Sara Bret Chad 3 Lila Maya Cami 我想搜索范围A1 C3 for Chad并返回
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Excel:#CALC!使用 MAP 函数计算间隔重叠时出现错误(嵌套数组)

    我正在努力解决以下公式 它适用于某些情况 但不适用于所有情况 名字input有失败的数据集 得到一个 CALC 描述 嵌套数组 错误 LET input N1 0 0 N1 0 10 N1 10 20 names INDEX input 1
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V

随机推荐

  • SASS 和@font-face

    我有以下 CSS 我如何在 SASS 中描述它 我尝试用 css2sass 反向编译它 但不断收到错误 这是我的 CSS 可以工作 吗 font face font family bingo src url bingo eot src lo
  • React:“重定向”未从“react-router-dom”导出

    我在运行时收到以下错误npm run start在终端中 尝试导入错误 重定向 未从 react router dom 导出 我已经重新安装了node modules react router dom react router 还重新启动了
  • 什么是 CUDA 上下文?

    谁能解释一下或者给我推荐一些关于什么是 CUDA 上下文的好资料 我搜索了 CUDA 开发者指南 但对它并不满意 任何解释或帮助都会很棒 cuda API 公开了有状态库的功能 两个连续的调用彼此相关 简而言之 上下文就是它的状态 The
  • iOS:如何将 MKMapPoint 或 CLLocationCooperative2D 转换为 UTM?

    根据我的阅读 这需要一些我不擅长的复杂数学 所以 我在这里问 有人有将 MKMapPoint 或 CLLocationCooperative2D 转换为 UTM 值的经验吗 我找到了这个资源 http www uwgb edu dutchs
  • 什么是 csv 文件以及如何使用 java 代码解析它? [复制]

    这个问题在这里已经有答案了 可能的重复 快速 CSV 解析 https stackoverflow com questions 6857248 fast csv parsing 如何正确地将 CSV 文件解析为二维数组 https stac
  • 了解非阻塞 Web 服务调用与非阻塞 JDBC 之间的区别

    我试图从概念上理解为什么在 Play Framework 2 0 中 调用被认为是最佳实践WS url get 对于 Web 服务调用 但是如果您将任何其他阻塞调用 例如 JDBC 调用 包装在 Promise 中 是否建议您在默认执行上下
  • Python - 根据这些值拟合 GEV 分布

    我对 Python 很陌生 我在互联网上浏览过 但找不到任何可以帮助我解决问题的逻辑 我在图中有降水值 现在我需要根据图中的这些值拟合 GEV 分布 每个值等于从 1974 年到 2017 年的一年的最大值 因此总共有 43 个值 这些是值
  • 如何通过 Firebase 设置自定义身份验证声明并识别平台

    我正在关注 firebase 文档here https firebase google com docs auth extend with blocking functions setting custom and session clai
  • 如何读取msmq消息(我,不是电脑)

    我想查看队列内部 msm 控制台管理单元有此属性对话框 但很难阅读 并且对我来说重要的消息被编码 如下所示 3C 3F 78 6D 6C 20 76 65 3C 65 73 62 3A 6D 65 73
  • Python:如何处理子类中的类型提示?

    我有一个基类Base和一个子类Sub 我还有另外两门课BaseMember and SubMember BaseMember 后者是前者的子类 现在我只想让基类输入其函数返回的提示BaseMember 对象 而子类具有返回的函数SubMem
  • 如何找到我所在域名的简称?

    我想返回我正在运行的计算机的域的短名称 我不想要 env USERDOMAIN因为这是用户登录的域 可能与计算机所在的域不同 如果我这样做 gwmi win32 computersystem Domain 这让我获得了 FQDN 但我想要类
  • 无法找到模块“mscorwks.dll”

    我尝试使用 winDBG 来调试转储文件 当我运行 loadby sos mscorwks dll 时 它给了我一条错误消息 无法找到模块 mscorwks dll 有没有人见过这个 如果您正在调试 NET 4 0应用程序 您需要使用以下内
  • 检查手机上的互联网连接

    我想检查我的手机是否可以连接互联网 我已经看到几个问题了 其中之一是Question https stackoverflow com questions 13617017 windows phone 8 connection handler
  • 如何在控制台应用程序中设置默认连接字符串?

    在我的带有 Web 界面的 MVC 项目中 我习惯在 Web Config 文件中设置连接字符串 但是 现在我正在制作一个沼泽标准控制台应用程序 也带有数据库挂钩 但如何为应用程序全局设置连接字符串 目前 我正在设置 var dbIndex
  • 当为结构体分配 null 值时,CLR 如何绕过抛出错误?

    我试图理解这段代码中的一件事 Nullable
  • 从 Azure 连接到 HTTPS Web 服务

    我在 Azure 中有一个 Web 角色 必须连接到受 SSL 保护的外部 Web 服务 当应用程序尝试连接到 Web 服务时 会出现错误 无法建立 SSL TLS 安全通道的信任关系 具有权限 certname organization
  • WMI - 直接访问 Win32_OperatingSystem 的单例实例

    我无法直接访问Win32 操作系统通过 WMI 公开的管理类 它是一个单例类 我非常确定 Win32 OperatingSystem 是获取单例实例的正确路径语法 对 InvokeMethod 的调用会产生问题底部列出的异常 访问 Clas
  • 是否可以使用 Commons Beanutils 自动实例化嵌套属性?

    我在用着PropertyUtils setProperty 对象 名称 值 Apache Commons Beanutils 的方法 开设这些课程 public class A B b public class B C c public c
  • java中如何从字符串中删除一些单词

    我在android平台上工作 我使用一个字符串变量来填充html内容 之后我想删除一些单词 具体来说 删除之间的任何单词 标签 有什么解决办法吗 String newHtml oldHtml replaceFirst s 1 3 解释 ol
  • Excel VBA 自动筛选数组

    我正在使用 Microsoft Excel 的 VBA 中的自动筛选器 我对它如何处理过滤数组有疑问 我已经将原来的上下文淡化为简化版本 最初是为了理解这个问题 在范围 A1 A5 的工作表中 假设我们有Fruit Apple Banana