2017-07-07 12 views
1

私は現在、複数の値を返すためにルックアップ関数を使用しています。 Extend Officeからこの機能を入手しました。 https://www.extendoffice.com/documents/excel/2706-excel-vlookup-return-multiple-values-in-one-cell.htmlルックアップ関数を使用してフィルタリングによる値のリストを返す

私のニーズに応えるためにコードを編集したいところです。複数の値をさらに必要に応じてフィルタリングすることができます。私は現在、Instr Functionを使用して、ユーザが入力したアルファベットで始まる値だけを返します。しかし、結果は '#VALUE!'と表示されるので機能しません。どこが間違っているのか分かりません。

たとえば、シート自体の機能では、 'MYVLOOKUP(C2、Table!A:B、2、 "J")'というキーを使用します。これは、 'J'で始まる値だけを返したいが、#VALUEを返すことを意味する。

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long, 
filter As String) 
Dim rng As Range 
Dim xResult As String 
Dim result As Integer 

xResult = vbNullString 
'the next line trims pWorkRng down to the .UsedRange 
Set pWorkRng = Intersect(pWorkRng, pWorkRng.Parent.UsedRange) 

For Each rng In pWorkRng 
    If rng = pValue Then 
     result = InStr(rng.Value, filter, vbTextCompare) 
     If result = 1 Then 
     xResult = xResult & rng.Offset(0, pIndex - 1) & "," 
     Else 
     End If 
    End If 
Next 
MYVLOOKUP = Trim(xResult) 
End Function 
+0

* "動作しないことができる" *に詳しく説明し、例のユースケースを示してください。 –

+0

最初に 'If rng = pValue'をチェックし、' filter'で始まっていれば、この二重チェックは意味をなさないでしょう。完全一致を検索するか、何かで始まるものを検索してください。 –

+0

複数の値を返すことはできません。値の範囲が「J」と言うだけで始まります。 –

答えて

1

私はあなたがこのUDFを求めていると思います。それを使用する方法を

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long, _ 
        Optional filter As String = "*") 
    Dim rng As Range, ret As String 
    For Each rng In Intersect(pWorkRng.Columns(1), pWorkRng.Parent.UsedRange) 
    If rng Like pValue Then If rng(1, pIndex) Like filter Then _ 
     ret = ret & IIf(Len(ret), ",", "") & rng(1, pIndex) 
    Next 
    MYVLOOKUP = ret 
End Function 

お知らせ:

  • 最初のパラメータは、最初の列の完全一致です。 "xx*"などワイルドカード(*)を使用して、"xx"、または"*yy*"で始まるものと"yy"のいずれかと一致するものを一致させることができます。

  • 最後のパラメータは類似のフィルタですが、返される値です。したがって、"J*"を使用して、戻り値を"J"で始まるものに限定することができます。このパラメータは(オプション)です:フィルタリングを行わない場合は省略できます。

  • 戻り値は、すべての一致がカンマで区切られたリストです。

例:

enter image description here

+1

ありがとうございました!!!あなたは命の恩人です!今すぐ使える –

+0

"J *"はJが "J"で始まらないという意味ですか? –

+0

@RachelChiaは "Jで始まる"には "J *"を使い、 "Jで終わる"には "J"を、 "Jを含む"には "* J *"を使用します:) –

関連する問題