首页 > 其他分享 >巧用VBA实现:基于多个关键词模糊匹配Excel多行数据

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

时间:2022-10-10 16:59:17浏览次数:83  
标签:sht1 VBA Cells Excel sht3 Value 关键字 巧用

  在用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

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

 

 

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

 

标签:sht1,VBA,Cells,Excel,sht3,Value,关键字,巧用
From: https://www.cnblogs.com/new-june/p/16714078.html

相关文章

  • 28、python3.7(windows)将ORACLE11gR2中的数据取出写入excel表
    28.1、下载python的离线扩展模块:1、windows下python的离线扩展模块下载地址为:​​https://www.lfd.uci.edu/~gohlke/pythonlibs/​​提示:可以通过python官方的pypi仓库下载l......
  • C# 读取Excel到DataSet
    1///<summary>2///读取Excel文件3///</summary>4///<returns></returns>5publicstaticDataSetReadExcel(stringpath)6{7DataSetds=ne......
  • C# 导出DataTable到Excel
    1///<summary>2///将DataTable数据,存储到一个Excel中(.xlsx)3///</summary>4///<paramname="dt"></param>5///<paramname="filePath"></param>6pub......
  • (编程语言界的丐帮 C#).NET Framework 读取Excel到DataTable
    (编程语言界的丐帮C#).NETFramework读取Excel到DataTable生成DataTable到Excel,支持2007.xlsx,2003 .xls。 nuget引用 NPOI。ExcelHelper:usingNPOI.HPSF;usi......
  • EasyPoi操作Excel
    目录​​一、前言​​​​二、使用​​​​1、导入以下依赖​​​​2、导出示例​​​​2.1.使用定义好的模板​​​​2.2.直接将List>数据导出为excel示例(无需模板)​​​......
  • openpyxl读取excel用例数据,并实现对需要执行的测试用例进行挑选
    1importjson2importos3fromopenpyxlimportload_workbook4fromcommon.path_handlerimporttestDatas_path56"""7需求:81-......
  • excel提示内存或磁盘空间不足怎么办
    excel提示内存或磁盘空间不足怎么办 excel提示内存或磁盘空间不足,同时excel标题上面显示的有personnel。网上很多帖子是说在“信任中心”“添加新位置”,实测无效。全盘......
  • 如何在Excel/WPS表格中查询图书信息?
    给您一个ISBN编号,您能查出它的书名、作者、价格等信息吗?答案一定是可以。但如果几百上千条ISBN编号在表格中需要查询,如何能快速的获取信息呢?相信很多老师会有这种困惑。今......
  • pandas excel
    https://zhuanlan.zhihu.com/p/362709226https://blog.csdn.net/qq_37975685/article/details/107908328https://www.cnblogs.com/flyup/p/15264897.html......
  • Excel导航功能(Excel技巧集团)
    【视图】选项卡下多了个【导航】功能,可以快速定位工作表中的工作表、连续区域的数据、超级表、自定义名称、数据透视表、图形图片等非单元格对象。 ......