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

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

EXCEL2003で、Vlookupの検索で複数ヒットした場合全て抽出

EXCEL2003で、Vlookupの検索で複数ヒットした場合全て抽出したいんですが、可能ですか? <sheet1>   A列   B列 1 A1000 1234 2 A2000 2345 3 A3000 3456 4 A1000 7777 5 A4000 4567 6 A1000 8888 <sheet2> B1に関数を入れて、   A列   B列 1 A1000  1234・7777・8888 のように表示させたいんです。 過去質問を確認すると、imogasi方式や、オートフィルタを使用するとありましたが、 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

  • VLOOKUPのような検索で複数ヒットしたら全て抽出したい

    VLOOKUPで検索すると検索値シート(2)【B】123で行い、検索範囲をシート(1)【B】列、ヒットした左列ABCをシート(2)の【C】に表示するが一般的てきですが、検索範囲シート(1)【B】列で1000種類ある中で123が3個、456が4個その後も重複がつづき、更にヒットした左列が全て違っていたらどのようにして、シート(2)【C】に検索結果全て表示させたらよいでしょうか。 また、シート(2)【B】列1000以上全て検索値としたいのですが、どうかよろしくお願いします。 シート(1) 【A】  【B】  【C】 ABC ....123 DEF ...456 GHI ....123 JKL ....456 MNO ..789 シート(2) 【A】 【B】 【C】    .. 123 ... ??? ......... 456 ......... 789 方法が分からず困っています。 お手数ですが、どうかお教えください。

  • VLOOKUPのような検索で複数ヒットしたら全て抽出したい

    Sheet1      A    B       1. 600円 イチゴ       2. 550円 みかん       3. 380円 イチゴ       4. 400円 りんご       5. 650円 イチゴ       6. 250円 りんご Sheet2      A ......B........C..........D..........E       1. イチゴ 600円 380円 650円       2. みかん 550円       3. りんご 400円 250円 Sheet2のA1イチゴでSheet1のB列検索して、ヒットしたA列の値段をSheet2のB1に表示する。この時、検索結果が複数あった場合、2個目をC1 3個目をD1に表示する。(max10個入れたいです) 次はA2のみかんで検索する。 イチゴのような種類が2000個あるので関数で自動検索したいのですが よろしくお願い致します。

  • VLOOKUP関数で複数の検索値を設定したいのですが

    VLOOKUP関数で複数の検索値を設定することはできるのでしょうか。 例えば5列目のセルのうち、A列に"日本人"、B列に"学生"が入力されている行のセルの内容を求めるといった具合です。 VLOOKUP関数に特にこだわってはいないので別の関数を用いた方法でもかまいません。 ExcelはExcel2000,OSはWindows2000を使用しています。 よろしくお願いします。

  • シート内の抽出について(Excel)

    シート内の抽出について(Excel) シート内に同じ文字列が複数存在するデータから抽出して使用したいのですが、ご存知の方おりましたら教えていただきたいのですが。 例    A   B   C   D  1 001  ABC 500  太郎 2 001  ABC 200  花子 3 001  ABC 150  太郎 4 002  DEF 500  次郎 5 002  DEF 200  三郎 6 002  DEF 150  次郎 7 002  DEF 100  次郎 このようなシートがあったとしますと 抽出条件として ’001’ とした場合 番号:001    A   B   C   D  1 001  ABC 500  太郎 2 001  ABC 200  花子 3 001  ABC 150  太郎 このように他のシートに抽出できればベストなのです。 データーが膨大なものでオートフィルターで抽出しコピー&ペーストでは時間がかかり過ぎてしまいます。関数でなんとかなればと思っておりますがお知恵をかしていただけないでしょうか?

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • Excel関数である条件に満たしたものを抽出

    Excel関数である条件に満たしたものを別シートに抽出したいのですが たとえばsheet1に A   B    C ID  名前   条件フラグ 101  太郎   1 102  花子   3 103  一郎   2 104  二郎   3 というデータがあってここから 条件フラグが「3」のものだけをsheet2に抽出したいのですが オートフィルタではなく関数で処理をしたいと思います。お分かりの方、ご教授ください。

  • Excel2007 VLOOKUP関数の相談

    もし検索不足で重複した質問でしたら申し訳ありません。 VLOOKUP関数について、シート「A」に文字列を入力したら シート「リスト」シート上に同じ文字列があれば その文字列関係の情報を持ってくるというVLOOKUP関数を使用していました。 <使っていた関数> =IF(ISERROR(VLOOKUP(H306,リスト!A:B,2,0)),"",VLOOKUP(H306,リスト!A:B,2,0)) この入力する文字列が数字(別データからコピーして貼り付ける)に変わっただけなのですが、 何故か対象情報の抽出をしてくれません。 <使おうとしている関数> =IF(ISERROR(VLOOKUP(I2,データ0501!A2:F695,3,0)),"",VLOOKUP(I2,データ0501!A2:F695,3,0)) ネットで検索したのですが、関数情報が不足しているのか、 コピーした数字列の貼り付け方が間違っているのかわからない状況です。 恐れ入りますが解決策があればお教えいただければと思います。 どうぞ宜しくお願い申し上げます。

  • エクセルのVLOOKUP関数で…(複数条件?の抽出)

    ●シート2、A列に部品正式名称、B列に部品略称の一覧表(部品の種類は約500点) ●シート3、A列に略称、B,C,D,E,F,G列と続けて寸法などの詳細を記した一覧表 があります。 ●シート1に検索一覧表として、B列(B3~B8)は項目、セルC3~C8にVLOOKUPでシート3の情報が抽出されるようにしてあります。 C1で略称を入力し抽出するのはOKなのですが、正式名称で入力しても同じようにシート3の情報を抽出するようにしたいです。 (IFを使って思いつく関数を組合わせてみたりしたのですが、うまくいきませんでした(TT) できたら関数で何か良い方法ありますでしょうか? 宜しくお願いします。

  • EXCEL2022でVLOOKUP関数の「検索値」に><等の不等式を使って、「近似値」を使いたい!

     EXCEL2022でVLOOKUP関数の「検索値」に、ヘルプでは「近似値」が使えるとあるので、><等の不等式を使って、範囲指定を行い、複数の項目を抽出してきたい!  例として、 (1)2<「検索値」<30、程度で、60項目程を選び出したうえ、 (2)なおかつ、その60項目の中から、オートフィルタ機能を使用し   て、「トップテン」上位の10項目を表示させる方法  を模索中です。  ★実際に、このVLOOKUP関数を使用して、プログラムを作成されている方は、  「検索値」に『範囲指定を行い、複数の項目を抽出できない』ようだと、★たった一つのみの単独の値に対応する単一項目★しか抽出できない為、広範な使用に適さず、従って、たいへん使い勝手が悪い、使用用途の限定される、いわゆる”退屈な機能”とならないでしょうか?  ヘルプより、  VLOOKUP 関連項目 指定された範囲の左端の列で特定の値を検索し、範囲内の対応するセルの値を返します。  書式 VLOOKUP(検索値,範囲,列番号,検索の型) 検索値 範囲の左端の列で検索する値を指定します。検索値には、値、セル参照、または文字列を指定します。  横に”行”を検索して、一致する項目を表示させるものでは、HLOOKUP関数というものも在りますが、私の意図する”使用方法”を満足させる”関数”、343もあれば、一つ位はな~い"かんすぅ~"?(意図した訳ではないのに、やや、字面が、難しい言葉ばかりになってしまったので、"和み系の、普段は言わないジョーク"をネットなので、書き込んでしまいました。やや反省。)(^_^;)

  • vlookup等の検索・行列の関数でハイパーリンクも抽出することは可能でしょうか?

    いつも助けてもらっています。ありがとうございます。 excelの関数に関しての質問なのですが、現在エクセルファイルで A B C DEFG・・・・・ 1 氏名 所属 生年月日 成績 2 鈴木 営業1 2000/1/1 0000000 3 山田 営業2 2000/1/1 0000000 4 佐藤 営業3 2000/1/1 0000000 ・ ↑web管理画面へのハイパーリンク ・ ・ ・ (ごめんなさい上記ABC・・・のズレが直せない・・・ A=氏名 B=所属 C=生年月日 DEFG・・・=成績 です。見辛くて申し訳ございません) 上記のような状態で所属部分にハイパーリンク(関数ではなく埋め込み)がデータベースとしてあります。 これを同じ形で同一ファイル内の別シートに所属別で分けようとしています。 まずvlookupを使用し =IF(ISERROR(0/LEN(VLOOKUP($A2,A2:Z100,4,0))>0),"",(VLOOKUP($A2,A2:Z100,4,0))) という関数で成績の数値をうまく抽出できるところまではできたのですが 同じ関数で列をずらしハイパーリンクがある所属のデータを別シートに抽出しても ハイパーリンクが適用されておらず、もちろんクリックしてもリンクしない状態です。 理想的には所属別に分けたファイルに氏名だけ入力すれば後はvlookupで データベースから同じデータを抽出するというのが一番良い状態です。 また、人の入れ替わりや成績の数値変動が多いので単純に=sheet1!B3というような処理だけでは難しいです。 そこで、ご質問させていただきたい点が 1・vlookup・match・index等で検索・行列の関数で埋め込んだハイパーリンクも抽出することは可能か? 2・もしできないとしたら他に方法があるか? という2点です。長文失礼致しました。 なお、使用PCはwindows2000・excel2000です。 ご教授いただけると幸いです。よろしくお願い致します。

専門家に質問してみよう