- ベストアンサー
Excel 『3つの条件があったら同じ行のセル値を反映(重複あり)』
- Excelで3つの条件を満たした場合、同じ行のセル値を他のセルに反映させたいです。重複がある場合も考慮しています。
- データの中には撮影やイラストなどのコンテンツと、それに対応するコード、日付、金額が含まれています。
- これらの情報を月ごとにまとめた表に金額を反映させたいです。コードとコンテンツ、日付の3つが重複した場合は金額の合計を表示したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sheet2のC2セルに以下の式を入力して右方向および下方向にオートフィルしてください。 =SUMPRODUCT((Sheet1!$A$2:$A$500=$B2)*(Sheet1!$B$2:$B$500=$A2)*(DATE(YEAR(Sheet1!$C$2:$C$500),MONTH(Sheet1!$C$2:$C$500),1)=C$1)*Sheet1!$D$2:$D$500)
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
コードの種類が増加した場合や入力の日付が変わっていく場合でもそれらの変化に対応した表を作るためには多少操作が面倒になりますが次のようにすればよいでしょう。 シート1のE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(B$2:B2,B2)=1,MAX(E$1:E1)+1,"") これで新たな種類のコードが入力されればE列には新たな番号が付加されます。 次にコードと日付(入力されている日付の月の初日)を組み合わせたものをF列に表示させるためにF2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",B2&DATE(YEAR(C2),MONTH(C2),1)) そこでお求めの表ですがシート2のA1セルにはCode、B1セルにはContentと入力します。 C1セルには次の式を入力して右横方向にオートフィルドラッグします。 =IF(DATE(YEAR(MIN(Sheet1!$C:$C)),MONTH(MIN(Sheet1!$C:$C))+COLUMN(A1)-1,1)>MAX(Sheet1!$C:$C),"",DATE(YEAR(MIN(Sheet1!$C:$C)),MONTH(MIN(Sheet1!$C:$C))+COLUMN(A1)-1,1)) これで入力されているデータの最も古い日付のものから最新の日付までが付きの初日の日付で表示されます。1行目については選択後にセルの表示形式で日付の中から年および月だけの表示に変更します。 次にA2セルには次の式を入力したのちにB2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$E:$E),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!$E:$E,0)),IF(COLUMN(A1)=2,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$E:$E,0)),""))) これで表1に新しいコードが入力されれば自動的に追加して表示されます。 次にC2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR($A2="",C$1=""),"",SUMIF(Sheet1!$F:$F,$A2&C$1,Sheet1!$D:$D)) 該当する月で、各コードごとの集計金額が表示されます。 この方法を用いることでシート2には日付やコード名を手入力するなどの操作は一切ありません。例えばそれまでにはなかった古い日付のデータがシート1に入力された場合でも自動的に対応できます。シート2でC1セルに2010/06などとあらかじめ入力しておく必要もありません。
お礼
KURUMITO さん すごいですね、入力の手間も省けるなんて! さっそく試してみます。 本当にありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 ↓の画像で説明させていただきます。 Sheet1に作業用の列を2列設けています。 作業列E2セルに =IF(C2="","",MONTH(C2)) F2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(),"") という数式をいれ、E2・F2セルを範囲指定し、F2セルのフィルハンドルで下へずぃ~~~!っとコピーしておきます。 そして、Sheet2の1行目は各月の1日(1日でなくてもかまいません)のシリアル値を入れ セルの書式設定の表示形式からユーザー定義で yyyy/mm としておきます。 A2セルに =IF(COUNT(Sheet1!$F:$F)<ROW(A1),"",INDEX(Sheet1!B:B,SMALL(Sheet1!$F:$F,ROW(A1)))) B2セルに =IF(A2="","",INDEX(Sheet1!A:A,MATCH(A2,Sheet1!B:B,0))) という数式をいれ、A2・B2セルを範囲指定し、B2セルのフィルハンドルで下へコピー 最後にC2セルに(セルの書式設定から表示形式は標準にしておきます) =IF(OR($A2="",C$1=""),"",SUMPRODUCT((Sheet1!$B$2:$B$1000=$A2)*(Sheet1!$E$2:$E$1000=MONTH(C$1))*(Sheet1!$D$2:$D$1000))) として列方向にずぃ~~!っとコピー 最後にA2~最後の列の2行目までを範囲指定し、最後の列のフィルハンドルで下へコピーすると 画像のような感じになります。 尚、数式は元データの1000行目まで対応できるようにしています。 画像で「0」が表示されていますが、これが目障りであれば 当方使用のExcel2003の場合は メニュー → ツール → オプション → 「表示タブ」で「ゼロ値」のチェックを外せばOKです。 以上、長々と書きましたが 参考になれば幸いです。m(__)m
お礼
tom04さん 回答ありがとうございます。 図入りでとてもわかりやすいです。 本当にありがとうございます!
お礼
MackyNo1 さん さっそく試した所、希望の物が出来ました! 本当にありがとうございます。