在用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. 分享一些小tips

    谷歌浏览器破解 google拓展商店中hackbar地址 https://chrome.google.com/webstore/detail/djmoeoifnlhjolebkehmpaocfnipk ...

  2. api.versioning 版本控制 自动识别最高版本和多Area但同名Contoller问题解决办法

    Microsoft.AspNetCore.Mvc.Versioning //引入程序集 .net core 下面api的版本控制作用不需要多说,可以查阅https://www.cnblogs.com/ ...

  3. python--函数参数传递

    1. 调用函数时,实参会传递给形参,叫做参数传递. 2. 根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递: 值传递:传递的实参类型为不可变类型(字符串.数字. ...

  4. PHP几个数组函数

    array_intersect比较两个数组的键值,并返回交集: <?php $a1=array("a"=>"red","b"=& ...

  5. 基于.NET6、FreeSql、若依UI、LayUI、Bootstrap构建插件式的CMS

    近几年,.net生态日益强大,特别是跨平台技术,性能提升,那真的是强大无比.为了日常能够快速开发,笔者基于基于.NET6.FreeSql.若依UI.LayUI.Bootstrap构建插件式的CMS,请 ...

  6. 如果让我设计一套,TPS百万级API网关!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 是滴,小傅哥又要准备搞事情了!这次准备下手API网关项目,因为这是所有互联网大厂都有的一个核心 ...

  7. Jamie and Tree (dfs序 + 最近公共祖先LCA)

    题面 题解 我们求它子树的权值和,一般用dfs序把树拍到线段树上做. 当它换根时,我们就直接把root赋值就行了,树的结构不去动它. 对于第二个操作,我们得到的链和根的相对位置有三种情况: 设两点为A ...

  8. C#基础_析构函数

    C#析构函数 1. 析构函数的定义与注意的问题 析构函数用于释放被占用的系统资源. 析构函数的名字由符号"-"加类名组成. 使用析构函数时,应该注意下面的问题: ?只能在类中使用析 ...

  9. Java循环解析

    Java循环解析 while循环(先判断) int i=0; while (i<100){    i++;    System.out.println(i); } DoWhile循环(先执行,后 ...

  10. 公网可用的RTMP、RTSP测试地址(2021年3月)

    好多博客提到的公网可测试的RTSP和RTMP URL大多都不用了,以下是大牛直播SDK(Github)于2021年3月亲测可用的几个URL,有其他可用的URL,也欢迎大家在评论区回复. RTMP流地址 ...