如何检查单个值以查看它是否包含18个值中的一个

时间:2013-01-31 21:09:10

标签: vba range lookup

我正试图做一个向后的vlookup。

有:句子(字符串) 寻找:关键字(数组)

我知道我可以做一个相当疯狂的复合声明     如果(ISERR(找到( “缺失”,B1,1))中,如果(ISERR(FIND( “位于”,B1,1)),...

但是考虑到我需要使用这1000次,而if那么将是18深。这没有意义。 我知道我可以用VBA非常清楚地做到这一点,但我似乎无法弄清楚语法。

这是我到目前为止所拥有的:

Function FindValue(ByRef strToSearch As String, rngLookUpValues As Range) As String
On Err GoTo err_capture
'strToSearch is the sentence I am searching
'rngLookUpValue is a two column Range.
'      The first column is what I'm searching for.  If it exists in the sentence, 
'               return the second column
'      The second column is the category that applies when the word from column one 
'                is found in the sentence

i = 0
For Each row In rngLookUpValues
    i = i + 1
    If InStr(1, strToSearch, row.cell(i, 1).Value, vbTextCompare) > 0 Then
        FindValue = row.cell(i, 2).Value
    End If
Next

Exit Function
err_capture:
    Debug.Print Err.Number & ": " & Err.Description
End Function

当我运行它时,它返回一个#Value。但是当我调试它或观察它运行时,没有错误。它只是在instr()函数中死掉。

1 个答案:

答案 0 :(得分:2)

不需要VBA,数组公式会做:

=IFERROR(INDEX($B:$B,MATCH(TRUE,FIND($A:$A,D1)>0,0)),"")

其中列B是类别,列A是单词列表,D1是要检查的句子。

注意:使用 Ctrl 输入数组公式 - Shift - 输入

对于Excel 2003和您的特定示例,请使用以下公式:

=IF(ISERROR(MATCH(TRUE,FIND('Intake Chart'!$A$2:$A$18,E26)>0,0)),"no match",
INDEX('Intake Chart'!$B$2:$B$18,MATCH(TRUE,FIND('Intake Chart'!$A$2:$A$18,E26)>0,0)))

看看this file - 它具有完全相同的结构和工作公式。