人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

EXCELにおける集計の手法についてお聞かせください。

以下のような表があるとします。
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))
と、配列を使ったのですが、再計算を行った場合に時間がかかりました。

●質問者: タイシン@我孫子
●カテゴリ:コンピュータ 学習・教育
✍キーワード:20代 Excel いもの カウント セル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● castiron
●100ポイント ベストアンサー

=SUMPRODUCT((A1:A6="葛飾区")*(INT(C1:C6/10)=1))

"葛飾区":地名・地区名

INT(C1:C6/10)=1:1は10代,2に変えれば20代

どないだ

◎質問者からの返答

castiron様、ありがとうございます。

数学の授業で習った「行列の積」みたいなものをイメージすればよいのでしょうか。

私(達)の手法もそうなのですが、EXCELで配列を扱うと処理時間がかかりますか?

何はともあれ、SUMPRODUCT()を用いた方がスマートで解りやすいです。

ありがとうございます。


2 ● garyo
●20ポイント

この手の処理はEXCELはあまり得意ではないのでデータベース(例えばACCESS)の使用も検討されると良いとおもいます。

一度ACCESSにインポートしてクロス集計を行うのが一番早いと思います。

ACCESSにインポートする前にD列に「=INT(C列/10)」を追加しておくと良いでしょう。

A列を列、D列を行にクロス集計をかければ、1回で出てきます。

◎質問者からの返答

garyo様、ありがとうございます。

実は、ACCESSの食わず嫌いな上司からの相談事項を皆様にお願いした次第です。

私個人は、元表を加工せずACCESSに取り込み、

SELECT文を書くなかで加工処理を行いEXCELに書き出すのが大好きです。


3 ● orion-p
●20ポイント

sumproduct関数はいかがでしょうか?

◎質問者からの返答

orion9様、ありがとうございます。

castiron様も挙げられた、sumproduct()ですね。

まったく勉強していなかった関数なので、これより勉強いたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