Excelを使用して金額などの集計を行う際
複数の条件にマッチする行の合計値を算出するやり方。
Excelマクロを使わず、計算式のみで算出する方法です。
ここ数日、Excelで資料を作る機会があったので
備忘を含めてメモを書いておく。
※※※※※※※※※※※※※※※※※※※※
以降の表に関して閲覧環境により全てが
表示されない可能性があります。
その場合、お手間をかけますが、横画面表示
又はPC環境での閲覧をお願いします。
※※※※※※※※※※※※※※※※※※※※
集計対象となる表
| – | A | B | C | D | E | 
|---|---|---|---|---|---|
| – | 品目 | ジャンル | 2015/01 | 2015/02 | 2015/03 | 
| 3 | パソコン | 家電 | 200,000 | 20,000 | 80,000 | 
| 4 | テレビ | 家電 | 220,000 | 270,000 | 20,000 | 
| 5 | HDD | PC用品 | 50,000 | 80,000 | 10,000 | 
| 6 | 洗濯機 | 家電 | 300,000 | 18,000 | 250,000 | 
| 7 | iPad | PC用品 | 100,000 | 50,000 | 220,000 | 
○ジャンルが「家電」である品目の2月~3月分の合計を
 求める方法としては、以下の3つが考えられます。
  1. IF関数、SUM関数を使用して行う
  2. SUMIFS関数を使用して行う
  3. SUMPRODUCT関数を使用して行う
この3つのうち、一番スマートに計算できるのは 3番 となります。
やり方を説明します。
SUMPRODUCT 関数
 書式 : SUMPRODUCT(配列1,配列2,配列3,・・・)
 説明 : 範囲または配列の対応する要素の積を
       計算し、その計算結果の合計を返します。
       ※ Excelの関数説明より
この関数のいいところは引数(配列1,配列2 など)に対して
計算式を書くことができることと関数の説明にもある通り
配列同士の論理積で計算できることにあります。
※ 論理積とは 中学/高校の数学で学んだ論理演算で
   A AND B : A と B が両方成り立つ
   A OR B : A と Bの少なくとも1つが成り立つ
  などです
 
よく使われる SUM関数、COUNT関数などの場合
合計範囲や検索範囲のように、あくまで
Excelの範囲を指定することしかできません。
SUM関数
 書式 : SUM(数値1,数値2,・・・)
       SUM(セルの範囲)
       ※ セルの範囲 → C3:C6 のように指定
         (C3セルからC6セルまでの意味)
 説明 : セル範囲に含まれる数値を全て合計する。
       ※ Excelの関数説明より
COUNT関数
 書式 : COUNT(数値1,数値2,・・・)
       COUNT(セルの範囲)
       ※ セルの範囲 → C3:C6 のように指定
         (C3セルからC6セルまでの意味)
 説明 : 範囲内の数値が含まれるセル(範囲)の個数を返す。
       ※ Excelの関数説明より
 
話を戻して、実際の記載方法ですが
まず、各条件を計算式化します。
 1.ジャンルが「家電」である → IF(B3:B7=”家電”)
 2.期限が「2015/02」である → IF(C2:E2>=201502)
 3.合計値検索範囲 → C3:E7
※ 3の条件に関しては、1と2の条件を満たすもの全てが対象と
  なるため、論理積ではなく論理和となります。
SUMPRODUCT 式に当てはめると、このようになります。
 SUMPRODUCT(([1の条件] AND [2の条件]) OR [3の条件])
→SUMPRODUCT((B3:B7=”家電”)*(C2:E2>=201502),(C3:E7))
この計算式が展開されると
| – | A | B | C | D | E | F | – | 
|---|---|---|---|---|---|---|---|
| – | 品目 | ジャンル | 2015/01 | 2015/02 | 2015/03 | 展開式 | 計 | 
| 3 | パソコン | 家電 | 200,000 | 20,000 | 80,000 | ※1 | 100,000 | 
| 4 | テレビ | 家電 | 220,000 | 270,000 | 20,000 | ※2 | 290,000 | 
| 5 | HDD | PC用品 | 50,000 | 80,000 | 10,000 | ※3 | 0 | 
| 6 | 洗濯機 | 家電 | 300,000 | 18,000 | 250,000 | ※4 | 268,000 | 
| 7 | iPad | PC用品 | 100,000 | 50,000 | 220,000 | ※5 | 0 | 
| – | – | – | – | – | – | – | 658,000 | 
SUMPRODUCT(([1の条件] AND [2の条件]) OR [3の条件])
となるので
※1:
 ((TRUEFALSE)200,000)+(TRUETRUE)20,000)+
 (TRUETRUE)80,000))
 =(10200000)+(1120000)+(1180000) = 100000
※2:
 ((TRUEFALSE)220,000)+(TRUETRUE)270,000)+
 (TRUETRUE)20,000))
 =(10220000)+(11270000)+(1120000) = 290000
※3:
 ((FALSEFALSE)50,000)+(FALSETRUE)80,000)+
 (FALSETRUE)10,000))
 =(0050000)+(0180000)+(0110000) = 0
※4:
 ((TRUEFALSE)200,000)+(TRUETRUE)20,000)+
 (TRUETRUE)80,000))
 =(10300000)+(1118000)+(11250000) = 268000
※5:
 ((FALSEFALSE)200,000)+(FALSETRUE)20,000)+
 (FALSETRUE)80,000))
 =(00100000)+(0150000)+(01220000) = 0
