0

後方 vlookup を実行しようとしています。

持つ: 文章 (文字列) 探す: キーワード (配列)

if(iserr(find("Missing",B1,1)),if(iserr(find("Located",B1,1)),.. でかなりクレイジーな複合ステートメントを実行できることはわかっています。

しかし、これを 1,000 回使用する必要があることを考慮すると、if then の深さは 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() 関数の実行中に死ぬだけです。

4

1 に答える 1

2

VBAは必要ありません。配列数式を使用すると、次のようになります。

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

ここで、columnBはカテゴリ、columnAは単語のリストとD1チェックする文です。

注:配列数式は---!で入力しCtrlてくださいShiftEnter

Excel 2003と特定の例では、次の式を使用します。

= IF(ISERROR(MATCH(TRUE、FIND('Intake Chart'!$ A $ 2:$ A $ 18、E26)> 0,0))、 "一致なし"、
INDEX('摂取量チャート'!$ B $ 2:$ B $ 18、MATCH(TRUE、FIND('摂取量チャート'!$ A $ 2:$ A $ 18、E26)> 0,0)))

このファイルを見てください-それはまったく同じ構造と作業式を持っています。

于 2013-01-31T21:16:33.767 に答える