繁体   English   中英

VBA:多个关键字vlookup

[英]VBA: Multiple Keyword vlookup

我有一些叙述性描述,需要在Excel中自动进行分类:

Description                       Category
I updated the o.s.  
I installed the o.s.    
I cleaned valve a   
I cleaned valve b   
I installed valve a 
Today the o.s. was updated

我还有另一个工作表,其中包含关键字以及与关键字相关联的类别:

Keyword 1   Keyword 2   Keyword 3   Category
cleaned      valve         a           A
installed    valve         a           B
updated       os                       C
installed     os                       D

到目前为止,我的代码一次只能搜索一个关键字,因此会报告错误的答案,因为在多个叙述中使用了一些关键字:

Public Function Test21(nar As Range, ky As Range) As String

Dim sTmp As String, vWrd As Variant, vWrds As Variant

'Splits Fsr Narrative into individual words so it can be searched for keywords'
vWrds = Split(nar)

For Each vWrd In vWrds

    If Not IsError(Application.VLookup(vWrd, ky, 3, False)) Then
    sTmp = Application.VLookup(vWrd, ky, 3, False)
    Exit For
    End If
Next vWrd

Test21 = sTmp

End Function    

我见过像算法, 可是我觉得我的目标可以简单完成所有的叙述都是比较简单的。

谢谢阅读!

通过创建将多个值连接在一起的“匹配列”,然后在该列中搜索匹配项,可以将多个列与VLOOKUP匹配。

因此,如果您在A列中使用此公式:

=B1 & "|" & C1 & "|" & D1

然后,您可以针对该匹配列进行VLOOKUP:

=VLOOKUP("blah|bleh|ugh", 'Sheet2!A1:E100', 5, FALSE)

它将匹配在B列中具有“ blah”,在C列中具有“ bleh”和在D列中具有“ ugh”的一行,并在E列中返回值。

不过,对于您的数据,我想您可能还想在尝试匹配一组关键字之前先整理一下输入内容。 如果关键字是按特定顺序排列的,并且没有任何非关键字会造成混乱,那么我上面描述的方法最有效。 (它对于要匹配多个数据的vlookups也非常有用,例如,不同列中的名字,中间名和姓氏)

否则,您可能最终需要在类别表中包含大量行,以涵盖关键字以及它们可能伴随的其他随机单词的所有可能组合和排列。

这就是我想要的:

Public Function Test22(nar As Range, key As Range, cat As Range) As String

For r = 1 To key.Height
If InStr(nar, key(r, 1)) And InStr(nar, key(r, 2)) Then
Test22 = cat(r)
Exit For
End If
Next r

End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM