2014-04-22 189 views
0

列A中有一個長字符串。我需要找出列B中的50個單詞(每行1個單詞)中的任何一行是否在列A的每一行中。之後,從列BI中匹配的任何單詞需要C列中的相應編號。部分字符串匹配轉換表

I'我嘗試了不同的VLookups,Match和Index公式,但沒有運氣。如果我需要澄清問題,請告訴我。

編輯:下面是一個例子:

+0

您應該添加你要找的輸出的一些例子。 –

+0

只是鏈接一個例子。 – user3561983

+0

您可以使用VBA或數組公式。你有沒有試過這些?如果有多重比賽呢? – L42

回答

0

你可以嘗試做一個自定義公式。將此模塊添加到您的Excel文件中:

Public Function match_keyword(CellVar As Range) 
'Insert a blank column 
'add the excel function "=match_keyword(A1)" 
'in it, you will see a number which represents the first matching keyword 

If InStr(CellVar.Value, "blue") > 0 Then 
    match_keyword = 1 
ElseIf InStr(CellVar.Value, "green") > 0 Then 
    match_keyword = 2 
ElseIf InStr(CellVar.Value, "red") > 0 Then 
    match_keyword = 3 
Else 
    'no match found 
    match_keyword = 0 
End If 
End Function 

修改代碼以包含所有關鍵字及其相應編號。

+0

這與我開始做的非常相似,但我想知道是否有比創建50條if語句更簡單的方法。 – user3561983

+0

也許不是一個更簡單的方法,但更優雅的解決方案是使用數組。我發佈了一個新的答案。 – LeftyMaus

0

相同的概念,而是使用數組...

Public Function match_keyword2(CellVar As Range) 

'initialize at zero 
match_keyword2 = 0 

Dim keyword_ARRAY(1 To 3) As String 
keyword_ARRAY(1) = "blue" 
keyword_ARRAY(2) = "green" 
keyword_ARRAY(3) = "red" 

For i = LBound(keyword_ARRAY) To UBound(keyword_ARRAY) 
    If InStr(CellVar.Value, keyword_ARRAY(i)) > 0 Then 
     match_keyword2 = i 
     Exit For 
    End If 
Next i 

End Function 

...然後再修改代碼,包括您的關鍵字列表。

+0

所以問題是我的關鍵字列表將不斷增長,可能超過幾百個 – user3561983

+0

除非給出關鍵字列表,否則宏不會幫助您。但是,一旦發現編輯無法管理,您可能需要考慮從工作簿的單獨選項卡中讀取關鍵字。 – LeftyMaus

2

嘗試這樣:

添加此公式中F2並拖累:

=LOOKUP(2^50,SEARCH($C$2:$C$5,A2),$D$2:$D$5)

這是不是數組公式。

+0

+1不錯的一個。這讓我更加欣賞'LOOKUP'。 – L42

0

你可以試試下面的公式:
=INDEX(D$2:D$5,IF(SUM(IFERROR(SEARCH(C$2:C$5,A2),0))>0,MATCH(MAX(IFERROR(SEARCH(C$2:C$5,A2),0)),IFERROR(SEARCH(C$2:C$5,A2),0),0),NA()))

按Ctrl ++輸入進入F2作爲數組公式。

結果: enter image description here