EXCEL——VBA实现模糊查找并获取查找到的单元格内容

image

大家有没有遇到过这种情况,要在一张数据很多的sheet中进行查找匹配一个数据或多个数据(部分匹配),并对查找到的单元格内容进行汇总。这个时候如果对多个数据一个个在目标sheet中ctrl+f进行查找实在太过没有效率,这个时候我们通过VBA来实现批量查找并获取单元格的值。

  • 首先对情景进行模拟,如下要在这个目标sheet中进行查找:


    目标sheet

    查找的值为:


    要查找的值

    因为是模拟数据,所以我们要查找的值就设置了两个,方便理解即可。要查找的值多些也无妨。。
  • 让我们来看一下VBA代码

Sub Find演示()

    Dim rng As Object
    Dim i As Integer
    With ActiveSheet.UsedRange
        For j = 1 To Sheet2.[a65536].End(3).Row '对某一列需要比对的数据循环find
            Set rn = Cells.Find(what:=Sheet2.Cells(j, 1).Value, LookAt:=xlPart) 'find的内容
            firstval = rn.Address '记录第一个查询到的单元格的位置
            i = 1
            Do
                Sheet2.Cells(i, j + 4).Value = rn.Value '将find的内容记录到sheet2
                Debug.Print rn.Value
                Set rn = .FindNext(after:=rn) '查询下一个赋值给rn
                i = i + 1
            Loop While rn.Address <> firstval '当循环一遍再匹配到第一个单元格时会退出
        Next
    End With
    
End Sub

代码中标记的很清楚,我们是通过find这个方法来进行查找,
下面这句话是对要匹配的那一列进行循环作为关键字进行查找。

For j = 1 To Sheet2.[a65536].End(3).Row '对某一列需要比对的数据
Next

采用部分匹配进行查找

Set rn = Cells.Find(what:=Sheet2.Cells(j, 1).Value, LookAt:=xlPart) 'find的内容

记录第一个单元格的位置

firstval = rn.Address '记录第一个查询到的单元格的位置

这句话是将查询到的单元格rn.value赋值给sheet2的从第5列(E列)开始的位置,每一列是每一个关键字匹配到的目标sheet中单元格的内容。。
针对最上面进行模拟的表格,那么运行上述代码得到的结果就是如下图:


结果

关键字为"jianshu"得到的查询结果就是E列
关键字为"libai"得到的查询结果就是F列

就是这个样子,大家可以自行借鉴代码进行修改来使用,希望能帮到大家,不介意的话,给个赞吧^^, 会给我更大的动力继续更文章哦~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自从2014年开通[完美Excel]微信公众号以来,坚持分享已经学习到的Excel和VBA知识和心得,目前已分享文...
    完美Excel阅读 8,354评论 6 69
  • 使用首先需要了解他的工作原理 1.POI结构与常用类 (1)创建Workbook和Sheet (2)创建单元格 (...
    长城ol阅读 8,588评论 2 25
  • 我们在Excel中整理、分析和处理数据时,都是围绕单元格进行大多数操作,因此Range对象是Excel VBA中最...
    完美Excel阅读 7,411评论 1 12
  • 匆匆忙忙,回去,又匆匆忙忙地弄行礼,来也匆匆去也匆匆,走路一阵风,风带我去旅行,看遍山川美景,只为弥补空虚的心灵,只为情
    王玉笙阅读 146评论 0 0