人に聞けない痔の悩み、これでスッキリ >>

エクセルの複数データの抽出で困っています。
助けてください。

以下の様なシートで別シートから複数のデータを取り出したいのですが・・・・
他の方の質問を参照したのですがうまく行かなく
皆さんの知識を教えてください。

シート1  テーブル

A列     B列    C列   D列
グループ  メーカ   部品  数量
 1      A社    AAA   1
 1      B社    BBB   2
 1      C社    CCC   4
 2      F社    ZZZ   3
 2      S社    HHH   2
 3      以下も同様
 3
 4
 5
 5
 5

シート2 摘出を考えているのですが
シート1のA列グループを選択すると全て摘出する様にしたいです。

シート2
グループ選択 「1」 「2」 を選択すると
1と2が全て摘出される

 1      A社    AAA   1
 1      B社    BBB   2
 1      C社    CCC   4
 2      F社    ZZZ   3
 2      S社    HHH   2

選択は1と3 2と4 1と5 とか結構なパターンがあります。

VLOOKUP、その他の方の回答例も使用してみましたがうまく出来ませんでした。

関数、マクロ問いませんので
どうぞ、お力をお貸し願います。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

 回答番号ANo.6です。


 先程の回答で画像を添付し忘れておりましたので、再度投稿させて頂きました。
「エクセル 複数データ 抽出」の回答画像7
    • good
    • 0
この回答へのお礼

ご返信遅れてすみません。
親切丁寧な説明ありがとうございます。

お陰様で上手くできました。

もう一つ教えていただきたいのですが
シート2のグループ選択を増やす場合は
A4の数式中「$D$1」の箇所を$Eとか$Fとかに
変更すれば4個、5個に増やせますか?

よろしくお願い致します。

お礼日時:2011/07/02 08:56

 今仮に、グループ選択で指定するグループ名をSheet2のB1、C1、D1セルに入力すると、抽出結果をSheet2の4行目以下に表示させるものとします。



 まず、Sheet2のA4セルに次の数式を入力して下さい。

=IF(ROWS($4:4)>COUNTIF(Sheet1!$A:$A,$B$1)+COUNTIF(Sheet1!$A:$A,$C$1)+COUNTIF(Sheet1!$A:$A,$D$1),"",INDEX(Sheet1!A:A,SUMPRODUCT(ROW($A$1:INDEX($A:$A,MATCH("゛",Sheet1!$C:$C,-1)))*COUNTIF($B$1:$D$1,Sheet1!$A$1:INDEX(Sheet1!$A:$A,MATCH("゛",Sheet1!$C:$C,-1)))*(COUNTIF(OFFSET(Sheet1!$A$1,,,ROW($A$1:INDEX($A:$A,MATCH("゛",Sheet1!$C:$C,-1)))-ROW($A$1)+1),$B$1)+COUNTIF(OFFSET(Sheet1!$A$1,,,ROW($A$1:INDEX($A:$A,MATCH("゛",Sheet1!$C:$C,-1)))-ROW($A$1)+1),$C$1)+COUNTIF(OFFSET(Sheet1!$A$1,,,ROW($A$1:INDEX($A:$A,MATCH("゛",Sheet1!$C:$C,-1)))-ROW($A$1)+1),$D$1)=ROWS($4:4)))))

 次に、Sheet2のA4セルをコピーして、Sheet2のB4~D4の範囲に貼り付けて下さい。
 次に、Sheet2のA4~D4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。

 後は、グループ選択で指定するグループ名をSheet2のB1、C1、D1セルに入力しておくだけで、全自動で抽出結果が表示されます。(「Ctrl+Shift+Enter」操作や作業列は不要です)
 尚、この数式では、Sheet1に入力されている元データの表の、何行目にまでデータが入力されているのかを、D列の数量欄に、数値データが存在している最下段の行が、何行目であるのかを判定する事で、計算処理を行っているため、正確に動作させるためには、データが入力されている最下段の行の数量欄には、必ず数値が入力されていなければなりません。(どうしても最下段の数量欄に数値データを入力出来ない場合には、データが入力されている最下段の行よりも下にある行中の数量欄に、0等の適当な数値を入力してから、抽出を行って下さい)
    • good
    • 0

補助列を使わずに関数で対応するなら以下のような配列数式を使うことになります。



抽出条件を入力するセルがA2:A5セルに設定されている場合(最大4条件まで選択できる場合)、以下のような数式をD2セルに入力して、Ctrl+Shift+Enterで確定して下方向に適当数オートフィルコピーします(添付画像参照)。

