- 締切済み
エクセルで、検索条件と合計範囲の異なる“カウント”
職場でExcel2003を使っています。 こんなデータを集計する必要が出てきました。 A B C D E 1会社名 店舗名 商品A 商品B 商品C 2株式会社A 店舗a 0個 12個 13個 3株式会社A 店舗b 1個 12個 0個 4株式会社A 店舗c 0個 0個 0個 5株式会社B 店舗a 5個 12個 13個 6株式会社B 店舗b 0個 0個 13個 7株式会社B 店舗c 6個 12個 3個 8株式会社B 店舗d 0個 12個 14個 ↑この表のデータを、 A社 商品A取扱店舗数 商品B取扱店舗数 商品C取扱店舗数 商品A販売個数 商品B販売個数 商品C販売個数 B社 商品A取扱店舗数 商品B取扱店舗数 商品C取扱店舗数 商品A販売個数 商品B販売個数 商品C販売個数 C社… という表にしたいのですが、ココに入れる関数。 販売個数の方は簡単にいきました、sumif($A$1:$A$8,"会社名"、C$1:C$8)てやればよかったので。 が、取扱店舗数の方が、難問。 sumifだと、検索条件の範囲と、合計範囲って別に設定できるじゃないですか。 “A列で、A社て入っている行の、C列の数字を合計する” という設定が出来る。 ところが、販売店数となると…。 sumifと全く同じ要領で、 “A列で、A社と入っている行の、C列のデータ個数を数える” という作業を、したいんですが…countifでは「A列で、A社と入っている行の数を数える」のが精一杯。 A社 count(C$2:C$4) count(D$2:D$4) count(E$2:E$4) 商品A販売個数 商品B販売個数 商品C販売個数 B社 count(C$5:C$8) count(D$5:D$8) count(E$5:E$8) 商品A販売個数 商品B販売個数 商品C販売個数 C社… とする方法もありますが(上の表の店舗は増えたり減ったりしない予定なので)、最初が大変だし、sumifのように、関数一つで何とかならないだろうか、と…。 配列数式?DCOUNT関数?? すみません、どなたか、お知恵を下さい…。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No4です。 同じ会社名が連続して並んでいないことがある場合には下記の式をシート1のF2セルに入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(F$1:F1)+1,INDEX(F$1:F1,MATCH(A2,A:A,0)))) その他については回答4と同じになります。
- KURUMITO
- ベストアンサー率42% (1835/4283)
SUMPRODUCT関数などを使いますとデータが多くなれば計算に負担がかかります。出来るだけ簡単で分かり易い方法として作業列を使って対応することがおすすめです。作業列が目障りでしたらそれらの列を非表示にすればよいのです。 なお、ここでは会社目についても自動で表示させるようにしています。 シート1に元のデータがあるとしてF2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(F$1:F1)+1,F1)) G2セルには次の式を入力してみぎよこほうこうI2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(F$1:F1)+1,F1)) そこでお求めの表を別のシートに表示させることにして、A1セルからD1セルには項目名などを入力します。 A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!F:F)*2,"",IF(MOD(ROW(A1),2)=1,INDEX(Sheet1!A:A,MATCH(ROUNDUP(ROW(A1)/2,0),Sheet1!F:F,0)),"")) B2セルには次の式を入力してD2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$F:$F)*2,"",IF($A2<>"",IF(COLUMN(A1)<=3,SUMIF(Sheet1!$A:$A,$A2,Sheet1!G:G),""),IF($A1<>"",IF(COLUMN(A1)<=3,SUMIF(Sheet1!$A:$A,$A1,Sheet1!C:C),""))))
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.1です。 又、A列が「株式会社A」となっている行数が変動したり、「株式会社A」となっている行が飛び飛びに存在していて、「株式会社A」の店舗の中でだけの、商品A取扱店舗数を求めたい場合には、SUMPRODUCT関数を使用ます。 =SUMPRODUCT(($A$2:$A$8="株式会社A")*($C$2:$C$8>0)) 尚、元データの表の行数が、次々と増えて行き、最終行が何行目になるのか決める事が出来ない場合には、次の様にします。 =SUMPRODUCT(($A$2:INDEX($A:$A,MATCH(MAX($C:$C)+1,$C:$C))="株式会社A")*($C$2:INDEX($C:$C,MATCH(MAX($C:$C)+1,$C:$C))>0))
- kagakusuki
- ベストアンサー率51% (2610/5101)
1つの店舗のデーターは、必ず1行だけしか存在せず、同一の店舗が異なる行に重複して現れる事が無いという条件が成り立っているのでしたら、その商品が1個以上となっている行が、何行あるのかをカウントすれば、自動的に取扱店舗の数と同じになると思います。 例えば、「商品A取扱店舗数」を求める場合には、次の様な関数とすれば良いのではないでしょうか? =COUNTIF($C:$C,">0")