ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Excel多关键词筛选怎么做?三种高效方案一次讲透

Excel多关键词筛选怎么做?三种高效方案一次讲透 做数据分析或者表格处理的人几乎都遇到过同一个尴尬场景一张几千行甚至上万行的明细表领导突然让你把“华东大区、数码品类、状态为已发货”的订单都筛出来。你打开自动筛选先选大区再选品类然后还要在状态列慢慢勾选。这还算好的更痛苦的是老板说“把名称里包含手机、平板、耳机、充电器这几个词的全部挑出来”自动筛选只有一个关键词输入框你只能筛一次复制出去再筛下一个再复制来回折腾半小时最后表格还被搞得一团糟。这个问题的根源在于很多人把“筛选”理解成了自动筛选自带的那几个按钮而自动筛选的本质是单层条件过滤。一旦条件变成“多个关键词、任意命中、跨列组合”它就力不从心了。实际上Excel 和 WPS 都提供了能够“一劳永逸”的多关键词筛选方案既能做到全表匹配又能保留原始数据甚至可以一键自动完成。这篇文章就把最常用的三种方法一次讲透从函数公式到高级筛选再到 VBA 一键处理每一种都会说明适用场景和易错点你可以直接照着抄。1. 多关键词筛选到底难在哪里先把这个问题的复杂度拆开看。一张业务表格通常会包含多个维度客户名称、商品名称、区域、金额、状态、时间。用户说“多关键词筛选”实际上会对应三种不同的需求它们的技术难度是完全不一样的。第一种也是最常见的需求某一列中只要包含多个关键词中的任意一个就算命中。比如商品名称里包含“手机”或“平板”的行都要留下这叫“同列多关键词或匹配”。第二种需求是跨列组合匹配区域是“华东”并且品类是“数码”这种多列同时满足的条件在自动筛选里需要分列多次操作在高级筛选里则需要把条件放在同一行。第三种需求是扩展场景既要同列多个关键词任意命中又要同时满足另一个列的区间条件。例如“商品名称包含手机或平板且数量大于 10”。理解难度在哪里难在大多数人没有分清“或”和“且”的区别。自动筛选做的隐藏逻辑其实是保留所有“且”条件同时成立的数据行而你要做的是“或”逻辑时自动筛选根本没法直接表达。还有很多人建议用 VLOOKUP 模糊匹配来做但 VLOOKUP 只能返回第一个匹配到的值并不能把符合条件的所有行都筛出来。所以多关键词筛选真正的核心不是“筛选”这个动作而是如何正确构造条件判断逻辑再把判断结果交给筛选机制。2. 核心概念筛选的三种技术路线对比在动手操作之前先建立一个整体认知。实现全表多关键词筛选主流有三条技术路线各有各的适用场景。技术路线核心机制优势局限高级筛选使用条件区域同一行条件表示“且”不同行表示“或”原生功能不写公式支持通配符可直接筛选到其他位置条件区域需要单独维护条件更新后需要重新执行函数公式 筛选用 SEARCH、ISNUMBER、FILTER 判断关键词并生成动态结果公式结果自动更新适合做动态报告FILTER 函数需要 Excel 365 或新版 WPS旧版本不兼容VBA 宏一键筛选用代码遍历数据区域通过 InStr 判断关键词全自动可以封装成按钮适合高频重复场景需要启用宏对小白有心理门槛需要特别注意“精确匹配”和“模糊匹配”的差别。高级筛选和 SEARCH 函数默认都是模糊包含匹配也就是单元格里只要出现关键词就算命中。如果你需要完全相等的结果比如筛选状态列等于“已发货”那么不能用通配符包含的方式而应该用已发货的条件写法否则会造成误匹配。后面的示例会具体说明。3. 环境准备与前置条件这篇文章的三种方法都基于桌面版 Excel 或 WPS 表格操作不需要安装任何插件。你需要准备的是操作系统Windows 或 macOS 均可但 VBA 宏在 Windows 端体验最好。软件版本Excel 2016、2019、2021、365 均可运行高级筛选和 VBA 方案方法二中的 FILTER 函数是动态数组函数建议使用 Excel 365 或新版 WPS 表格旧版本 Excel 使用时可以用辅助列 自动筛选替代也能达到类似效果。示例数据建议先在一张不重要的表上练习避免误操作覆盖原始数据。文中演示统一使用下面这张销售明细表作为素材列结构包括区域、商品名称、数量、金额、状态。实际操作时把列名和关键词替换成你自己的业务字段即可。区域商品名称数量金额状态华东华为手机 Mate 60534990已发货华南苹果平板 iPad Air314199待发货华东索尼耳机 WH-1000XM5815992已发货华北小米充电器 67W202798已发货西南联想笔记本 拯救者215998已取消华东华为平板 MatePad611994已发货华南三星耳机 Galaxy Buds104990待发货华北绿联充电器 20W151498已发货4. 入门方案Excel 高级筛选不写公式也能完成多关键词筛选高级筛选是 Excel 中最被低估的原生功能要处理“同列多关键词或匹配”和“跨列组合条件”它都不需要写任何函数。核心思路是把筛选条件预先写到表格的某个空白区域然后再告诉 Excel 去执行。4.1 第一步准备条件区域高级筛选的第一步是构造条件区域。条件区域必须包含表头而且表头必须和数据区域的列名完全一致。比如要筛选“商品名称包含手机或平板”的行先找一个空白位置比如 H1 单元格开始建条件区域。H1 单元格输入“商品名称”H2 输入“手机”H3 输入“平板”。这里有个关键规则条件写在同一列的不同行表示“或”的关系。也就是说商品名称只要命中手机或平板这行数据就会被筛选出来。4.2 第二步执行高级筛选选中数据区域中的任意一个单元格。在 Excel 的“数据”选项卡中点击“高级”按钮。弹出的高级筛选对话框里“列表区域”默认显示整个数据表区域确认即可。“条件区域”选择 H1:H3。可以选择“在原有区域显示筛选结果”也可以选择“将筛选结果复制到其他位置”后者不会动原始数据。点击确定后Excel 就会把所有商品名称含“手机”或“平板”的行筛出来。如果是跨列组合筛选比如“区域为华东且状态为已发货”条件区域就应该写成同一行区域状态华东已发货同一行条件是“且”关系不同行条件是“或”关系这是高级筛选最重要的记忆点。4.3 注意事项与实际风险高级筛选在写入“手机”这类条件时看起来很像公式但它不是标准公式而是高级筛选专用的条件表达式。手动输入时单元格里显示的就是手机不要在前面加等号以外的内容。如果发现没有筛出任何结果第一件事就是检查条件区域是否包含表头第二检查条件表达式是否以号开头。高级筛选的另一个优势是支持多列自由组合比如“华东大区、商品名称含手机或平板、数量大于等于 5”这种复杂条件只要把同列关键词分行写、不同列条件同行写就能正确表达。对于普通办公场景这个方案就已经能解决 90% 的问题了。5. 进阶方案FILTER SEARCH 函数实现动态多关键词筛选高级筛选虽然好用但它有一个天然缺点每次数据更新或者关键词变化都要手动重新执行一次。如果领导隔三差五换个关键词池你会被反复操作烦死。这时候就应该上函数公式方案让筛选结果自动刷新。5.1 先理解 FILTER 函数FILTER 是 Excel 365 和动态数组版本提供的新函数语法是FILTER(要返回的区域, 条件, 无结果时的值)第二个参数是一个由 TRUE/FALSE 组成的判断数组。返回区域可以包含多列比如 A2:E9 代表返回整张表的 5 列。理解了这个基础用法多关键词筛选的核心就变成了如何构造这个 TRUE/FALSE 判断数组。5.2 用 ISNUMBER SEARCH 实现关键词包含判断单独一个关键词的包含判断可以写成ISNUMBER(SEARCH(手机, A2:A9))这个公式的含义是在 A2:A9 中搜索“手机”能找到就返回位置数字找不到就返回 #VALUE! 错误再用 ISNUMBER 判断是否为数字从而得到 TRUE 或 FALSE 的结果。之所以用 SEARCH 而不是 FIND是因为 SEARCH 不区分大小写更符合人习惯的模糊匹配而 FIND 区分大小写适合精确字符匹配场景。现在要让“手机、平板、耳机、充电器”四个关键词任意一个命中就需要把它们合并成一个“关键词池”用数组方式传给 SEARCHISNUMBER(SEARCH({手机,平板,耳机,充电器}, A2:A9))注意关键点SEARCH 的第二个参数是区域第一个参数是数组常量这个公式会生成一个二维数组每个单元格对应每个关键词的判断结果。只要这个二维数组里存在一个 TRUE就说明该行命中了任意一个关键词。因为 FILTER 的条件参数需要的是一个一列的逻辑数组所以需要在外面套一个判断判断每个单元格是否存在至少一个命中BYROW(ISNUMBER(SEARCH({手机,平板,耳机,充电器}, A2:A9)), LAMBDA(row, OR(row)))这个公式稍微复杂但对于新人来说可以直接复制使用只需要修改关键词数组和数据区域范围。如果觉得 LAMBDA 难以理解也可以退一步用辅助列方式逐个关键词判断再把结果用 OR 合并效果是一样的。5.3 将判断结果接入 FILTER最终公式如下FILTER(A2:E9, BYROW(ISNUMBER(SEARCH({手机,平板,耳机,充电器}, B2:B9)), LAMBDA(row, OR(row))), 无匹配数据)这里我把关键词判断放在商品名称列 B2:B9 上返回区域是 A2:E9 整行数据。公式输入后Excel 会自动溢出一个动态数组区域显示所有符合条件的行。如果还要同时满足“数量大于等于 5”这个条件把数量条件用乘法叠加进去公式变为FILTER(A2:E9, BYROW(ISNUMBER(SEARCH({手机,平板,耳机,充电器}, B2:B9)), LAMBDA(row, OR(row))) * (C2:C95), 无匹配数据)因为 TRUE 乘以 TRUE 等于 1只要有一个条件不成立结果就是 0FILTER 会自动过滤掉。5.4 旧版 Excel 的替代写法如果你用的是 Excel 2016 或 2019没有 FILTER 和 BYROW 函数那么推荐用辅助列方案。先在 F2 输入下面这条数组公式然后按 Ctrl Shift Enter 确认IF(OR(ISNUMBER(SEARCH({手机,平板,耳机,充电器}, B2))), 命中, )下拉填充后F 列会标注所有命中的行。对这个辅助列启用自动筛选选择“命中”即可。这种方式虽然没有 FILTER 那么优雅但兼容性好旧版本也能用。5.5 使用表格功能提升公式可维护性有一件事强烈建议做把数据区域转换为“表格”也就是按 Ctrl T 创建超级表。转换后公式里的区域引用会变成结构化引用比如 B2:B9 会变成 [商品名称]数据增加时公式可以自动扩展不需要每次手动改区域范围。具体操作是选中数据区域按 Ctrl T然后勾选“表包含标题”。这时再在旁边的辅助列输入公式Excel 会自动填充到最后一行新添加的数据行也会自动继承公式。6. 专业方案VBA 宏一键完成多关键词筛选函数公式虽然动态但面对“每次筛选关键词经常变、筛选完还要复制到新工作表、甚至要把多个关键词池做成下拉选项”的场景写 VBA 宏才是最终方案。这个方案的思路是把关键词放在一个指定区域宏自动读取关键词然后遍历数据行用 InStr 判断每行是否命中任意关键词最后把命中的行复制到目标工作表。6.1 示例宏代码这段宏的逻辑是从“条件设置”工作表的 A1:A10 读取关键词从“数据源”工作表的 A1:E1000 读取数据再把所有命中的行复制到“筛选结果”工作表。Sub MultiKeywordFilter() Dim wsData As Worksheet Dim wsCond As Worksheet Dim wsResult As Worksheet Dim keywords() As String Dim i As Long, j As Long Dim lastRow As Long Dim lastCol As Long Dim matchFlag As Boolean Dim targetRow As Long Dim keywordCount As Long Set wsData ThisWorkbook.Sheets(数据源) Set wsCond ThisWorkbook.Sheets(条件设置) Set wsResult ThisWorkbook.Sheets(筛选结果) keywordCount Application.WorksheetFunction.CountA(wsCond.Range(A1:A10)) If keywordCount 0 Then MsgBox 条件设置工作表的 A1:A10 中至少需要一个关键词, vbExclamation, 提示 Exit Sub End If ReDim keywords(1 To keywordCount) For i 1 To keywordCount keywords(i) wsCond.Range(A i).Value Next i lastRow wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row lastCol wsData.Cells(1, wsData.Columns.Count).End(xlToLeft).Column wsResult.Cells.Clear 复制表头 wsData.Range(A1).Resize(1, lastCol).Copy wsResult.Range(A1) targetRow 2 从第2行开始遍历数据 For i 2 To lastRow matchFlag False Dim cellText As String cellText wsData.Cells(i, 2).Value 假设关键词匹配列是B列商品名称 For j 1 To keywordCount If InStr(1, cellText, keywords(j), vbTextCompare) 0 Then matchFlag True Exit For End If Next j If matchFlag Then wsData.Rows(i).Copy wsResult.Rows(targetRow) targetRow targetRow 1 End If Next i MsgBox 筛选完成共找到 targetRow - 2 条记录, vbInformation, 完成 End Sub这段代码有几个地方需要根据实际表结构调整一是关键词读取区域“条件设置!A1:A10”二是数据区域表名“数据源”、结果表名“筛选结果”三是匹配列代码中假设是第 2 列商品名称如果你的关键词要匹配的是客户名称或者其他列需要修改wsData.Cells(i, 2)中的列号。6.2 VBA 宏的使用步骤打开 Excel按 Alt F11 进入 VBA 编辑器。在菜单栏点击“插入” - “模块”新建一个模块。把上面的代码粘贴到代码窗口中。回到 Excel在工作簿中创建三个工作表分别命名为“数据源”“条件设置”“筛选结果”。在“数据源”表中放入原始数据“条件设置”表的 A1 开始输入关键词一个单元格一个关键词。按 Alt F8选择 MultiKeywordFilter点击运行。运行结束后“筛选结果”表会生成表头和所有命中的行。这段宏还有优化的空间比如把关键词匹配从 B 列改成多列匹配或者在遍历前用数组一次性读取数据加快速度但对于几万行的数据来说当前写法足够日常使用。7. 运行结果与效果验证方法无论使用哪种方案筛选完成后都必须验证结果是否正确。这不是可选项而是避免交付错误数据的关键步骤。验证方法一数量核对。在原始数据中手动用自动筛选分别搜索每个关键词记录每个关键词独立命中的行数再和有交集的行做对比确保最终结果的行数合理。如果使用 VBA 宏弹窗会直接提示“共找到 X 条记录”你可以把这个数字和高级筛选结果对比。验证方法二抽查关键行。在结果表中抽查几条边界数据尤其注意那些包含多个关键词的复杂名称比如“华为手机 Mate 60”同时包含“手机”也应该被筛出来。还要检查状态为“已取消”的行是否被保留如果不希望保留就要在条件中增加状态列的条件。验证方法三关键词池有效性。把所有关键词清空后再测试确认高级筛选是否报错、FILTER 公式是否返回“无匹配数据”、VBA 宏是否弹出提示。这个测试可以避免业务人员误操作导致“筛选结果空白”的假象。一个非常容易犯的错误是关键词中有空格。比如你输入的是“手机 ”和“手机”看起来差不多但 InStr 匹配时会把带空格的关键词当作不同的文本造成漏匹配。建议在 VBA 宏中加入 Trim 函数去除关键词首尾空格函数公式方案中同样可以用 TRIM 包裹关键词。8. 常见问题与排查思路问题现象可能原因排查方式解决方案高级筛选结果为空条件区域表头和数据表头不一致检查条件区域表头是否包含不可见空格或别名重新输入完全一致的列名或用复制粘贴方式填入表头高级筛选自动把结果覆盖到原始区域选择了“在原有区域显示筛选结果”检查对话框设置改选“将筛选结果复制到其他位置”并指定一个空白目标区域FILTER 公式返回 #CALC! 错误没有匹配的行且没有设置无结果时的值检查第三个参数在公式末尾补充“无匹配数据”避免错误显示BYROW 公式在部分 Excel 版本不可用旧版本不支持动态数组函数查看版本信息改用辅助列 OR 的方式或者使用高级筛选VBA 宏提示下标越界工作表名称不存在检查工作簿是否有“数据源”“条件设置”“筛选结果”三个工作表统一工作表名称后重试宏筛选出的结果比预期少关键词匹配列不是目标列检查代码中Cells(i, 2)的列号修改为实际匹配的列号比如 A 列是 1C 列是 3关键词包含英文但大小写不一致SEARCH 和 InStr 默认行为不同确认是否区分大小写函数方案用 SEARCH 不区分大小写VBA 用 vbTextCompare 参数保证不区分真实业务中最容易出问题的是第一条条件区域的表头和数据表头“看着一致实际不一致”。常见的原因是列名有空格、全角半角差异或者手工输入时把“商品名称”写成了“商品 名称”。高级筛选对表头匹配的要求非常严格遇到筛选结果异常时请第一时间检查表头。9. 最佳实践与工程建议9.1 把关键词参数化不要写死在公式里函数公式方案中如果关键词直接写在公式里每次换关键词都要编辑公式容易出错也不利于他人维护。更推荐的做法是把关键词预先写在空白单元格区域然后公式引用这个区域。对于 FILTER 方案可以把关键词区域定义成名称比如定义名称关键词池引用某个区域然后在 SEARCH 中直接使用关键词池。这样业务人员只需要维护关键词列表不需要动公式。9.2 建立条件区域模板形成标准操作流程高级筛选的条件区域建议固定放在某个工作表或者某个固定区域比如 A1 下偏移 3 列的位置并给条件区域加上边框和底色防止其他人误删。同时把条件区域设计成通用模板一行放“且”条件下面预留几行放“或”条件。这样即使换一个同事来操作也能按模板完成添加条件。9.3 使用表格和动态引用降低维护成本无论用哪种方案都建议把数据源转换成表格Ctrl T。这样做有三个好处一是区域引用自动扩展二是辅助列公式自动填充三是高级筛选的“列表区域”在选择时会自动识别整个表格。数据量大时还可以通过表格的“表设计”选项卡的“调整表格大小”功能快速修改范围。9.4 大数据量时的性能优化当数据量达到十万行以上VBA 遍历单元格的方式会明显变慢。优化的方向是把数据一次性读入数组循环判断后再写回结果区域而不是逐行复制。函数公式方案中FILTER 和 BYROW 在十万行以内通常没有问题但如果你有几十万行数据建议先在原始数据上执行高级筛选或者用 Power Query 做条件过滤而不是在单元格里堆公式。9.5 安全与备份意识在 VBA 宏运行前尤其是第一次在新环境下运行先备份一份原始数据。宏的Cells.Clear会清空筛选结果表的内容如果目标区域设置错误可能误清空数据。建议在代码中把目标表固定为“筛选结果”并设置一个提示机制。生产环境中使用宏还需要注意启用宏的工作簿在打开时会弹出安全警告需要信任来源后才能运行。10. 总结与后续学习方向多关键词筛选不是一个简单的按钮功能它背后是查询逻辑中“或与且”的条件组合能力。高级筛选适合一次性快速出结果FILTER SEARCH 函数方案适合需要动态更新的报表VBA 宏适合高频、重复、需要自动化的流程。三者结合使用基本能覆盖 95% 以上的表格多条件筛选场景。如果这篇文章对你有帮助可以收藏备用。下一步建议你拿着自己的真实表格分别用三种方法跑一遍重点练习条件区域的“同行且、不同行或”规则以及 FILTER 公式中的 BYROW 组合。真正理解了这两点以后再遇到“多条件、多关键词、模糊匹配”的筛选需求你就能直接判断用哪个方案最合适而不用再手动一个个复制粘贴了。
返回列表