2016-06-23 152 views
0

我有一个数字,我需要在Excel自动分类叙述描述:VBA:多个关键字VLOOKUP

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  

我见过像this这样的算法,但我觉得我的目标可以更简单地完成,因为所有的叙述都比较简单。

感谢您的阅读!

+0

'vWrds =斯普利特(NAR)'你需要'split'的分隔符。 – findwindow

+0

更具体地说,根据你的例子,你需要用'(空格)'...'vWrds = Split(nar,“”)来划分'nar'' –

回答

0

这就是我一直在寻找:

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 
0

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

所以,如果你使用这个公式在列A:

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

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

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

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

对于您的数据,我认为您可能还希望有一个步骤来清理您的输入试 以匹配一组关键字。如果关键字按特定顺序排列,并且不会有任何非关键字混乱的情况,则上述方法的效果最佳。 (它也适用于你想要匹配多个数据段的vlookups,例如,不同列中的名字,中间名和姓氏)

否则,你可能最终需要在你的行中有令人难以置信的大量行分类表,以涵盖您的关键字和其他随机词的每种可能的组合和排列。