- ベストアンサー
エクセルで複数の条件からデータを抽出する方法
次のような表において、A列の入荷日、B列の製品名から、別表に月別に製品別毎の入荷数及び合計金額を求める関数を教えて下さい。 A B C(個数) D(単価) 2013/2/15 みかん 100 50 2013/2/30 みかん 200 50 2013/3/2 りんご 50 70 2013/3/4 ぶどう 150 40 2013/4/3 いちご 100 50 よろしくお願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
簡単に求められるものではありませんね。 いくつかの作業列を作って対応します。 作業列が目障りでしたらそれらの列を選択して右クリックし「非表示」を選択すればよいでしょう。 お示しの表がシート1のA列からD列のデータが2行目から下方に入力されているとしてE2セルには次の式を入力して下方にドラッグコピーします。 =IF(C2="","",C2*D2) F2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",DATE(YEAR(A2),MONTH(A2),1)) G2セルには次の式を入力して下方にドラッグコピーします。 =IF(F2="","",IF(COUNTIF(F$2:F2,F2)=1,MAX(G$1:G1)+1,G1)) H2セルには次の式を入力して下方にドラッグコピーします。 =IF(F2="","",F2&B2) I2セルには次の式を入力して下方にドラッグコピーします。 =IF(H2="","",IF(ROW(A1)=1,1,IF(AND(COUNTIF(H$2:H2,H2)=1,G1<>G2),MAX(I$1:I1)+2,IF(COUNTIF(H$2:H2,H2)=1,MAX(I$1:I1)+1,"")))) それらの作業列のデータを使ってお求めの表をシート2に作成するとして A1セルには月、B1セルには製品名、C1セルには入荷数、D1セルには合計金額とでも項目名を入力します。 A2セルには次の式を入力してD2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!$I:$I)+1,"",IF(COUNTIF(Sheet1!$I:$I,ROW(A1))=0,IF(COLUMN(A1)=1,MONTH(INDEX(Sheet1!$F:$F,ROW(A1)))&"月集計",IF(COLUMN(A1)=3,SUMIF(Sheet1!$F:$F,INDEX(Sheet1!$F:$F,MATCH(ROW(A1)-1,Sheet1!$I:$I,0)),Sheet1!$C:$C),IF(COLUMN(A1)=4,SUMIF(Sheet1!$F:$F,INDEX(Sheet1!$F:$F,MATCH(ROW(A1)-1,Sheet1!$I:$I,0)),Sheet1!$E:$E),""))),IF(COLUMN(A1)=1,MONTH(INDEX(Sheet1!$F:$F,MATCH(ROW(A1),Sheet1!$I:$I,0))),IF(COLUMN(A1)=2,INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!$I:$I,0)),IF(COLUMN(A1)=3,SUMIF(Sheet1!$H:$H,INDEX(Sheet1!$H:$H,MATCH(ROW(A1),Sheet1!$I:$I,0)),Sheet1!$C:$C),IF(COLUMN(A1)=4,SUMIF(Sheet1!$H:$H,INDEX(Sheet1!$H:$H,MATCH(ROW(A1),Sheet1!$I:$I,0)),Sheet1!$E:$E),"")))))) これでシート1のデータの入力に応じて表が変化して月毎に整理されて表示されます。 なお、お示しのデータで2013/2/30とのデータが有りますが、このような日付は存在しませんので文字列としてのデータとなってエラーの原因になりますので注意が必要でしょう。2013/2/20のようにすることが必要でしょう。
お礼
早速のご回答ありがとうございます。 試したところ良好でしたありがとうございました