在用Excel处理实际业务中,我们会碰到如下场景:

  1、从一堆人名中找到包含某些关键字的名字;

  2、从银行流水文件中根据【备注】字段找到包含某些关键字的,统一识别为【手续费业务】等。

  这本质说的都是一类问题:如何从数据集中,根据业务需求配置的多个关键字,匹配得到对应的行项目。这个问题有好的办法吗?

  如果我们使用Excel自带的【自定义自动筛选】功能,它只能支持添加最多两组关键字,无法添加更多,如下图所示:

  如果我们有多个关键词供我们作为筛选条件,Excel自带的【自定义自动筛选】功能自然不够用。假设我们的工作簿总共有三张表,【基础信息】、【姓名关键字】、【结果】表,结构如下:

  问题是,如何从【基础信息】表中找到【姓名】列 符合【姓名关键字】表中的行项目,将对应行记录在【结果】表中?

  常规的Excel功能已经无法奏效,我们需要利用VBA手段来实现。具体思路:循环遍历【基础信息】表每一个姓名,循环取出【姓名关键字】表每个关键字,看取出的姓名是否包含这些【关键字】中的一个,如果是,就将【基础信息】表这一行信息记录在【结果】表中,这样就达到了基于多个关键字中任意一个来过滤原始数据的效果。

  VBA示例代码如下:

Sub keyWordFilter()
Dim sht1 As Worksheet, sht2 As Worksheet, sht3 As Worksheet, maxRow1 As Integer, maxRow2 As Integer, maxRow3 As Integer, userName As String, i As Integer, j As Integer, keyWord As String, k As Integer Set sht1 = ThisWorkbook.Sheets("基础信息")
Set sht2 = ThisWorkbook.Sheets("姓名关键字")
Set sht3 = ThisWorkbook.Sheets("结果") maxRow1 = sht1.Cells(Rows.Count, 1).End(xlUp).Row '基础信息表 行数
maxRow2 = sht2.Cells(Rows.Count, 1).End(xlUp).Row '姓名关键字表 行数
maxRow3 = sht3.Cells(Rows.Count, 1).End(xlUp).Row '结果表 行数
sht3.Rows("2:" & maxRow3).ClearContents '清空【结果表】上次留存结果,保留抬头行
k = 2
For i = 2 To maxRow1
userName = sht1.Cells(i, 2).Value
For j = 2 To maxRow2
keyWord = sht2.Cells(j, 1).Value If userName Like "*" & keyWord & "*" Then '判断某个姓名是否包含某个关键字
sht3.Cells(k, 1).Value = sht1.Cells(i, 1).Value
sht3.Cells(k, 2).Value = sht1.Cells(i, 2).Value
sht3.Cells(k, 3).Value = sht1.Cells(i, 3).Value
k = k + 1
Exit For
End If
Next
Next End Sub

最后代码执行的效果,如下图所示,非常方便:

欢迎扫码关注我的公众号 获取更多爬虫、数据分析的知识!

巧用VBA实现:基于多个关键词模糊匹配Excel多行数据的更多相关文章

  1. 地铁沉降观测数据分析之巧用VBA编程处理

    地铁沉降观测数据分析之巧用VBA编程处理 当你观测了一天累的要死了,回来看着成百上千的测量数据,还要做报表.如果是三五页报表还好说,如果是2000个点的报表 按照一页纸张报30个点就得大约70页的报表 ...

  2. 转:zTree树控件扩展篇:巧用zTree控件实现文本框输入关键词自动模糊查找zTree树节点实现模糊匹配下拉选择效果

    是否可以借助于zTree实现文本框输入关键词自动模糊匹配zTree下拉树,然后选择下拉树内节点显示在文本框内且隐藏下拉树. 看到这个需求脑子里头大致已经想到了要如何实现这样一个需求,当时是限于时间问题 ...

  3. jQuery的搜索关键词自动匹配插件

    相信许多人都会用过搜索栏自动匹配关键词的功能,无论是像google的专业搜索引擎,还是普通的网站,现在许多都用上了这种关键词匹配技术,本文介绍的用jQuery实现的关键词匹配技术,当然要整合到自己的系 ...

  4. SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

    SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的. 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的, ...

  5. 基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串、list集合(MVC5)<二>

    上篇博客给大家介绍了基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串.list集合(MVC5)<一>, 其中的两种方式都显得有些冗余.接着上篇博客继续 ...

  6. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)

    在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...

  7. 基于libUSB的USB设备固件更新程序(下载数据)(转)

    源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libU ...

  8. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  9. “基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统"已被《计算机时代》录用

       今天收到<计算机时代>编辑部寄来的稿件录用通知,本人撰写的论文"基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统",已被<计算机时代>录 ...

随机推荐

  1. 业务可视化-让你的流程图"Run"起来(4.实际业务场景测试)

    前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(3.分支选择&跨语言分布式运行节点)]的支持. 下面我以实际业务场景为例,来介绍一下ladybug ...

  2. Python 爬取途虎养车 全系车型 轮胎 保养 数据

    Python 爬取途虎养车 全系车型 轮胎 保养 数据 2021.7.27 更新 增加标题.发布时间参数 demo文末自行下载,需要完整数据私聊我 2021.2.19 更新 增加大保养数据 2020. ...

  3. Javaweb06-JDBC

    1.jdbc.properties配置文件 jdbc.properties driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localho ...

  4. Redis 10 位图

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  5. Docker 03 镜像命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  6. java-Servlet编码/异常处理

    1. Servlet输出中文(1)为什么会有乱码?out.println方法在输出时或者表单提交的时候,浏览器会对表单中的中文参数值进行编码; 注:会使用表单所在的页面打开时使用的编码方式进行编码服务 ...

  7. ftp: connect: No route to host 解决方案

    实验环境: centos7 x2 server-vsftp:192.168.1.32 client:192.168.95 客户端测试访问 ftp服务器 报错:ftp: connect: No rout ...

  8. 记录第一次给开源项目提 PR

    本文是深入浅出 ahooks 源码系列文章的第八篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇文章算是该系列的一个彩蛋篇,记录一下第一次给开源项目提 PR ...

  9. CSP2021-S游记

    前言 年纪大了,脑子乱了,渐渐被低年级吊打了. 大家这么内卷下去,高年级的普遍后悔自己生早了,低年级永远占优势,不只是机会优势,还有能力优势. 快进到改变基因出生国家队算了-- Day0 非常不幸地被 ...

  10. C#基础_类的声明

    新建Clerk类. using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...