プロが教えるわが家の防犯対策術!

vlookupを使用した場合(Excel2010)、検索値が複数あると、検索範囲で一番上にあるデータのみ反映されると思いますが、すべての検索結果(データ)を、1つのセルに纏めて表示させる方法を教えてください。
よろしくお願いいたします。

<データシート>
111 ○○商社
222 □□商社
333 △△商社
111 ●●物産

<検索結果>
111 ○○商社
   ●●物産  ※○○商社と●●物産は、同じセル内で改行させて表示させたいです)
222 □□商社
333 △△商社

A 回答 (3件)

検索結果のA1に111、A2は空白、A3は222、A4は333、B1~4はそれぞれの社名


と言う形であれば作業用セルを使って可能ですが、

1つのセルにすべての結果を纏めることは、関数ではほぼ不可能かと思います。
仮にデータが1000件あれば、「1つ目の該当を表示&2つ目のヒットがあれば改行して追加&3つ目のヒットがあれば改行して追加…1000つ目の該当があれば改行して追加」という式を入力することになるかと。
    • good
    • 0

Function VLOOKUPM(s, rg As Range, n As Long) As String


Dim cl As Range
For Each cl In rg.Columns(1).Cells
If cl = s Then VLOOKUPM = VLOOKUPM + cl.Offset(0, n - 1).Text + Chr(10)
Next
If VLOOKUPM > "" Then VLOOKUPM = Left(VLOOKUPM, Len(VLOOKUPM) - 1)
End Function

でセルには
=VLOOKUPm(111,A1:B4,2)
とするんですが、先に
折り返して表示の書式設定が必要です。

ユーザー関数は値のやり取りは出来ますが
EXCEL操作は出来ないので悪しからず。
    • good
    • 0

こんばんは!



手っ取り早くVBAでの一例です。
元データはSheet1にあり、Sheet2に表示するとします。
↓の画像のように1行目は項目行になっているという前提です。

Sub Sample1()
Dim i As Long, c As Range, wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
.Cells.Clear
.Range("B:B").ColumnWidth = 48
wS.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=.Range("A1"), unique:=True
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
Set c = .Range("A:A").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
With c.Offset(, 1)
If .Value = "" Then
.Value = wS.Cells(i, "B")
Else
.Value = .Value & vbCrLf & wS.Cells(i, "B")
End If
End With
Next i
wS.Range("B1").Copy .Range("B1")
.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
.Columns.AutoFit
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
「Excel2010 vlookup 検索」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!