=INDEX(Sheet1!A:A,SMALL(IF(ISNUMBER(FIND(TRANSPOSE($A$2:$A$5),Sheet1!$A$1:$A$1000))*(TRANSPOSE($A$2:$A$5)<>""),ROW($A$1:$A$1000)*1,1000),ROW(A1)))&""

E2セルには以下の式を入力してCtrl+Shift+Enterで確定し、右方向に3つ、下方向に適当数オートフィルします。

=IF($D2="","",INDEX(Sheet1!B:B,SMALL(IF(ISNUMBER(FIND(TRANSPOSE($A$2:$A$5),Sheet1!$A$1:$A$1000))*(TRANSPOSE($A$2:$A$5)<>""),ROW($A$1:$A$1000)*1,1000),ROW(B1))))
「エクセル 複数データ 抽出」の回答画像5
    • good
    • 0

フィルターオプションの機能を紹介しておきます。


データが入っているシートが Sheet1 として
別のシートに
  A     B      C   D
1 グループ
2   1
3   2

5 グループ  メーカ   部品  数量


と検索した値を A1~A3セルに入れておきます
表示を出したい部分にその項目名を入れておきます。

エクセル2010 の場合で
データ=>フィルター 明細設定で
指定した範囲 にチェック
リスト範囲  Sheet1!A:D
検索条件範囲 A1:A3
抽出範囲   A5:D5 でOKすると グループが 1 と 2が抽出されます。
これをマクロの記録で実行してできたコードを活用した事例ですが
抽出して表示するシート名を右クリック
コードの表示でVBエディターを起動して
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row < 4 Then
Sheets("Sheet1").Columns("A:D").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:A3"), CopyToRange:=Range("A5:D5"), Unique:=False
End If
End Sub
を貼り付けして閉じると
A2とA3セルに抽出を希望する グループの番号を入れるたびに表示が変わってくれます。
    • good
    • 0

シート1はもとの表でA1セルからD1セルには項目名が入力され2行目から下方にお示しのデータが並んでいるとします。


作業列をE列に設け、E2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",A2+COUNTIF(A$2:A2,A2)/1000)

シート2には抽出したデータを表示させることにしてA1セルにはグループ名を例えば1と入力し、B1セルにはグループ名を例えば2と入力します。
2行目にはシート1と同じ項目名を入力します。
A3セルには次の式を入力してD3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(ROW(A1)<=COUNTIF(Sheet1!$A:$A,$A$1),INDEX(Sheet1!$A:$D,MATCH($A$1+ROW(A1)/1000,Sheet1!$E:$E,0),COLUMN(A1)),IF(ROW(A1)<=COUNTIF(Sheet1!$A:$A,$A$1)+COUNTIF(Sheet1!$A:$A,$B$1),INDEX(Sheet1!$A:$D,MATCH($B$1+(ROW(A1)-COUNTIF(Sheet1!$A:$A,$A$1))/1000,Sheet1!$E:$E,0),COLUMN(A1)),""))

このような方法ではシート1の表では必ずしもグループごとにデータが並んでいなくても対応することができます。
    • good
    • 0

こんばんは!


一例です。
↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。

Sheet1に作業用の列と検索データを入力するセルを設けています。
(作業列・検索セルはどこでも構いません)

作業列E2セルに
=IF(COUNTIF($G$2:$G$5,A2),ROW(),"")
という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。

そしてSheet2のA2セルに
=IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$E:$E,ROW(A1))))

という数式を入れ列方向と行方向にオートフィルでコピーすると
画像のような感じになります。

尚、VBAでやる場合は作業用の列は必要ありませんが、検索データをINPUTBOXに入力するようにする、
もしくは画像のように検索データを入力するセルを設ける必要があると思います。
検索データのパターンが二つとか決まっているのであればINPUTBOX等でも良いと思いますが
検索データの数を好みによって変えたいという場合は前述のような関数が簡単かもしれませんね。

以上、参考になれば良いのですが・・・m(_ _)m
「エクセル 複数データ 抽出」の回答画像2
    • good
    • 0

>シート1のA列グループを選択すると全て摘出する様にしたいです。




 ここの意味が飲み込めません、
プリントスクリーン ボタンを押して、ペイントで、貼り付けをするとExcel画面がすべて張り付きます。
左上の点線マークで範囲を指定して切り取り、
新たにペイントに貼り付けて、名前をつけて保存すると、
OK の画像添付をクリックで、保存されたExcel画像を投稿できるようになります。

 お試しいただけるとうれしいですね。
「エクセル 複数データ 抽出」の回答画像1
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています


人気Q&Aランキング