在用Excel处理实际业务中,我们会碰到如下场景:
1、从一堆人名中找到包含某些关键字的名字;
2、从银行流水文件中根据【备注】字段找到包含某些关键字的,统一识别为【手续费业务】等 。
这本质说的都是一类问题:如何从数据集中,根据业务需求配置的多个关键字,匹配得到对应的行项目 。这个问题有好的办法吗?
如果我们使用Excel自带的【自定义自动筛选】功能,它只能支持添加最多两组关键字,无法添加更多,如下图所示:
![巧用VBA实现:基于多个关键词模糊匹配Excel多行数据](http://img.zhejianglong.com/231018/0H124I50-0.png)
文章插图
如果我们有多个关键词供我们作为筛选条件,Excel自带的【自定义自动筛选】功能自然不够用 。假设我们的工作簿总共有三张表 , 【基础信息】、【姓名关键字】、【结果】表,结构如下:
![巧用VBA实现:基于多个关键词模糊匹配Excel多行数据](http://img.zhejianglong.com/231018/0H1245138-1.png)
文章插图
![巧用VBA实现:基于多个关键词模糊匹配Excel多行数据](http://img.zhejianglong.com/231018/0H124J94-2.png)
文章插图
![巧用VBA实现:基于多个关键词模糊匹配Excel多行数据](http://img.zhejianglong.com/231018/0H1243R1-3.png)
文章插图
问题是,如何从【基础信息】表中找到【姓名】列 符合【姓名关键字】表中的行项目,将对应行记录在【结果】表中?
常规的Excel功能已经无法奏效,我们需要利用VBA手段来实现 。具体思路:循环遍历【基础信息】表每一个姓名,循环取出【姓名关键字】表每个关键字,看取出的姓名是否包含这些【关键字】中的一个,如果是,就将【基础信息】表这一行信息记录在【结果】表中,这样就达到了基于多个关键字中任意一个来过滤原始数据的效果 。
【巧用VBA实现:基于多个关键词模糊匹配Excel多行数据】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 IntegerSet 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 = 2For 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 NextNextEnd Sub最后代码执行的效果,如下图所示,非常方便:
![巧用VBA实现:基于多个关键词模糊匹配Excel多行数据](https://m.360buyimg.com/jdcms/jfs/t1/38888/11/19246/191738/6343ee66E2ed1df98/be4f96989a49c420.gif)
文章插图
推荐阅读
- 详解ROMA Connect API 流控实现技术
- Object Detection 手把手教你使用LabVIEW OpenCV dnn实现物体识别含源码
- 一 网络安全主动进攻之DNS基础和ettercap实现DNS流量劫持
- OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构
- Spring 深入——IoC 容器 01
- 含源码 手把手教你使用LabVIEW OpenCV dnn实现图像分类
- 为了实现梦想我们该怎么做(为了完成梦想我们该做什么)
- 在PE文件中简单注入代码,实现在启动前弹窗
- 【.NET 6+Loki+Grafana】实现轻量级日志可视化服务功能
- Springboot 之 Filter 实现 Gzip 压缩超大 json 对象