Excel講座

条件付き集計

本章で用いる実習用ファイル
ABCDE
1日付担当費目金額
212月1日藤本交通費5300
312月1日藤本接待費2300
412月1日藤本消耗品費1500
512月1日松浦交通費2400
612月1日松浦消耗品費850
712月2日藤本交通費2000
812月2日藤本接待費2500
912月2日藤本消耗品費1250
1012月2日松浦交通費1250
1112月2日松浦接待費870
1212月2日松浦消耗品費650
1312月3日藤本接待費1560
1412月3日藤本交通費2500
1512月3日藤本消耗品費1500
1612月3日松浦交通費750
1712月3日松浦接待費590
1812月4日藤本交通費5500
1912月4日藤本接待費1700
2012月4日藤本消耗品費1200
2112月4日松浦交通費950
2212月4日松浦接待費850
23
24担当金額合計金額平均件数
25藤本
26松浦
27
28費目金額合計金額平均件数
29交通費
30接待費
31消耗品費
32
33担当費目金額合計金額平均
34藤本交通費
35藤本接待費
36藤本消耗品費
37松浦交通費
38松浦接待費
39松浦消耗品費
40

経費リストの集計を担当者別、費目別に行いたい。

セルには以下のように名前を定義している。

担当
B2:B22
費目
C2:C22
金額
D2:D22

IF関数と配列の利用

スピル配列が使えることを前提とする(使えないときには静的配列を用いる)。

条件が一つのとき

まずは「担当」が「藤本」である「金額」の合計を求めよう。

「担当」が「藤本」である「金額」を抽出する。

担当:藤本である金額の配列
123456789101112131415161718192021
530023001500FALSEFALSE200025001250FALSEFALSEFALSE156025001500FALSEFALSE550017001200FALSEFALSE

IF(担当="藤本",金額)で担当が藤本であるときはそのときの金額が配列に格納される。担当が藤本でないときはFALSEが配列に格納される。

配列の中身を暫定的に書き出してみた
EFG
1
2=IF(担当=A25,金額)
32300
41500
5FALSE
6FALSE
72000

この数値と「FALSE」(数値集計関数からは無視される)からなる21個の配列を集計する。

SUM(担当:藤本である金額の配列)
12321
530023001500
24担当金額合計
25藤本=SUM(IF(担当=A25,金額))
26松浦

平均値(AVERAGE)も同様に導ける。

「担当者」が藤本であるデータの件数を数えるときには、「金額」を指定せず、単に適当な数値(例えば「1」)を指定すれば良い(「金額」に相当するデータがないケースでも対応可)。

24担当件数
25藤本=COUNT(IF(担当=A25,1))

条件が複数あるとき

  • 「担当」が「藤本」
  • 「費目」が「交通費」

であるときの金額の合計を求めたい。

IF(AND(担当=J2,費目=K2),金額)と書きたくなるが、これは使えない。

AND関数はSUM関数やAVERAGE関数と同様配列を集約してしまう。AND(担当=J2,費目=K2)は各行すべての条件がTRUEのときのみ、TRUEとなる。

今回は「担当=松浦」のときにFALSEとなるので、全体もFALSEとなってしまい、配列はすべて空白となる。

AND関数・OR関数が使えないのであれば、論理演算を用いる。AND関数相当は論理積「*」である。

担当:藤本かつ費目:交通費である金額の配列
123456789101112131415161718192021
5300FALSEFALSEFALSEFALSE2000FALSEFALSEFALSEFALSEFALSEFALSE2500FALSEFALSEFALSE55001700FALSEFALSEFALSE
配列の中身を暫定的に書き出してみた
EFG
1
2=IF((担当=A34)*(費目=B34),金額)
3FALSE
4FALSE
5FALSE
6FALSE
72000

この配列から合計を求める。

33担当費目金額合計
34藤本交通費=SUM(IF((担当=A34)*(費目=B34),金額))
35藤本接待費

-IFS関数

IF関数と配列を用いる上記方法は応用範囲が広く(COUNT、SUM, AVERAGE、MAX、MIN以外の関数でも使える)、強力だが、Excel初学者には大変分かりづらい。またスピル配列が使えないバージョンだと静的配列という扱いづらい配列を用いるため、余りお勧めできない。

そこでEXCELには条件を伴った集計を行う専用の関数が複数用意されている。

条件付きデータ個数:COUNTIFS(条件範囲1,条件1,条件範囲2,条件2,…)

