• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL2003で、Vlookupの検索で複数ヒットした場合全て抽出)

Excel2003で複数ヒットした場合のVlookup検索結果を全て抽出する方法

このQ&Aのポイント
  • Excel2003でVlookup関数を使用して検索する際に、複数のヒットがあった場合、全ての結果を抽出する方法について教えてください。
  • 過去の質問で紹介されたimogasi方式やオートフィルタではうまくいかなかったため、他の関数や組み合わせた方法でも構いません。できるだけ詳しく教えていただけると助かります。
  • 希望の結果は、Vlookup関数を使って複数のヒットがあった場合でも、全ての結果を表示することです。ご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

VLOOKUP関数でできないこともないでしょうがかなり複雑になりますね。 次のように作業列を作って対応します。 シート1のC1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",A1&"/"&COUNTIF(A$1:A1,A1)) 次にシート2のB1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(Sheet1!C:C,A1&"/"&1)=0,"",INDEX(Sheet1!B:B,MATCH(A1&"/"&1,Sheet1!C:C,0)))&IF(COUNTIF(Sheet1!C:C,A1&"/"&2)=0,"","・"&INDEX(Sheet1!B:B,MATCH(A1&"/"&2,Sheet1!C:C,0)))&IF(COUNTIF(Sheet1!C:C,A1&"/"&3)=0,"","・"&INDEX(Sheet1!B:B,MATCH(A1&"/"&3,Sheet1!C:C,0)))&IF(COUNTIF(Sheet1!C:C,A1&"/"&4)=0,"","・"&INDEX(Sheet1!B:B,MATCH(A1&"/"&4,Sheet1!C:C,0)))&IF(COUNTIF(Sheet1!C:C,A1&"/"&5)=0,"","・"&INDEX(Sheet1!B,B,MATCH(A1&"/"&5,Sheet1!C:C,0))) この式では複数のデータが5個まであるケースに対応しています。

day_man
質問者

お礼

勉強になりました! ありがとうございました!!!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.4

該当データの出現個数が一定数であれば関数の組み合わせや作業セルを多用することで対処可能ですが、計算式はとて無複雑なものになります。 出現個数が未知数の場合は想定範囲外の個数データーがあった場合は正しい結果にはなりません。 VBAを利用した抽出方法が適していますが、マクロは利用可能な環境でしょうか?

day_man
質問者

お礼

回答遅くなり申し訳ございません。 確かにVBAであれば適切なのでしょうが、訳あってマクロ使用ができない状態でした。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

VLOOKUP関数だけで対応するなら以下のようなVLOOKUP数式で2つ目以降のデータを表示することができます(C1セルに検索値で。 2つ目のデータ =VLOOKUP(C1,OFFSET($A$1,MATCH(C1,$A:$A,0),0,100,2),2,0) 3つ目のデータ =VLOOKUP(C1,OFFSET(A3,MATCH(C1,A:A,0)+MATCH(C1,OFFSET(A1,MATCH(C1,A:A,0),0,100,1),0),0,100,2),2,0) この数式をIF関数を使ってつなげれば1つのセルに検索結果を表示することが可能です。 配列数式を使うなら以下のような関数になります(A列のデータ範囲に「データ」と名前が付けてある場合) =SUBSTITUTE(TRIM(VLOOKUP(C1,A:B,2,0)&" "&INDEX(B:B,SMALL(INDEX((データ<>C1)*1000+ROW(データ),),2))&" "&INDEX(B:B,SMALL(INDEX((データ<>C1)*1000+ROW(データ),),3))&" "&INDEX(B:B,SMALL(INDEX((データ<>C1)*1000+ROW(データ),),4)))," ","・") 上記の数式は配列を多用していますので、入力セルが多くなると動きが重くなるので、上のVLOOKUP式などでエラー処理をしない数式などと適宜使い分けてください。

day_man
質問者

お礼

こちらも勉強になりました! ありがとうございました!!

すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! VLOOKUP関数で複数のデータは抽出できないと思います。 VLOOKUP関数とMATCH関数での検索は出来ますが、一番上のデータしかヒットしないはずです。 そしてヒットした複数データを一つのセルに表示させたいということですが これも関数では無理だと思います。 ただし、一つの案として↓の画像のように列方向にヒットしたものを表示させることは可能です。 Sheet2のB2セルに =IF($A2="","",IF(COUNTIF(Sheet1!$A$2:$A$1000,$A2)<COLUMN(A1),"",INDEX(Sheet1!$B$2:$B$1000,SMALL(IF(Sheet1!$A$2:$A$1000=$A2,ROW($A$1:$A$999)),COLUMN(A1))))) (Sheet1の1000行目まで対応できる数式にしています。) これは配列数式になってしまいますので、 この画面からSheet2のB2セルに貼り付け後、F2キーを押す、又はB2セルでダブルクリック、又は数式バー内で一度クリックします。 編集可能になりますので Shift+Ctrlキーを押しながらEnterキーで確定してみてください。 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 どうしもて一つのセルに納めたいのであれば、 これを CONCATENATE関数か & でまとめていくくらいしか思い浮かびません。 以上、参考になればよいのですが 的外れなら読み流してくださいね。m(__)m

day_man
質問者

お礼

図解説明までして頂き、大変感謝します! このような回答方法であれば、分かりやすくて助かります。 内容としては、求めていたものとは違い残念ですが、 とても勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A