在用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. 搭建一个完整的K8S集群-------基于CentOS 8系统

    创建三个centos节点: 192.168.5.141 k8s-master 192.168.5.142 k8s-nnode1 192.168.5.143 k8s-nnode2 查看centos系统版 ...

  2. springmvc异常处理解析#ExceptionHandlerExceptionResolver

    开头 试想一下我们一般怎么统一处理异常呢,答:切面.但抛开切面不讲,如果对每一个controller方法抛出的异常做专门处理,那么着实太费劲了,有没有更好的方法呢?当然有,就是本篇文章接下来要介绍的s ...

  3. Cayley 公式的另一种证明

    Cayley 公式的一些广为人知的证法: Prufer 序列 Matrix-Tree 定理 然而我都不会 233,所以下面说一个生成函数角度的证法 . 我们知道 \(n\) 个节点的有标号无根树有 \ ...

  4. 为你的网站加上live2d的动态小挂件,博君一晒

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_122 喜欢二次元的朋友一定对大名鼎鼎的live2d技术并不陌生,live2D是一种应用于电子游戏的绘图渲染技术,技术由日本Cybe ...

  5. 精心整理16条MySQL使用规范,减少80%问题,推荐分享给团队

    上篇文章介绍了如何创建合适的MySQL索引,今天再一块学一下如何更规范.更合理的使用MySQL? 合理规范的使用MySQL,可以大大减少开发工作量和线上问题,并提升SQL查询性能. 我精心总结了这16 ...

  6. vue中vuex实现持久化的几种方法

    前提:大家都知道vuex真的数据共享是不持久的,例如登录后一刷新,state中存的token就会消失,导致你需要再次进行登录操作 在这给大家列出几种解决方案: 第一种(也是一些项目中常使用的):使用缓 ...

  7. javaScript 事件循环机制

    JavaScript是单线程的编程语言,只能同一时间内做一件事.但是在遇到异步事件的时候,js线程并没有阻塞,还会继续执行,这就是因为JS有事件循环机制. 事件循环流程总结 主线程开始执行一段代码, ...

  8. DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设

    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来.这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧. DevOps落地实践点滴和踩 ...

  9. CSS 标签、类名和ID选择器有空格和没有空格的区别

    前言 标签选择器.类名选择器以及 ID 选择器在使用上要注意"加空格"和"不加空格".两种使用形式上有很大的差别. 下面是讲解案例的 HTML 代码: < ...

  10. 一个dcache的性能问题分析

    如何识别并解决复杂的dcache问题 背景:这个是在centos7.6的环境上复现的,但该问题其实在很多内核版本上都有, 如何做好对linux一些缓存的监控和控制,一直是云计算方向的热点,但这些热点 ...