2016-06-23 177 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,例如,不同列中的名字,中間名和姓氏)

否則,你可能最終需要在你的行中有令人難以置信的大量行分類表,以涵蓋您的關鍵字和其他隨機詞的每種可能的組合和排列。