快速多列查找匹配关键字

2023-12-15 05:24:59

实例需求:根据第一列专业名称,在“专业分类指导目录”中,针对三个学历层次(研究生、本科生、专科生)分别查找对应专业类别,填写在对应位置,即截图中的黄色区域。

在这里插入图片描述

需要注意如下两点:

  • “专业分类指导目录”中分隔符不统一,例如下图中红框内的部分,前两个分隔符为半角逗号,后两个分隔符为全角逗号。
  • 有些专业名称可能包含在另一个专业名称中,例如:“兽医”是一个单独的专业,同时也出现在“基础兽医学”,“兽医医药”等专业中,在查找时需要精确匹配。

在这里插入图片描述

示例代码如下。

Sub Demo()
    With Sheet2
        arr = .Range(.[d4], .Cells(Rows.Count, 1).End(xlUp))
    End With
    For i = LBound(arr) To UBound(arr)
        For j = 2 To 4
            If arr(i, j) <> "" Then arr(i, j) = "," & Replace(Replace(arr(i, j), " ", ""), ",", ",") & ","
        Next
    Next
    Set rngData = Sheet4.[a1].CurrentRegion
    rngData.Offset(1, 1).ClearContents
    brr = rngData.Value
    For r = 2 To UBound(brr)
        iCnt = 0
        major = "," & brr(r, 1) & ","
        For i = LBound(arr) To UBound(arr)
            For j = 2 To 4
                If InStr(1, arr(i, j), major) > 0 Then
                    brr(r, j) = arr(i, 1)
                    iCnt = iCnt + 1
                    If iCnt = 3 Then Exit For
                End If
            Next
            If iCnt = 3 Then Exit For
        Next
    Next
    rngData.Value = brr
End Sub

【代码解析】
第3行代码需将数据表格“专业分类指导目录”加载到数组中。
第5~9行代码循环遍历每行数据。
第6~8行代码循环每行中的数据。
第7行代码将时两个Replace函数,清除专业清单中的空格,并将全角逗号替换为半角逗号,并且在字符串的首位附加一个半角逗号,这样可以更容易的实现精确匹配。
第10~13行代码需将需要填写的数据表格加载到数组中。
第11行代码清空需要填写的区域(截图中黄色区域)。
第13~26行代码循环遍历每行数据。
第15行代码构建查找关键字,此处同样在专业名称字符串的首位附加一个半角逗号。

精确匹配的实现原理如下,例如需要查找“兽医”专业,那么实际查找关键字为,兽医,,在下面两个字符串中,仅能匹配第一个,而不会出现错误匹配。

  • ,基础兽医学,兽医,临床兽医学,
  • ,基础兽医学,预防兽医学,临床兽医学,

第16~25行代码双层循环在“专业分类指导目录”中查找关键字。
第19行代码提取对应的专业列表
第27行代码将查找结果更新到工作表中。

文章来源:https://blog.csdn.net/taller_2000/article/details/135007494
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。