快速多列查找匹配关键字

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

在这里插入图片描述

需要注意如下两点:

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

在这里插入图片描述

示例代码如下。

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行代码将查找结果更新到工作表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值