100000(※1)+290000(※2)+0(※3)+268000(※4)+0(※5)
=658000
となります。
関数の引数を増やすことで、条件を容易に増やすことが
できるため、複数条件で集計を行いときなどに便利です。
 
以下、2つの方法に関しても簡単に説明します。
 1. IF関数、SUM関数を使用して行う
 2. SUMIFS関数を使用して行う
 
1.IF関数、SUM関数を使用して行う
 IF関数を使用して行う場合、条件判定しか行えないため
 作業列を設ける必要があります。
 E列の後ろに、C/D/E それぞれに対応するF/G/H列を設ける。
 F3セルに、以下条件文を入力し、F3~H7にコピーする。
  IF($B3=”家電”,IF(C3>=201502,”1″,”0″),”0″)
 さらにI列を設けて、I4~I7セルにコピーを行う
 行単位での合計値を算出する。
  SUM(IF($F3=”1″,$F3,0)+SUM(IF($G3=”1″,$G3,0)+
  SUM(IF($H3=”1″,$H3,0)
 I列の合計値を求める。
  SUM(I3:I7)
| – | C | D | E | F | G | H | I | 
|---|---|---|---|---|---|---|---|
| – | 2015/01 | 2015/02 | 2015/03 | C列用条件 | D列用条件 | E列用条件 | 行計 | 
| 3 | 200,000 | 20,000 | 80,000 | 0 | 1 | 1 | 100,000 | 
| 4 | 220,000 | 270,000 | 20,000 | 0 | 1 | 1 | 290,000 | 
| 5 | 50,000 | 80,000 | 10,000 | 0 | 0 | 0 | 0 | 
| 6 | 300,000 | 18,000 | 250,000 | 0 | 1 | 1 | 268,000 | 
| 7 | 100,000 | 50,000 | 220,000 | 0 | 0 | 0 | 0 | 
| – | – | – | – | – | – | – | 658,000 | 
2. SUMIFS関数を使用して行う
SUMIFS関数
 書式 : SUMIFS(合計範囲,条件範囲1,条件1,条件範囲2,条件2,・・・)
 説明 : 特定の複数条件に一致する数値の合計を求めます。
       ※ Excelの関数説明より
似た関数ではSUMIFというのもあります
SUMIF関数
 書式 : SUMIF(範囲,検索条件,合計範囲)
 説明 : 指定された検索条件に一致するセルの値を合計します。
       ※ Excelの関数説明より
 SUMIFS関数を使用する場合、関数説明にもあるように
 複数条件を指定することができます。
 ただし、合計範囲自体は複数列(行)指定を行うことができません。
 また、合計範囲と条件範囲指定は合わせる(行と行、列と列)必要も
 あります。
 そのため、合計したい列を個別に指定する必要がでてきます。
 ですので、合計値を求める際は
  1.201501 の家電の合計:下表(※1)
  2.201502 の家電の合計:下表(※2)
  3.201503 の家電の合計:下表(※3)
 の合算を求めることとなります。
 ただし、2月~3月分という指定があるため
 1 の合計値は計算せずとも 0 となります。
| – | A | B | C | D | E | – | 
|---|---|---|---|---|---|---|
| – | 品目 | ジャンル | 2015/01 | 2015/02 | 2015/03 | – | 
| 3 | パソコン | 家電 | 200,000 | 20,000 | 80,000 | – | 
| 4 | テレビ | 家電 | 220,000 | 270,000 | 20,000 | – | 
| 5 | HDD | PC用品 | 50,000 | 80,000 | 10,000 | – | 
| 6 | 洗濯機 | 家電 | 300,000 | 18,000 | 250,000 | – | 
| 7 | iPad | PC用品 | 100,000 | 50,000 | 220,000 | – | 
| – | – | – | ※1 | ※2 | ※3 | – | 
| – | – | – | 0 | 308,000 | 350,000 | 658,000 | 
※2.201502 の家電の合計
 SUMIFS(D3:D7,B3:B7,”家電”) 又は SUMIF(B3:B7,”家電”,D3:D7)
  20,000 + 270,000 + 18,000 = 308,000
※3.201503 の家電の合計
 SUMIFS(E3:E7,B3:B7,”家電”) 又は SUMIF(B3:B7,”家電”,E3:E7)
  80,000 + 20,000 + 250,000 = 350,000
 ※ 今回のケースでは、SUMIFSで指定可能な列の条件は
  「ジャンル」のみであるため、SUMIF関数を使用する
  でも問題なしです
まとめ
以下、3つの方法を紹介しました。
  1. IF関数、SUM関数を使用して行う
  2. SUMIFS関数を使用して行う
  3. SUMPRODUCT関数を使用して行う
下の方法にいくにつれ、計算式自体は複雑になりますが
汎用性は大きくなっていきます。
簡単に用途をまとめると
| 方法 | 表の大きさ | 条件数 | 集計対象 | 
|---|---|---|---|
| 1 | 小さい | 1つ以下 | 単一行/列 | 
| 2 | 大きい | 1つ以上 | 単一行/列 | 
| 3 | 大きい | 1つ以上 | 複数行/列 | 
計算式にて合計値を算出する際の用途にあわせて
使い分ければ大量な表の合計値の計算も簡単にかつ
正確に行うことができることとなります。
参考になれば幸いです。