条件範囲から条件に当てはまるデータの個数を返す。条件は複数指定ができる。

COUNTIFS関数の記述例
33担当費目件数
34藤本交通費=COUNTIFS(担当,A34,費目,B34)
35藤本接待費
  • 古いEXCEL解説ものにはCOUNTIF関数(末尾にSがつかない)が説明されていることがあるが、この関数は前時代の遺物なので、さっさと忘れよう。

大なり(>)小なり(<)を含む条件

COUNTIFS関数など条件付き集計関数の「条件」は論理式ではない。前例のように完全一致の時はあまり意識しないが、大なり(>)小なり(<)を含む条件を書くときの書式は正確に理解する必要がある。

「>, <, =」を条件に書くときにはダブルコーテーション(")で括る(ex.1000以上→">=1000")。

金額が1000円以上の件数
41件数
42=COUNTIFS(金額,">=1000")
43

比較対象(今回なら「1000」)がセルに書かれている場合は&演算子を用いて、セル参照と条件文を文字列結合する。

COUNTIFS関数でセル参照を用いる
441000
45
46件数
47=COUNTIFS(金額,">="&A44)
48
IF関数と配列の組み合わせ
441000
45
46件数
47=COUNT(IF(金額>=A44,1))
48

IF関数と配列を組み合わせた場合は上のようになる。

条件付き合計:SUMIFS(集計対象範囲,条件範囲1,条件1,条件範囲2,条件2,…)
条件付き平均:AVERAGEIFS(集計対象範囲,条件範囲1,条件1,条件範囲2,条件2,…)

条件範囲から条件に当てはまる数値の集計結果を返す。条件は複数指定ができる。

SUMIFS関数の記述例
33担当費目金額合計
34藤本交通費=SUMIFS(金額,担当,A34,費目,B34)
35藤本接待費
  • 古いEXCEL解説ものにはSUMIF関数、AVERAGEIF関数(末尾にSがつかない)が説明されていることがあるが、この関数は前時代の遺物なので、さっさと忘れよう。

書式はシンプルで便利だが、集計できる関数の種類が限られるのが難点。合計(SUM)・平均(AVERAGE)・最大(MAX)・最小(MIN)は求められるが、例えば分散(VAR.S:本実習では未学習だが、統計分野で用いる)は求められない。ということでIF関数と配列を組み合わせたやり方も理解しておく必要がある。

課題:グループ別集計(xlsx形式)

下記表の集計結果をすべて求めよ。IF関数と配列を組み合わせる方法と-IFS関数を用いる方法、両方で行え。

ABCDEF
1名前グループ血液型生年月日身長
2小片リサつばきファクトリーA1998/11/5159
3山岸理子つばきファクトリーB1998/11/24155
4藤井梨央こぶしファクトリーB1999/3/4150
5広瀬彩海こぶしファクトリーO1999/8/4156
6新沼希空つばきファクトリーO1999/10/20160.2
7谷本安美つばきファクトリーB1999/11/16157.5
8野村みな美こぶしファクトリーB2000/2/10155
9小川麗奈こぶしファクトリーA2000/3/27159
10岸本ゆめのつばきファクトリーB2000/4/1167
11浜浦彩乃こぶしファクトリーAB2000/4/26162
12田口夏実こぶしファクトリーA2000/7/21151
13浅倉樹々つばきファクトリーAB2000/9/3153
14小野瑞歩つばきファクトリーO2000/9/28162
15和田桜子こぶしファクトリーB2001/3/8163.5
16井上玲音こぶしファクトリーO2001/7/17161.5
17小野田紗栞つばきファクトリーO2001/12/17153.2
18秋山眞緒つばきファクトリーB2002/7/29160
19
20グループ人数平均身長
21こぶしファクトリー
22つばきファクトリー9158.5
23
24グループ血液型人数平均身長
25こぶしファクトリーA
26こぶしファクトリーB3156.2
27こぶしファクトリーO2158.8
28こぶしファクトリーAB1162.0
29つばきファクトリーA1159.0
30つばきファクトリーO4159.9
31つばきファクトリーB3158.5
32つばきファクトリーAB1153.0
33
34グループ身長人数
35こぶしファクトリー155
36つばきファクトリー未満2
37155cm未満の人数
38グループ生年月日人数平均身長
39こぶしファクトリー2000/1/1
39つばきファクトリー以降5159.0
412001/1/1以降のメンバーの
42人数平均身長