以下のような表があるとします。
A列:地区
B列:名前
C列:年齢
地区毎/年代毎の人数を集計したいものとします。
年代毎とは、年齢を10代未満,10代,20代,....,100以上の11通りに分けたものとします。
また、地区の種類については一定数のものとします(例えば東京23区のように)
『ピボットテーブルを使わず』に集計する手法をお聞かせください。
『作業用セル』もあまり使いたくありません。
当方の手法:
例えばある地区Aに対する40代の人数をカウントするのに、
=sum(if(表!A列=地区A,if(表!C列 >=40,1,0),0))
-sum(if(表!A列=地区A,if(表!C列 >=50,1,0),0))
と、配列を使ったのですが、再計算を行った場合に時間がかかりました。
=SUMPRODUCT((A1:A6="葛飾区")*(INT(C1:C6/10)=1))
"葛飾区":地名・地区名
INT(C1:C6/10)=1:1は10代,2に変えれば20代
どないだ
=SUMPRODUCT((A1:A6="葛飾区")*(INT(C1:C6/10)=1))
"葛飾区":地名・地区名
INT(C1:C6/10)=1:1は10代,2に変えれば20代
どないだ
castiron様、ありがとうございます。
数学の授業で習った「行列の積」みたいなものをイメージすればよいのでしょうか。
私(達)の手法もそうなのですが、EXCELで配列を扱うと処理時間がかかりますか?
何はともあれ、SUMPRODUCT()を用いた方がスマートで解りやすいです。
ありがとうございます。
この手の処理はEXCELはあまり得意ではないのでデータベース(例えばACCESS)の使用も検討されると良いとおもいます。
一度ACCESSにインポートしてクロス集計を行うのが一番早いと思います。
ACCESSにインポートする前にD列に「=INT(C列/10)」を追加しておくと良いでしょう。
A列を列、D列を行にクロス集計をかければ、1回で出てきます。
garyo様、ありがとうございます。
実は、ACCESSの食わず嫌いな上司からの相談事項を皆様にお願いした次第です。
私個人は、元表を加工せずACCESSに取り込み、
SELECT文を書くなかで加工処理を行いEXCELに書き出すのが大好きです。
sumproduct関数はいかがでしょうか?
orion9様、ありがとうございます。
castiron様も挙げられた、sumproduct()ですね。
まったく勉強していなかった関数なので、これより勉強いたします。
castiron様、ありがとうございます。
数学の授業で習った「行列の積」みたいなものをイメージすればよいのでしょうか。
私(達)の手法もそうなのですが、EXCELで配列を扱うと処理時間がかかりますか?
何はともあれ、SUMPRODUCT()を用いた方がスマートで解りやすいです。
ありがとうございます。