Excel vlookup複数リターン


0

1つの列に名前のリストがあり、次の列にいくつかの関連する値があるExcelシートがあります。これらの名前の一部は、次の列に異なる値で複数回表示されます。

例えば:

John  AA
James AE
Trent TE
Jim   CE
Trent AX
Jim   XC

私のvlookup関数から返される結果は次のとおりです。

John  AA
James AE
Trent TE AX
Jim   CE XC

それでもvlookupは1つの値しか返すことができませんが、この問題を解決できる別の関数はありますか?

回答:


1

次の解決策を提案したいのですが、スクリーンショットを確認してください。

ここに画像の説明を入力してください

ソースデータ範囲はA1:B7(ヘッダーを除く)です。

結果のデータ範囲はA11:B14です。

最初に一意の名前リストを作成し、セルA11にこの式を記述します。

{= IFERROR(INDEX($ A $ 2:$ A $ 7、MATCH(0、COUNTIF($ A $ 11:A11、$ A $ 2:$ A $ 7)、0))、 "")}

最終結果については、B11に式を書きます。

{= IFERROR(INDEX($ B $ 2:$ B $ 7、SMALL(IF($ A11 = $ A $ 2:$ A $ 7、ROW($ A $ 2:$ A $ 7)-ROW($ A $ 2)+1)、 COLUMN(A1)))、 "")}

フォーミュラ1セルをドラッグしてから、必要になるまで下にドラッグします。

これがあなたのお役に立てば幸いです。私がテストした後、私はソリューションを投稿しました。


こんにちは、ご回答ありがとうございます。上記のコードを試してみましたが、循環参照エラーが発生しました。私のバージョンのExcelに何か問題があるかどうかはわかりません。作業コードを含むExcelファイルのコピーへのリンクを送っていただけますか?ありがとう。
IamTrent

私のスクリーンショットはExcelシートの一部であり、ペイントでコピーして貼り付けてPngファイルを作成しました。私が答えをここにロードしたのと同じもの。ファイルLinkをロードする方法を提案してください。これまで使用したことがないので。
ラジェッシュS

たぶんそれをDropboxやGoogleストレージに置いて、それへのリンクを共有しますか?
IamTrent

0

Nevermindは、非常にうまく機能するコードを見つけました。

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, 
resultsRange As Range) As String

Dim s As String 'Results placeholder
Dim sTmp As String  'Cell value placeholder
Dim r As Long   'Row
Dim c As Long   'Column
Const strDelimiter = "|||"  'Makes InStr more robust

s = strDelimiter
For r = 1 To lookupRange.Rows.Count
    For c = 1 To lookupRange.Columns.Count
        If lookupRange.Cells(r, c).Value = lookupValue Then
            'I know it's weird to use offset but it works even if the two ranges
            'are of different sizes and it's the same way that SUMIF works
            sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
            If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                s = s & sTmp & strDelimiter
            End If
        End If
    Next
Next

'Now make it look like CSV
s = Replace(s, strDelimiter, ",")
If Left(s, 1) = "," Then s = Mid(s, 2)
If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

LookupCSVResults = s 'Return the function

End Function
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.