2025/5/6

エクセルのSUMPRODUCT関数で複数条件を設定してカウントする方法と使い方【コピペ用テンプレートあり】

Thumbnail for エクセルのSUMPRODUCT関数で複数条件を設定してカウントする方法と使い方【コピペ用テンプレートあり】

はじめに

エクセルの SUMPRODUCT関数を使うと、条件を複数設定して、それに合致したデータ数をカウントできます。 その動作の仕組みと、条件設定をする方法を解説します。 バージョン2021、365より前のバージョンでも動作します。

下にテンプレート(セルデータサンプル)があるので、 コピペですぐに使用できます。

SUMPRODUCT関数とは

SUMPRODUCT関数には、以下の機能・特徴があります。

  • CSE(Ctrl + Shift + Enter)なしで 配列数式 が使用可能
  • 配列を渡し、その配列の要素同士を乗算し、それらの合計値を返す(本来の関数の機能)

CSEとは

CSEとは、計算式の中で 配列数式 を使用するときに必要なキー操作のことです。
Enter のみではなく、
Ctrl + Shift + Enter
を押す必要があります。

※ エクセル2021/365以降では、CSEなしで 配列数式 が使用できます(動的配列数式)。

特に上記の1つ目は、他のほとんどの関数にはない機能で、 何も考えず 配列数式 が使えるようになる例外的で特殊な関数 であると言えます。 動的配列数式 の存在しない2019以前のバージョンでは貴重な存在でした。 動的配列数式 が導入されたエクセル2021/365以降では、 SUM関数でも、SUMPRODUCT関数と同様の動作が可能になっています。

SUMPRODUCT関数の基本的な使い方

SUMPRODUCT関数の基本的な使い方は、以下の通りです。 ただし、条件を設定してカウントするだけであれば、 第2引数以降は不要なケースが多いです。

SUMPRODUCT関数

第1引数、第2引数の選択範囲間で、 それぞれの要素同士を個別に乗算した後、それらすべてを合計する。
具体的には以下の計算が行われる:

  1. 第1引数範囲の 1 番目の値第2引数範囲の 1 番目の値 を乗算する。
  2. 第1引数範囲の 2 番目の値第2引数範囲の 2 番目の値 を乗算する。
  3. ... これを選択範囲の最後の要素まで繰り返す。
  4. 1~3の値を合計する

第3引数, 第4引数, ... を追加することで、上記の1~3で乗算される値を増やすことができる(最大引数255)。
すべての引数の範囲の要素数は一致している必要がある。

例:SUMPRODUCT(B3:B7,C3:C7)

  • 第1引数 (B3:B7): 計算に使用するデータの範囲(必須)
  • 第2引数 (C3:C7): 計算に使用するデータの範囲(オプション)
  • 第3,4,...引数 : 計算に追加するデータの範囲(オプション)

引数の区切り記号で、演算を変えられる

SUMPRODUCT関数は、 配列数式 を使用しても、通常の計算式のようにCSEなしで動作するため、
あたかも 「引数を区切る記号を変えることで、乗算以外の演算に切り替えられる」 かのように振舞います。

  • (通常の使い方)
    • 要素同士を 乗算 して合計: SUMPRODUCT(B3:B7,C3:C7)
  • (配列数式使用)
    • 要素同士を 乗算 して合計: SUMPRODUCT(B3:B7*C3:C7)
    • 要素同士を 除算 して合計: SUMPRODUCT(B3:B7/C3:C7)
    • 要素同士を 加算 して合計: SUMPRODUCT(B3:B7+C3:C7)
    • 要素同士を 減算 して合計: SUMPRODUCT(B3:B7-C3:C7)

実際には、「引数の区切り記号を変更」しているのではなく「第1引数中の 配列数式 の演算内容を変更」しています。

条件付きカウントの実現方法

SUMPRODUCT関数が持つ2つの機能・特徴を組み合わることで、 以下の流れで条件を設定したデータ数のカウントが実現できます。

  • 計算1. 配列数式 で条件式を設定し、条件に合う要素のみ 1 (他は0)の配列を生成
  • 計算2. 1の配列を SUMPRODUCT関数に渡し、合計値を取得

SUMPRODUCT関数は、引数として複数の配列を受け取れますが、 条件付きでデータ数をカウントするだけであれば、第1引数のみでほぼ事足ります。

エクセルでの算出方法

以下の 全セルをコピー ボタンをクリックし、エクセルの A1 セルに貼り付けると、 F列に条件に合うデータ数(カウント数)が出力されます。

データを書き換える場合は、 A, B列のデータを書き換えてください。 設定条件を変更する場合は、F列の数式を書き換えて下さい。

ABCDEFG
1データ条件付きカウント
2XY
3a1(単一条件)X="a" : =SUMPRODUCT(--(A3:A8="a"))
4b1
5c2
6d2(複数条件)X="a" AND Y=3 : =SUMPRODUCT((A3:A8="a")*(B3:B8=3))
7a3
8b3X="a" OR X="b" : =SUMPRODUCT((A3:A8="a")+(A3:A8="b"))
9
10X="a" OR Y=3 : =SUMPRODUCT(--((A3:A8="a")+(B3:B8=3)>0))
11

