- ベストアンサー
Excelで複数条件で抽出した複数データを出力
- Excelで複数条件で抽出した複数データを出力したい
- Sheet1のセルAとセルBの複数条件でSheet2を検索し、一致したSheet2のセルCをSheet1の該当するセルCに入れたい
- Excelで複数条件を指定してデータを抽出し、他のシートに出力する方法を知りたい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 作業列を使わない方法にしてみました。 尚、配列数式にしていますので、データ量が極端に多い場合はおススメしません。 (3000行程度であれば問題ないと思いますが、1000行まで対応できる数式にしています) Excel2007以降をお使いだとして・・・ ↓の画像で右側がSheet2で左側のSheet1のC列に結果を表示させるとします。 Sheet1のC2セルに =IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2),INDEX(Sheet2!C$1:C$1000,SUMPRODUCT((Sheet2!A$1:A$1000=A2)*(Sheet2!B$1:B$1000=B2)*ROW(A$1:A$1000))),"") 上記数式をShift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合は、ドラッグ&コピー! Sheet1のC2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能のまま)Shift+Ctrl+Enterで確定! 数式の前後に{ }マークが入り配列数式になります。 このC2セルをオートフィルでコピーすると 画像のような感じになります。m(_ _)m
お礼
ありがとうございます。 別シートを使わずに行うのは良いです。 INDEX、SUMPRODUCTとかの関数は使ったことがないので、 勉強なります。
補足
1000行のリミットを外して、大きくしたら結果は得られましたが、負荷がかかり遅くなります。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 質問のデータの並びを拝見すると 複数条件ではないですよね? 「名前」と「ID」は必ず一致しているようなので 単純にVLOOKUP関数だけででると思うのですが・・・ Sheet1のC2セルに =IF(COUNTIF(Sheet2!A:A,A2),VLOOKUP(A2,Sheet2!A:C,3,0),"") または =IF(COUNTIF(Sheet2!B:B,B2),VLOOKUP(B2,Sheet2!B:C,2,0),"") という数式を入れオートフィルでコピー! 質問内容通りであればこれで大丈夫だと思います。 ※ 実際のデータはA列・B列が一致していない!という場合は No.1さんが回答されていらっしゃるように作業用の列を設ける必要があると思います。m(_ _)m
お礼
ありがとうございます。 説明不足ですみません。 Sheet1のA列とB列のNAMEとIDが、 Sheet2のA列とB列の名前とIDが、 一致したものを抽出するなので、 複数条件となります。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、Sheet3のA列を作業列として使用するものとします。 まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(OR(INDEX(Sheet2!$A:$A,ROW())&INDEX(Sheet2!$B:$B,ROW())="",INDEX(Sheet2!$C:$C,ROW())=""),"",INDEX(Sheet2!$A:$A,ROW())&"◆"&INDEX(Sheet2!$B:$B,ROW())) 次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に(Sheet1のリストの行数を上回るのに充分な行数となるまで)貼り付けて下さい。 次に、Sheet1のC2セルに次の関数を入力して下さい。 =IF(OR(INDEX($A:$A,ROW())="",INDEX($B:$B,ROW())=""),"",IF(COUNTIF(Sheet3!$A:$A,INDEX($A:$A,ROW())&"◆"&INDEX($B:$B,ROW())),INDEX(Sheet2!$C:$C,MATCH(INDEX($A:$A,ROW())&"◆"&INDEX($B:$B,ROW()),Sheet3!$A:$A,0)),"【該当無し】")) 次に、Sheet1のC2セルをコピーして、Sheet2のC3以下に貼り付けて下さい。 以上です。
お礼
ありがとうございます。 別シートを利用し、そこで計算させて表示させるのですね。 使ったことのない関数とかあるので、まず、関数の使い方 から理解が必要です。 勉強になります。
補足
> Sheet3のA2セルをコピーして、Sheet3のA3以下に(Sheet1のリストの行数を上回るのに充分な行数となるまで)貼り付けて下さい。 ⇒Sheet3のA2セルをコピーして、Sheet3のA3以下に(Sheet2のリストの行数を上回るのに充分な行数となるまで)貼り付けて下さい。 でないと正しく結果がえられませんでした。
お礼
ありがとうございます。 1つ手順がありますが、簡単で良いですね。