列A中有一個長字符串。我需要找出列B中的50個單詞(每行1個單詞)中的任何一行是否在列A的每一行中。之後,從列BI中匹配的任何單詞需要C列中的相應編號。部分字符串匹配轉換表
I'我嘗試了不同的VLookups,Match和Index公式,但沒有運氣。如果我需要澄清問題,請告訴我。
編輯:下面是一個例子:
列A中有一個長字符串。我需要找出列B中的50個單詞(每行1個單詞)中的任何一行是否在列A的每一行中。之後,從列BI中匹配的任何單詞需要C列中的相應編號。部分字符串匹配轉換表
I'我嘗試了不同的VLookups,Match和Index公式,但沒有運氣。如果我需要澄清問題,請告訴我。
編輯:下面是一個例子:
你可以嘗試做一個自定義公式。將此模塊添加到您的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
修改代碼以包含所有關鍵字及其相應編號。
這與我開始做的非常相似,但我想知道是否有比創建50條if語句更簡單的方法。 – user3561983
也許不是一個更簡單的方法,但更優雅的解決方案是使用數組。我發佈了一個新的答案。 – LeftyMaus
相同的概念,而是使用數組...
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
...然後再修改代碼,包括您的關鍵字列表。
所以問題是我的關鍵字列表將不斷增長,可能超過幾百個 – user3561983
除非給出關鍵字列表,否則宏不會幫助您。但是,一旦發現編輯無法管理,您可能需要考慮從工作簿的單獨選項卡中讀取關鍵字。 – LeftyMaus
嘗試這樣:
添加此公式中F2
並拖累:
=LOOKUP(2^50,SEARCH($C$2:$C$5,A2),$D$2:$D$5)
這是不是數組公式。
+1不錯的一個。這讓我更加欣賞'LOOKUP'。 – L42
你可以試試下面的公式:
=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
作爲數組公式。
結果:
您應該添加你要找的輸出的一些例子。 –
只是鏈接一個例子。 – user3561983
您可以使用VBA或數組公式。你有沒有試過這些?如果有多重比賽呢? – L42