再びお世話になります。
シート1の対象年月と商品が一致した売上をシート2で集計したいのですが、上手く集計が取れなかったのでご教示ください。
【表】シート1のA1からC5にデータが入力されているとして。
(CSVで出力の為、すべて文字列状態)
A列 B列 C列
1 日付 商品 売上金額
2 20150401 卵 100
3 20150409 卵 110
4 20150502 パン 200
5 20160102 野菜 50
6 20160110 野菜 80
シート2で集計します。
【作業日が2017/04/16として、前年度の前月と同月の売上を集計します】
・A1=作業日当日日付、B1=前年前月とC1=前年同月はDATE関数でA1を元に年月を出しています。
・D列はシート1のA列を、E列でTEXT関数で日付表示にしてからD列でDATE関数でこの表記に変えていますので、5000行程続いています。(TEXT関数だと形式が一致しないようだったので…)
A列 B列 C列 D列(日付作業列)
1 (作業日日付) 2015/03/16 2015/04/16 2015/04/01
2 卵.............................................................2015/04/09
3 パン..........................................................2015/05/02
4 野菜
このような状態で、
B2には、B1とD列の前7文字が一致(年月が一致) かつ A2とシート1のB列の表示が一致(商品が一致)したものの売上合計を表示。
いきなり全体の式を組むのは私には無理なので、少しずつ計算していこうとしたのですが、
B2に「=SUMIF(D:D,LEFT($B$1,7)&"*",シート1!C:C)」と入れてみたものの計算が反映せず行き詰ってしまいまいた…。
皆さまのお知恵をお借りしたく、宜しくお願いいたします。
No.5ベストアンサー
- 回答日時:
まず、やりたい事を順番にまとめて、それに応じた適切な作業列を設けましょう。
やりたい事について
①作業日の日付(シート2!A1)から前年前月(シート2!B1)と前年同月(シート2!C1)を表示させる。
②シート2のB列・C列に「シート1のA列の月が、シート2の1行目に表示した月と一致するシート1のデータから、シート1のB列がシート2のA列と一致するデータの、シート1のC列に表示された金額を合計したもの」を表示させる。
作業列例について
①については特に作業列は必要ありませんが、検索したいのは年月の分かる6桁の数字なので、
シート2!B2=TEXT(DATE(YEAR(A1)-1,MONTH(A1)-1,1),"yyyymm")
シート2!C2=TEXT(DATE(YEAR(A1)-1,MONTH(A1),1),"yyyymm")
としましょう。
日にちは関係ないので、年月をA1とから算出し、日は1日にしています。
質問者の例の状態では、B2=201503、C2=201504、とそれぞれ表示されるはずです。
②についてですが、
合計を計算するためには、シート1のC列を文字列ではなく数値で表示させる必要があります。
よってシート1のD列を作業列とし、
シート1!D2=C2*1
これをデータの数だけ↓にコピーしましょう。
*1とすることで、C2が数値として利用できるデータが文字列として入っている場合、数値として扱って計算結果を表示してくれます。
*1なので、値としては同じですね。+0としてもかまいません。
これで準備は整いました。
シート2のD列で表示させたデータは特に必要ないというわけですね(汗
あとは結果を表示させるだけです。
シート2!B2=SUMIFS(Sheet1!$D:$D,Sheet1!$A:$A,B$1&"*",Sheet1!$B:$B,$A2)
これを表の分だけ(例の場合C4まで)コピーしましょう。
あくまでシート1のデータが全て文字列として入力されていた場合です。
結果が合わない場合は、おそらく文字列として入力されていると思い込んでいるだけ、
といった可能性もあります。(CSVについては良く知りませんので)
引き続きのご回答ありがとうございます。
行き詰っていたせいで分かりにくい表記の質問になってしまっていましたが、分かりやすく整理して頂き、頭の中がすっきりしました。
②はシート1に他にも多くの項目が入っているため、シート2のD列を入れ替えで使ってみました。
詳しく解説頂きありがとうございます!解決しましたm(__)m
No.4
- 回答日時:
>(CSVで出力の為、すべて文字列状態)
まず、特に、加工した状態でなければ、文字列状態とはいいませんが……。
また、書式やプログラムで、そんな面倒なことをしてはいないはずです。
Sheet1 のCSVは×インポート◯オープンしたものになるのですが、たぶん、単に開いただけのものだと思います。(インポートは、データ加工してから表に入れること)
私は前の経緯を読んでいないのですが、少し内容的にわかりにくく感じています。
Sheet1 CSVを、
>E列でTEXT関数で日付表示にしてから
>D列でDATE関数でこの表記に変えていますので、5000行程続いています。
Text関数から、日付値(シリアル値)に変更出来ますが、DATE関数は使いません。
その日付値をどう処理するかで決まるはずです。
SUMIF でも出来ますが、文字列にすべて置き換えていくのも問題ですね。
正統派としたら、シリアル値の日付表示にするところだと思います。
-------------------------
そうすると、#2様のおっしゃっているように、
「SUMIF」ではなく、「SUMIFS」関数を選ばなくてはなりません。
ということは、また最初から降り出しに戻らなくてはなりません。
1.
Sheet1 D列は、タイトルは[日付SR(仮)]
=TEXT(A2,"##!/##!/##")*1 これで、シリアル値になります。
↓
とします。シリアル番号そのものが出てきてしまいます。表示が気になるなら、書式を設定してください。
2.
Sheet2:B2~(右へ)
=SUMIFS(Sheet1!$C:$C,Sheet1!$B:$B,$A2,Sheet1!$D:$D,">=" &DATE(YEAR(B$1),MONTH(B$1),1),Sheet1!$D:$D,"<=" &DATE(YEAR(B$1),MONTH(B$1)+1,0))
なお、表示が遅いようでしたら、C:C や D:D を使わずに、C$2:C$10000 と範囲を限定した方がよいかもしれません。Excel2003までは、そのスタイルは問題なかったようですが、仕様が変わったそうです。
'-----------------
> A列 B列 C列 D列(日付作業列)
1 (作業日日付) 2015/03/16 2015/04/16 2015/05/16 ←5月になるはず
1行目は、書式で、YYYY年M月としたほうがよいでしょう。
No.3
- 回答日時:
ちょっと意味不明な点があります。
(CSVで出力の為、すべて文字列状態)とありますが、シート1のC列はCSVファイルを読み込んでも、EXCELシートでは数値に変換されているはずですが。
シート2のA列の品名は手入力したものですよね?
D列はシート1のA列(文字列の日付)を通常の日付に変換したものなので、シート2のD列ではなく、シート1のD列に表示すべきものではありませんか?
E列に日付作業列をもうけなくてもD列に次の式で直接変換できます。
=DATEVALUE(LEFT(Sheet1!A2,4)&"/"&MID(Sheet1!A2,5,2)&"/"&MID(Sheet1!A2,7,2))
なお、該当するセルの書式設定はyyyy/mm/ddとします。
上の式を使って日付をシート1のD列に表示するようにしたとすると画像のようになります。
複数条件での合計はSUMIF関数を使うのですが、今回の場合hSUMIFS関数を使ってみたのですがうまくいきませんでした。
なので、SUMPRODUCTを使っています。
シート2のB2に下の式を入力し、B列とC列にコピーして下さい。
=SUMPRODUCT((Sheet1!$B$2:$B$6=$A2)*(YEAR(Sheet1!$D$2:$D$6)=YEAR(B$1))*(MONTH(Sheet1!$D$2:$D$6)=MONTH(B$1))*Sheet1!$C$2:$C$6)
なお、式中の$6の部分は$5000のように、データーの列数によって適宜書き換えて下さい。
ご回答ありがとうございます。
売上数字については自分の思い込みで、数値になっておりました。
シート1については、実は他にCZ列あたりまで項目があるという事と、毎月データの更新で1000行程が増えるという事情があるので、触らないようにしてシート2で作業列を作りました。
教えて頂いた通りのやり方で、シート1のD列を変えた場合だとうまく集計がとれました。シート2に作業列を持ったままの場合ももう少し頑張ってみます!
No.2
- 回答日時:
シート2のB1セルは、日付に見えていますが、シリアル値となっていますのでその式ではダメかと思います。
シリアル値に対して、LEFT対応では意味がありません。
良く分からないのですが、元データ(全売上)はシート2なのですか? 5000行もあるっていうのなら。
SUMIF関数じゃなくて、普通に SUMIFS関数(複数条件を満たすものの合計)を使ってはどうですか。
ご回答ありがとうございます。
行き詰って頭が混乱しており、分かりにくい表記になってしまってすみません。。
元データはすべてシート1です。日付に見えてシリアル値というお言葉に、あ…、と思いました。確かにLEFTでは意味がなかったですね…。
No.1
- 回答日時:
致命的な障害が1点あります。
シート1はすべて文字列とのことですが、C列の売上金額も文字なのですよね?SUM系の関数は、文字を相手にしてくれないので、このままでは集計することができません。売上金額だけでも数字にすべきです。売上金額が数字であれば、次の数式で集計できるはずです。
【シート2!B2セル】=SUMIFS(シート1!C:C,シート1!A:A,TEXT($B$1,"yyyymm")&"*",シート1!B:B,$A2)
ご回答ありがとうございます。
売上数字は文字列だと思い込んでいただけでした…。
教えて頂いた式は上記のサンプル表では問題なく動いたのですが、集計したい表に入れると上手く集計が取れませんでした。もう一度日付のあたりを見直します!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) 【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。 3 2023/03/23 17:30
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
はがきについて。
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
【関数】先頭だけにある、半角...
-
Excel ピボットテーブルで日付...
-
Excelのpivotについて質問です
-
時間によってファイル名が変わ...
-
エクセル 白黒印刷で白線を印刷...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
WPS OFFICEでの縦書きについて
-
Excelのチェックボックスの使い...
-
エクセルの条件付き書式につい...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報