計算の仕組み

本サンプル中では、以下の4パターンの条件設定でデータ数をカウントしています。

  • 単一条件
  • AND条件 : 単一条件を積 * で結合
  • OR条件(重複なし): 単一条件を和 + で結合
  • OR条件(重複あり): 単一条件を和 + で結合し、条件 >0 を追加

条件設定は 配列数式 内で行っているため、 配列数式 について理解していれば応用が利きます。

データ数をカウントするロジック自体は、次の2つで構成されています。

  • 計算1. 配列数式 で条件式を設定し、条件に合う要素のみ 1 (他は0)の配列を作成
  • 計算2. 1の配列を SUMPRODUCT関数に渡し、合計値を取得

以下では、各4つのパターンそれぞれの算出手順(主に計算1)について解説します。

単一条件のとき

  • 計算式: =SUMPRODUCT(--(A3:A8="a"))
  • 設定されている条件: A3:A8配列の中で a のもの

上記の条件を設定した 配列数式 を、SUMPRODUCT関数に渡しています。 分解すると次の通りです。

ABCDEFGHIJ
1データ
2XYA3:A8="a"--(A3:A8="a")SUMPRODUCT(--(A3:A8="a"))
3a1TRUE12
4b1FALSE0
5c2FALSE0
6d2FALSE0
7a3TRUE1
8b3FALSE0
9
10

論理値から数値への変換(-- または 1* の意味)

SUMPRODUCT関数は、受け取った配列要素が 論理値 の場合、正しく認識しません。
そのため受け渡す直前に、 論理値数値 に変換する必要があります。

比較演算(条件式)の結果は論理値となり、数式演算(四則演算)の結果は数値となります。
これを利用し、論理値を数値に変換する代表的な方法として以下の2つがあります:

  • 前に--を付ける : 1×(1)×-1\times (-1) \times の乗算を行う
  • 前に1* / 後に*1を付ける : 1×1\times の乗算を行う

論理値と数値の対応関係

論理値(TRUE / FALSE)は、以下の数値に対応します。

  • TRUE = 1
  • FALSE = 0

AND条件のとき

  • 計算式: =SUMPRODUCT((A3:A8="a")*(B3:B8=3))
  • 設定されている条件: A3:A8配列の中で a、かつ、B3:B8配列の中で 3 のもの

配列数式 上で、2つの条件を「かつ」で結ぶには、 乗算 を使います。 上記の条件を設定した 配列数式 を、SUMPRODUCT関数に渡しています。 分解すると次の通りです。

ABCDEFGHIJK
1データ
2XYA3:A8="a"B3:B8=3(A3:A8="a")*(B3:B8=3)SUMPRODUCT((A3:A8="a")*(B3:B8=3))
3a1TRUEFALSE01
4b1FALSEFALSE0
5c2FALSEFALSE0
6d2FALSEFALSE0
7a3TRUETRUE1
8b3FALSETRUE0
9
10

OR条件(重複なし)のとき

  • 計算式: =SUMPRODUCT((A3:A8="a")+(A3:A8="b"))
  • 設定されている条件: A3:A8配列の中で a、または、A3:A8配列の中で b のもの

配列数式 上で、重複のない2つの条件を「または」で結ぶには、 和算 を使います。 この例では、「A3:A8配列の中で a かつ b のもの」はないため、2つの条件に重複はありません。 上記の条件を設定した 配列数式 を、SUMPRODUCT関数に渡しています。 分解すると次の通りです。

ABCDEFGHIJK
1データ
2XYA3:A8="a"A3:A8="b"(A3:A8="a")+(A3:A8="b")SUMPRODUCT((A3:A8="a")+(A3:A8="b"))
3a1TRUEFALSE14
4b1FALSETRUE1
5c2FALSEFALSE0
6d2FALSEFALSE0
7a3TRUEFALSE1
8b3FALSETRUE1
9
10

OR条件(重複あり)のとき

  • 計算式: =SUMPRODUCT(--((A3:A8="a")+(B3:B8=3)>0))
  • 設定されている条件: A3:A8配列の中で a、または、B3:B8配列の中で 3 のもの

配列数式 上で、重複のある2つの条件を「または」で結ぶには、 和算 + >0 の論理演算 を使います。 この例では、「A3:A8配列の中で a かつ B3:B8配列の中で 3 のもの」があり、2つの条件に重複が存在します。 上記の条件を設定した 配列数式 を、SUMPRODUCT関数に渡しています。 分解すると次の通りです。

ABCDEFGHIJKLMNO
1データ
2XYA3:A8="a"B3:B8=3(A3:A8="a")+(B3:B8=3)(A3:A8="a")+(B3:B8=3)>0--((A3:A8="a")+(B3:B8=3)>0))SUMPRODUCT(--((A3:A8="a")+(B3:B8=3)>>0))
3a1TRUEFALSE1TRUE13
4b1FALSEFALSE0FALSE0
5c2FALSEFALSE0FALSE0
6d2FALSEFALSE0FALSE0
7a3TRUETRUE2TRUE1
8b3FALSETRUE1TRUE1
9
10