部分字符串匹配转换表

时间:2014-04-22 20:15:17

标签: excel excel-vba excel-formula vba

A列中有一个长字符串。我需要找出B列中每个行中50个单词中的任何一个单词(每行1个单词)是否在A列中。在此之后,无论从B列中匹配哪个单词,我都需要C列中的相应数字。

我尝试过不同的VLookups,Match和Index公式,没有运气。如果我需要澄清问题,请告诉我。

编辑:以下是一个例子:

4 个答案:

答案 0 :(得分:2)

尝试这样的事情:

F2中添加此公式并向下拖动:

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

这是数组公式。

答案 1 :(得分: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

修改代码以包含所有关键字及其对应的数字。

答案 2 :(得分: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

...然后修改代码以包含关键字列表。

答案 3 :(得分: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 + Shift + 输入,作为数组公式输入F2

<强>结果: enter image description here