• 締切済み

エクセルで、検索条件と合計範囲の異なる“カウント”

職場で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関数?? すみません、どなたか、お知恵を下さい…。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答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)
回答No.4

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),""))))

回答No.3

>A社    count(C$2:C$4) count(D$2:D$4) count(E$2:E$4) のようにCOUNT関数で数えられるなら、0の部分は未入力か - などの文字が入っているのでしょうか? その場合、ピボットテーブルを使い、数値の個数で集計してやればよいです。 この問題に会わない可能性もありますが、一度やってみることをお勧めします

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 回答番号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)
回答No.1

 1つの店舗のデーターは、必ず1行だけしか存在せず、同一の店舗が異なる行に重複して現れる事が無いという条件が成り立っているのでしたら、その商品が1個以上となっている行が、何行あるのかをカウントすれば、自動的に取扱店舗の数と同じになると思います。  例えば、「商品A取扱店舗数」を求める場合には、次の様な関数とすれば良いのではないでしょうか? =COUNTIF($C:$C,">0")

関連するQ&A

専門家に質問してみよう