- ベストアンサー
エクセルで条件に合わせて複数データを抽出したい
シート1に基本データ(基データ)があり、シート2のセル内に条件を入れて、該当のデータをシート1から引っ張りたい。 具体的には、シート1に基本データ ナンバ- 1 1 2 2 2 3 4 4 4 該当データ A B C D E F G H I シート2に 条件内容 1を入れてA B (複数データ) 2を入れてC D E 3を入れてF -----と、こんな具合になりたいのですが? VLOOKUP は複数の抽出なので駄目でした。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
この問題はエクセル関数での抜き出し問題で難しいですね。 関数の仮面を被ったVBAの配列関数でやって見ます。 -- 例データ Sheet1のA1:B9 番号 内容 1 a 1 b 2 c 3 d 4 e 3 f 2 g 3 h ーーー 準備 シートでALT+F11 挿入ー標準モジュールで出る画面に下記を張り付け。 ーーー Function aa(a, b) Dim x() As Variant c = a.Column k = 1 d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row ReDim x(1 To d, 0) For i = 1 To d If Worksheets("Sheet1").Cells(i, c) = b Then ' MsgBox Worksheets("Sheet1").Cells(i, "B") x(k, 0) = Worksheets("Sheet1").Cells(i, "B") k = k + 1 End If Next i aa = x End Function ーーー Sheet2のA1に番号3 B2:B10とかを範囲指定して(番号が変わったとき、最大該当数を考慮すること) =aa(Sheet1!A2,A1) と入れて SHIFT、CTRL、ENTERのキーを同時押しする。 結果 d f h そのときB2:B20とか適当行数に書式・表示形式・ユーザー定義で #を設定して0を出ないようにする。 ーー 私は中間列や行を使ってやる方法で、imogasi方式を出してます。 Googleなどでimogasi方式で照会すると過去の質問回答が沢山出ます。
その他の回答 (3)
- sunrisejp
- ベストアンサー率34% (9/26)
シート1のA1セルから順番に基本データを入力します。 ナンバ- 1 1 2 2 2 3 4 4 4 該当データ A B C D E F G H I 次に、シート2のA1とA2セルに ナンバ- 該当データ を入力。 そして、シート2のB2セルに =IF(Sheet1!B1=$B1,HLOOKUP($B1,Sheet1!B1:B2,2),"") と入力し、この関数を、C2からJ2セルにコピーします。 シート2のB1セルにナンバー数字を入力すると、 該当データが抽出するようになります。
お礼
ありがとうございました。
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法は如何でしょうか。 シート1のA列にナンバー、B列にデータとして、シート2のA列にナンバーを入力すると右隣列方向にデータを抽出します。 次の配列数式をシートA2に設定し、縦横に必要分コピーして下さい。 尚、配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。 =IF(COUNTIF(Sheet1!$A:$A,$A1)>COLUMN(A$1)-1,INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A$1:$A$100=$A1,ROW(Sheet1!$A$1:$A$100),99999),COLUMN(A$1))),"")
お礼
ありがとうございました。
- shintaro-2
- ベストアンサー率36% (2266/6245)
例にあげられたデータ形式では、縦横入れ替えた方がエクセルでは便利かと思います。 シート1のデータをシート2にリンク貼り付け(しかも、行と列を入れ替えて)して、 オートフィルタで処理するのが一番簡単です。 indexに対して、返されるデータが何件あるかわからないので、 関数で処理するためには、予想される出力欄にすべて入力しておくことが必要です。 ですので、マクロ(VBA)で処理するしかないかと思います。
お礼
ありがとうございました。
お礼
ありがとうございました。