- 締切済み
顧客ごとの合計が自動的に表示
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
こんなのまで質問するのか、というレベルの中身じゃない?と何か裏があるのかと思っちゃったが? しかしよく考えると、 SUMIF関数の第2引数の商品の、重複の無いリストが(関数で)出せないということかな? SUMIF(範囲, 検索条件, 合計範囲) SUM関数は知っているだろうが、条件を付ける関数でSIUMIF,SUMIFS関数がある。 Googleででも「エクセル SIUMIF」で照会し、実例が載っているものを読めば内容は判る。 それさえなじみがないなら、 A列でソート(並べかえ)をして、変化した区切りが目視でわかるから、そこへ=SUM()を入れたら。()内のB列での最初のセルと最終のセルは目視で入れる。 増えると毎回式を入れ直しになるが。 ーー そういうものを軸に持って、このWEB記事は自分の場合に比べて、同じか違う点があるか、そういうことを書いて質問するものだ。 それに商品の一覧をD列 などに出す方法が必要。 http://www.tku.ac.jp/~densan/local/tips-pc/excel-tips/xls_006/xls_006.html D列にこれを作ってしまえば、関数のSUMIFをE列に入れるだけ。 これを関数でやるのは簡単ではない。 Googleで「エクセル関数 重複しないデータ抽出」で照会。 関数だけでやるのは式が複雑。 ーーー 少し詳しく説明すると 例データ A列 B列 A 100 B 300 A 100 A 200 C 100 C 100 ーーー 式を簡単にするため、「作業列(C列とする)を使う方法」を説明する。 (作業列の作成) まずA列について上の行からみて、初めて現れた行で、そのA列の行番号を残すことを考える。。 初出でない行は,後に使うSMALL関数を使うこととの関連で、対象外が確実な、大きな数字をセットする。 データ数の見込みが10万件であれば、100001以上の数をセットしておけば絶対にその顧客初出行の行番号 よりSMALLな数(番号)にならないから。 C列C2に =IF(COUNTIF($A$2:A2,A2)=1,ROW(),10^5+ROW()) と入れて下方向に式を複写すると A列 B列 作業列 A 100 2 B 300 3 A 100 100004 A 200 100005 C 100 6 C 100 100007 式の$A$2:A2の$Aの$に注目のこと。式を複写しても、A2に固定するための$です。 (行的に、データ詰めて、別列D列にA,B,C・・を持ってくる) そのためには、D列の式を入れるセルの行番号ROW()を使って、1,2,3・・を使て、SMALL関数の 第2引数の何番目の指定に使う。 D2に =IF(ROW()-1<=COUNTIF($C$2:$C$10000,"<100000"),SMALL($C$2:$C$100000,ROW()-1),"") もしD列の「その行の行番号」が、「C列(作業列)で100000より小さい件数」より小さい行では SMALL($C$2:$C$100000,ROW()-1)の値をセット、それ以上は空白をセットする。 結果はD列 詰めたデータ 2 3 6 それを顧客名にするには =IF(ROW()-1<=COUNTIF($C$2:$C$10000,"<100000"),INDEX($A$1:$A$100000,SMALL($C$2:$C$100000,ROW()-1)),"") 詰めた A B C ーーー E列E2に =SUMIF($A$2:$A$100000,D2,$B$2:$B$100000) 下方向に式を複写 結果 顧客別売上 400 300 200 0 0 0 0を出さない方法は判りますか。略。 次は「作業列を使わない方法」だが、長くなるので説明略。 上記WEB記事でも参照してください。 ーー エクセルでは一般に下記の方法がある。 今後の質問者の発展のために (1)関数 (2)操作 (3)特別なエクセルが用意している機能(操作で実現するのが多い) ピボットテーブル Filter (4)VBA (5)ACCESS的なデータベース的発想による処理 (6)エクセルの(他人が作って、利用できる)アプリを見つける ピボットテーブルなどがおすすめ。
- kagakusuki
- ベストアンサー率51% (2610/5101)
「ピボットテーブル」や「重複の削除」を使用する方法の場合、結果が自動的には表示されず、ボタンを手動でクリックする必要がありますので注意して下さい。
- bunjii
- ベストアンサー率43% (3589/8249)
>顧客ごとに合計したものをC列に自動的に表示したいです。 添付画像では顧客ごとの合計購入数はE列のようです。 E列へ集計した値をC列へも表示したいのですか? >簡単な計算式があれば教えて下さい。(エクセル2013使用) D列はA列からコピーして「データ」タブの「重複の削除」で単一化できます。 E2へ次の数式を設定して下へ必要数コピーすれば良いでしょう。 =IF(D2="","",SUMIF(A:A,D2,B:B)) 顧客数が増えたときはA列をD列へコピーし、重複の削除を再実行してください。
- kagakusuki
- ベストアンサー率51% (2610/5101)
顧客名も自動表示させる際に >簡単な計算式が という事であれば、作業列を使った方法が最も簡単な数式になるかと思います。 今仮に、質問者様が添付された画像に写っている表が存在するシートがSheet1であるものとし、Sheet2のA列を作業列として使用するものとします。 その場合、まず、Sheet2のA2セルに次の様な関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,ROW())<>"",COUNTIF(Sheet1!$A$2:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1),ROW(),"") 次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に(Sheet1のA列~B列の表においてデータが入力される可能性のある行を上回るのに十分な行数になるまで)貼り付けて下さい。 次に、Sheet1のD2セルに次の様な関数を入力して下さい。 =IF(ROWS(D2:D$2)>COUNT(Sheet2!$A:$A),"",INDEX($A:$A,SMALL(Sheet2!$A:$A,ROWS(D2:D$2)))) 次に、Sheet1のE2セルに次の様な関数を入力して下さい。 =IF($D2="","",SUMIF($A:$A,$D2,$B:$B)) 次に、Sheet1のD2~E2のセル範囲をコピーして、Sheet1のD列~E列の3行目以下に貼り付けて下さい。 以上です。
- intin
- ベストアンサー率33% (8/24)
sumif関数を使うならば、 No2さんの回答でもいいですし(微妙に計算式が違っている部分がありますが)、 さらに、参考URLのページのように絶対参照をうまくつけると 計算式の入力が簡単になります。 (E2セルに計算式を入れて下に貼り付けるだけで済みます) 今回の場合であれば、 参考URLほど厳密に絶対参照を付けなくても =SUMIF($A$2:$A$7,D2,$B$2:$B$7) というように絶対参照を付ければ十分だと思います。
- quindecillion
- ベストアンサー率48% (87/180)
=SUMIF(A2:B7,D2,B2:B7) =SUMIFS(B2:B7,A2:A7,D2) で行けるとおもいますよ。 普通のSUMにIFの条件をつけるというものです。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 数式でも出来るので回答が付くと思いますけど、 ピボットテーブルにしておいた方が簡単では?