2013-01-31 64 views
0

我試圖做一個向後VLOOKUP。如何檢查一個值,看看它是否包含18個值

有:句子(字符串) 尋找:關鍵詞(陣列)

我知道我可以做一個比較瘋狂的複合語句 IF(ISERR(找到( 「失蹤」,B1,1)),如果(iserr(find(「Located」,B1,1)),..

但是考慮到我需要使用這1000次,如果那麼就是18深,那只是沒有意義。 我知道我可以用VBA做到這一點相當clealy,但我似乎無法找出語法

這裏是我到目前爲止:

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()函數中死掉。

+0

讓我們明確一點:你在EXCEL調用FindValue,所以FindValue是UDF。 您呼叫FindValue像「= FindValue(‘失蹤’,B1:C5)」 要匹配「失蹤」對B1:B5,並返回該行的C列的值。 --->你應該使用VLOOKUP 或者你通過 = FindValue(「一些值範圍相匹配」,「一定範圍內的值來匹配」) – Larry

回答

2

無需VBA,數組公式會做:

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

其中列B是類別,列A單詞和D1句子來檢查的列表。

注:與按Ctrl輸入數組公式 - - 輸入

對於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看一看 - 它具有完全相同的結構和工作公式。

+0

得到了我的票的意思。值得注意的是,IFERROR是Excel 2007及更高版本。 –

+0

謝謝!我想現在我們可以假設大多數用戶使用2007+(儘管我從截圖看到你仍然在2003年;-))。但我想這可能會傷害到指出2003年的用戶,他們可以用'= IF(ISERROR(X),「else」,X)'替換'= IFERROR(X,「else」)'...... –

+0

Your對。我使用的是2003年。當我把它歸結爲= INDEX('Intake Chart'!$ B $ 2:$ B $ 18,MATCH(TRUE,FIND('Intake Chart'!$ A $ 2:$ A $ 18,Data!E26 )> 0,0))我仍然得到#Value錯誤 –

相關問題