SUMIF関数で複数条件・OR条件を実現する完全ガイド

Excel SUMIF関数 複数条件 OR条件で計算
SUMIF関数で複数の条件で集計、ある程度のExcel経験があれば簡単にできそうなことですが意外にも2025年現在ではこの方法は存在しません。SUMIFS関数なら複数条件可能ですが、それはAND条件、つまり複数条件を同時に満たす組み合わせの合計であり、欲しい結果と異なります。この記事ではそんなSUMIF地獄のループにハマった方のためにOR条件で処理する方法を解説します。

※個人的には方法5、の作業列を作ってマスタ表からグルーピングした値を反映させ、それに対してSUMIF関数を組み合わせるのが、メンテナンスの面でよいと思います。

  1. この記事で解決できる課題
  2. 1. SUMIF関数とOR条件の基礎知識
    1. SUMIF関数とは
    2. OR条件とAND条件の違い
    3. SUMIFSの限界
  3. 2. なぜOR条件は標準機能で実現できないのか
    1. よくある誤解
    2. 技術的な理由
    3. 解決アプローチ
  4. 3. 方法1:複数SUMIF関数の足し算【最も簡単・初心者向け】
    1. 基本構文
    2. 実践例:果物売上の集計
      1. 数式
      2. 計算過程
    3. メリット
    4. デメリット
    5. 重複データの注意点
    6. 適用場面
  5. 4. 方法2:SUMPRODUCT関数【全バージョン対応・推奨】
    1. 基本構文
    2. 実践例
    3. 動作原理の詳細解説
    4. 配列定数による簡潔な記述
    5. 3つ以上の条件への拡張
    6. 複数列の条件組み合わせ
    7. メリット
    8. デメリット
    9. パフォーマンス最適化のヒント
    10. 適用場面
  6. 5. 方法3:SUM+IF配列数式【365/2021以降】
    1. 基本構文
    2. 実践例
    3. スピル機能とは
    4. 動作原理
    5. 重要な警告:バージョン互換性
    6. バージョン確認方法
    7. メリット
    8. デメリット
    9. 適用場面
  7. 6. 方法4:SUM+FILTER関数【最新・最推奨】
    1. 基本構文
    2. 実践例
    3. FILTER関数の仕組み
    4. エラーハンドリング
    5. 配列定数による簡潔な記述
    6. 複数列条件の例
    7. 条件に一致したデータの表示
    8. メリット
    9. デメリット
    10. 適用場面
  8. 7. 方法5:作業列とグループ化【複雑条件向け】
    1. アプローチの概要
    2. 実装手順
      1. ステップ1:グループマスタテーブルの作成
      2. ステップ2:作業列でグループを取得
      3. ステップ3:SUMIFでグループ別に集計
    3. 数値グループの例
    4. 複数グループの合計
    5. 動的なグループ管理
    6. メリット
    7. デメリット
    8. 適用場面
  9. 8. 方法6:重複除外の高度テクニック【上級者向け】
    1. 重複カウント問題とは
    2. 具体例で理解する
      1. 誤った計算(重複あり)
    3. 包除原理による解決
      1. 正しい数式
      2. 計算の流れ
    4. 3つの条件での包除原理
      1. 実装例
    5. 複雑度の増加
    6. メリット
    7. デメリット
    8. 適用場面
  10. 9. 各方法の比較と選び方
    1. 総合比較表
    2. 状況別おすすめフローチャート
      1. Excel 365/2021をお使いの場合
      2. Excel 2019以前をお使いの場合
      3. 複数人でファイルを共有する場合
    3. データ量別の推奨
  11. 10. 実務での応用パターン10選
    1. パターン1:期間指定のOR条件
    2. パターン2:数値範囲のOR条件
    3. パターン3:部分一致のOR条件
    4. パターン4:複数列のAND+OR複合条件
    5. パターン5:NOT条件の組み合わせ
    6. パターン6:前方一致・後方一致の組み合わせ
    7. パターン7:空白・非空白の条件
    8. パターン8:複数シートからの集計
    9. パターン9:動的な条件セル参照
    10. パターン10:曜日ベースの条件
  12. 11. トラブルシューティング
    1. エラー1:#VALUE! エラー
      1. 原因
      2. 対処法
    2. エラー2:結果が0または空白になる
      1. チェックポイント
      2. デバッグ方法
    3. エラー3:#CALC! エラー(FILTER関数)
      1. 原因
      2. 対処法
    4. エラー4:処理が遅い・フリーズする
      1. 原因
      2. パフォーマンス改善策
      3. その他の最適化
    5. エラー5:#NAME? エラー
      1. 原因
      2. 対処法
    6. エラー6:循環参照エラー
      1. 原因
      2. 対処法
  13. 12. よくある質問(FAQ)
    1. Q1. SUMIFSでOR条件は本当に実現できないのですか?
    2. Q2. 最も効率的な方法はどれですか?
    3. Q3. 条件が10個以上ある場合はどうすればよいですか?

この記事で解決できる課題

  • SUMIF関数でOR条件(「AまたはB」の複数条件)を実現したい
  • SUMIFSはAND条件のみで、OR条件に対応していない問題
  • 複数の商品カテゴリや部門の売上を効率的に集計したい
  • 重複カウントを避けながら正確な合計を求めたい
  • Excelのバージョンに応じた最適な方法を知りたい

1. SUMIF関数とOR条件の基礎知識

SUMIF関数とは

SUMIF関数は、特定の条件に一致するセルの値を合計するExcelの基本関数です。

=SUMIF(範囲, 条件, [合計範囲])
  • 範囲:条件を判定する対象セル範囲
  • 条件:抽出条件(文字列、数値、比較演算子など)
  • 合計範囲:実際に合計する値の範囲(省略時は「範囲」を合計)

OR条件とAND条件の違い

条件タイプ意味対応関数
AND条件すべての条件を同時に満たす「りんご」かつ「大阪府」SUMIFS
OR条件いずれかの条件を満たす「りんご」または「バナナ」標準では非対応

SUMIFSの限界

SUMIFS関数は複数条件を扱えますが、すべてAND条件として処理されます。OR条件には対応していません。

=SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2)
// すべての条件を満たすもののみ集計される

2. なぜOR条件は標準機能で実現できないのか

よくある誤解

初心者が陥りがちな間違いは、OR関数とSUMIF関数を直接組み合わせようとすることです。

// これはエラーになります
=SUMIF(A1:A10, OR("りんご","バナナ"), B1:B10) ❌

技術的な理由

  1. SUMIF関数の仕様制限:条件パラメータは単一の値または比較式のみを受け付ける
  2. OR関数の戻り値:TRUE/FALSEという論理値を返すため、SUMIF関数の条件文字列として機能しない
  3. 配列処理の必要性:OR条件を実現するには、各行を個別に評価する配列処理が必要

解決アプローチ

OR条件を実現するには、以下のいずれかのアプローチが必要です:

  • 複数のSUMIF関数を結合する
  • 配列数式で各行を評価する
  • 最新の動的配列関数を活用する
  • 補助的な作業列を使用する

3. 方法1:複数SUMIF関数の足し算【最も簡単・初心者向け】

難易度:★☆☆ | 対応バージョン:全バージョン | 推奨度:★★★☆☆

基本構文

=SUMIF(範囲,"条件1",合計範囲) + SUMIF(範囲,"条件2",合計範囲) + SUMIF(範囲,"条件3",合計範囲)

実践例:果物売上の集計

次のデータから「りんご」または「バナナ」の売上合計を求めます。

A列:商品名B列:売上金額
りんご12,000
バナナ8,000
みかん6,000
りんご10,000
バナナ9,000
ぶどう15,000

数式

=SUMIF(A2:A7,"りんご",B2:B7) + SUMIF(A2:A7,"バナナ",B2:B7)

”りんご” ”バナナ” を例えばC5セルやC6セルに入力すれば、セル指定できてその後、例えば”ぶどう”などと変えたい場合にメンテナンスしやすいです。

 

計算過程

  • りんごの合計:12,000 + 10,000 = 22,000
  • バナナの合計:8,000 + 9,000 = 17,000
  • 最終結果:22,000 + 17,000 = 39,000

メリット

  • 理解しやすく、Excel初心者でも使える
  • すべてのExcelバージョンで動作保証
  • 条件の追加・削除が容易
  • 個別にデバッグできる
  • 数式の各部分の結果を確認しやすい

デメリット

  • 条件が増えると数式が極端に長くなる
  • 10個以上の条件では管理が困難
  • 範囲の変更時に複数箇所を修正する必要がある
  • 重複データで二重カウントの危険性

重複データの注意点

警告:重複カウントの危険性

複数の条件を同時に満たすデータは、条件の数だけ重複してカウントされます。

:「大阪府」OR「1970年以降設立」という条件の場合、「大阪府かつ1970年以降設立」の企業は2回カウントされてしまいます。

この問題の解決方法は方法6で詳しく解説します。

 

適用場面

  • 条件が2〜3個程度の単純なケース
  • 重複データが存在しない確実な状況
  • とにかくシンプルな方法を優先したい場合
  • 他のメンバーが理解しやすい数式を作りたい場合

4. 方法2:SUMPRODUCT関数【全バージョン対応・推奨】

難易度:★★☆ | 対応バージョン:全バージョン | 推奨度:★★★★☆

基本構文

=SUMPRODUCT(((条件範囲=条件1)+(条件範囲=条件2)+(条件範囲=条件3)>0)*合計範囲)

実践例

=SUMPRODUCT(((A2:A7="りんご")+(A2:A7="バナナ")>0)*B2:B7)

動作原理の詳細解説

  1. 条件判定(A2:A7="りんご") → 各行で TRUE(1) または FALSE(0) を返す
    • A2: TRUE → 1
    • A3: TRUE → 1
    • A4: FALSE → 0
    • A5: TRUE → 1
    • A6: TRUE → 1
    • A7: FALSE → 0
  2. 論理和(条件1)+(条件2) → いずれかが1なら1以上
    • 「+」演算子がOR条件を表現
    • 両方の条件を満たす場合は2になるが、次のステップで調整
  3. 正規化>0 → 1以上を TRUE(1) に、0を FALSE(0) に変換
    • 重複カウントを防ぐ重要なステップ
  4. 乗算*B2:B7 → 条件を満たす行の売上のみを抽出
    • 1 × 売上 = 売上(条件を満たす)
    • 0 × 売上 = 0(条件を満たさない)
  5. 合計:SUMPRODUCT関数が全行の値を合計

配列定数による簡潔な記述

複数の条件を配列定数として指定することで、さらに簡潔に記述できます。

=SUMPRODUCT((COUNTIF(A2:A7,{"りんご","バナナ"})>0)*B2:B7)

3つ以上の条件への拡張

=SUMPRODUCT(((A2:A7="りんご")+(A2:A7="バナナ")+(A2:A7="みかん")+(A2:A7="ぶどう")>0)*B2:B7)

条件をいくらでも追加できます。

複数列の条件組み合わせ

「商品がりんごまたはバナナ」かつ「地域が東京または大阪」のような複雑な条件も可能です。

=SUMPRODUCT(((A2:A7="りんご")+(A2:A7="バナナ")>0)*((C2:C7="東京")+(C2:C7="大阪")>0)*B2:B7)

メリット

  • 1つの数式で完結し、管理が容易
  • Excel 2007以降のすべてのバージョンで動作
  • 重複カウントが自動的に回避される
  • 複雑な条件の組み合わせに対応
  • 範囲の変更が1箇所で済む
  • 条件の追加が比較的簡単

デメリット

  • 構文の理解に時間がかかる
  • エラー時のデバッグが困難
  • 大量データ(10万行以上)で処理速度が低下する可能性
  • 括弧の対応を間違えやすい

パフォーマンス最適化のヒント

  • 不要な空白行を範囲から除外する
  • テーブル機能で範囲を構造化参照にする
  • 揮発性関数(INDIRECT、OFFSETなど)との併用を避ける

適用場面

  • 古いExcelバージョンを使用している環境
  • 複数の条件を1つの数式で管理したい場合
  • 重複データが存在する可能性がある場合
  • メンテナンス性を重視する場合

5. 方法3:SUM+IF配列数式【365/2021以降】

難易度:★★☆ | 対応バージョン:Excel 365/2021以降 | 推奨度:★★★☆☆

基本構文

=SUM(IF((条件範囲=条件1)+(条件範囲=条件2),合計範囲,0))

実践例

=SUM(IF((A2:A7="りんご")+(A2:A7="バナナ"),B2:B7,0))

スピル機能とは

Excel 365および2021以降では、動的配列(スピル)機能により、配列数式を自然に記述できます。従来のような Ctrl+Shift+Enter は不要です。

動作原理

  1. IF関数が各行で条件を評価
  2. 条件を満たす行は売上値を、満たさない行は0を配列として返す
  3. SUM関数が配列全体を合計

重要な警告:バージョン互換性

この方法は非常に危険です。

  • Excel 2019以前では、最初の1行しか計算されず、誤った結果を返します
  • エラーメッセージが表示されないため、間違いに気づきにくい
  • ファイルを共有する環境では使用を避けるべき

 

バージョン確認方法

お使いのExcelがスピル機能に対応しているか確認してください:

  • Excel 365(Microsoft 365サブスクリプション版):対応
  • Excel 2021(永続ライセンス版):対応
  • Excel 2019以前:非対応

確認方法:空白セルに =SEQUENCE(3) と入力し、3つの数値(1、2、3)が縦に表示されれば対応済みです。

メリット

  • 基本的な関数の組み合わせで直感的
  • 構文が比較的理解しやすい
  • 重複カウントなし

デメリット

  • Excel 365/2021限定
  • 古いバージョンで誤動作(致命的)
  • エラーメッセージなし(発見困難)
  • ファイル共有環境では使用不可

適用場面

  • 個人使用かつExcel 365/2021確定の環境のみ
  • ファイルを他者と共有しない場合
  • FILTER関数が利用できない特殊な状況

推奨:この方法よりも次のFILTER関数を使う方法をお勧めします。

 

6. 方法4:SUM+FILTER関数【最新・最推奨】

難易度:★☆☆ | 対応バージョン:Excel 365/2021以降 | 推奨度:★★★★★

基本構文

=SUM(FILTER(合計範囲,(条件範囲=条件1)+(条件範囲=条件2)))

実践例

=SUM(FILTER(B2:B7,(A2:A7="りんご")+(A2:A7="バナナ")))

FILTER関数の仕組み

FILTER関数は、指定した条件に一致する行だけを抽出する動的配列関数です。

  1. 条件式 (A2:A7="りんご")+(A2:A7="バナナ") が各行を評価
  2. 条件を満たす行の売上データのみが抽出される
  3. SUM関数が抽出された値を合計

エラーハンドリング

条件に一致するデータが存在しない場合、FILTER関数はエラーを返します。これを回避するには:

=SUM(IFERROR(FILTER(B2:B7,(A2:A7="りんご")+(A2:A7="バナナ")),0))

配列定数による簡潔な記述

=SUM(FILTER(B2:B7,ISNUMBER(MATCH(A2:A7,{"りんご","バナナ"},0))))

複数列条件の例

「商品がりんごまたはバナナ」かつ「地域が東京または大阪」:

=SUM(FILTER(B2:B7,((A2:A7="りんご")+(A2:A7="バナナ")>0)*((C2:C7="東京")+(C2:C7="大阪")>0)))

条件に一致したデータの表示

合計だけでなく、抽出されたデータ自体を表示することも可能です:

=FILTER(A2:B7,(A2:A7="りんご")+(A2:A7="バナナ"))

この数式は、条件に一致する行のすべてのデータ(商品名と売上)をスピルして表示します。

メリット

  • 最も直感的で理解しやすい
  • 「抽出してから合計」という自然な思考プロセス
  • Microsoft公式が推奨する最新アプローチ
  • 処理速度が速い
  • エラーハンドリングが可能
  • 重複カウントなし
  • 抽出結果の確認が容易

デメリット

  • Excel 365/2021限定
  • 古いExcelではエラーが発生
  • ファイル共有時にバージョン確認が必要

適用場面

  • Excel 365または2021を使用している場合(最優先選択肢)
  • 直感的で分かりやすい数式を求める場合
  • 将来的なメンテナンス性を重視する場合
  • 抽出されたデータ自体も確認したい場合

推奨:Excel 365/2021をお使いの場合、この方法が最も優れた選択肢です。Microsoftも今後の標準として推奨しています。

 

7. 方法5:作業列とグループ化【複雑条件向け】

難易度:★★★ | 対応バージョン:全バージョン | 推奨度:★★★★☆

アプローチの概要

複雑なOR条件を「グループ」という概念で整理し、補助的な作業列を使用して解決する実務的な方法です。

実装手順

ステップ1:グループマスタテーブルの作成

まず、条件をグループ化するマスタテーブルを別シートまたは範囲に作成します。

F列:商品名G列:グループ
りんごフルーツA
バナナフルーツA
みかんフルーツB
ぶどうフルーツB
いちごフルーツA

ステップ2:作業列でグループを取得

元データに作業列(C列)を追加し、XLOOKUP関数またはVLOOKUP関数でグループを取得します。

A列:商品名B列:売上C列:グループ(作業列)
りんご12,000=XLOOKUP(A2,$F$2:$F$6,$G$2:$G$6,””)
バナナ8,000=XLOOKUP(A3,$F$2:$F$6,$G$2:$G$6,””)
みかん6,000=XLOOKUP(A4,$F$2:$F$6,$G$2:$G$6,””)

VLOOKUP関数の場合(Excel 2019以前):

=IFERROR(VLOOKUP(A2,$F$2:$G$6,2,FALSE),"")

ステップ3:SUMIFでグループ別に集計

作業列のグループを条件にして集計します。

=SUMIF(C2:C7,"フルーツA",B2:B7)

数値グループの例

グループを数値で管理する場合:

商品名グループ番号
りんご1
バナナ1
みかん2
ぶどう2
=SUMIF(C2:C7,1,B2:B7)

複数グループの合計

「グループ1」と「グループ3」の合計:

=SUMIF(C2:C7,1,B2:B7) + SUMIF(C2:C7,3,B2:B7)

動的なグループ管理

テーブル機能を使用すると、グループマスタの追加・変更が自動的に反映されます。

  1. F2:G6範囲を選択
  2. 「挿入」→「テーブル」を選択
  3. テーブル名を「グループマスタ」に設定
  4. XLOOKUP数式を =XLOOKUP(A2,グループマスタ[商品名],グループマスタ[グループ],"") に変更

メリット

  • 非常に複雑な条件でも対応可能
  • 条件の変更が極めて簡単(マスタテーブルを編集するだけ)
  • すべてのExcelバージョンで動作
  • 他のメンバーが理解しやすい
  • 重複カウントの心配なし
  • 数式が短く、メンテナンスが容易
  • 監査証跡が残る(どの商品がどのグループか明確)

デメリット

  • 作業列が必要(列の追加が制限される場合は不可)
  • 初期設定に手間がかかる
  • ファイルサイズが若干増加
  • グループマスタの管理が必要

適用場面

  • 10個以上の条件を扱う場合
  • 条件が頻繁に変更される場合
  • 複数の担当者がファイルを使用する場合
  • 条件のロジックを明示的に管理したい場合
  • 長期的なメンテナンス性を最優先する場合

実務での推奨:条件が複雑で変更が多い業務システムでは、この方法が最も実用的です。初期投資の手間を惜しまず、長期的な効率性を優先しましょう。

 

8. 方法6:重複除外の高度テクニック【上級者向け】

難易度:★★★ | 対応バージョン:全バージョン | 推奨度:★★☆☆☆

重複カウント問題とは

複数の条件を同時に満たすデータが、条件の数だけ重複してカウントされる問題です。

具体例で理解する

次のような企業データで「大阪府の企業」または「1970年以降設立の企業」の売上を集計する場合を考えます。

A列:企業名B列:所在地C列:設立年D列:売上(百万円)
A社大阪府1975200
B社大阪府1965340
C社東京都1980190
D社愛知県1960150

誤った計算(重複あり)

=SUMIF(B2:B5,"大阪府",D2:D5) + SUMIF(C2:C5,">=1970",D2:D5)
// 結果:200+340 + 200+190 = 930(誤り)

A社が2回カウントされています。

包除原理による解決

集合論の包除原理を応用し、重複分を差し引きます。

正しい数式

=SUMIF(B2:B5,"大阪府",D2:D5) + SUMIF(C2:C5,">=1970",D2:D5) - SUMIFS(D2:D5,B2:B5,"大阪府",C2:C5,">=1970")

計算の流れ

  1. 大阪府の企業の売上合計:200 + 340 = 540
  2. 1970年以降設立の企業の売上合計:200 + 190 = 390
  3. 両方の条件を満たす企業(重複分):200
  4. 最終結果:540 + 390 – 200 = 730

3つの条件での包除原理

条件A、B、Cの3つがある場合、公式は以下のようになります:

=A + B + C - (A∩B) - (A∩C) - (B∩C) + (A∩B∩C)

実装例

=SUMIF(範囲,"条件A",合計範囲) 
+ SUMIF(範囲,"条件B",合計範囲) 
+ SUMIF(範囲,"条件C",合計範囲)
- SUMIFS(合計範囲,範囲,"条件A",範囲,"条件B")
- SUMIFS(合計範囲,範囲,"条件A",範囲,"条件C")
- SUMIFS(合計範囲,範囲,"条件B",範囲,"条件C")
+ SUMIFS(合計範囲,範囲,"条件A",範囲,"条件B",範囲,"条件C")

複雑度の増加

条件が増えると、必要な項が指数関数的に増加します:

  • 2条件:3項(A、B、A∩B)
  • 3条件:7項
  • 4条件:15項
  • 5条件:31項

メリット

  • 全バージョン対応
  • 重複カウントを正確に回避
  • 数学的に厳密な解

デメリット

  • 数式が極めて長く複雑になる
  • 3条件以上では実用的でない
  • ミスが発生しやすい
  • デバッグが非常に困難
  • メンテナンスが困難

適用場面

  • 条件が2つまでで、重複データが確実に存在する場合
  • 他の方法が使用できない制約がある場合
  • 数学的な厳密性が求められる場合

推奨しません:条件が3つ以上の場合、または将来的に条件が増える可能性がある場合は、SUMPRODUCT、FILTER、または作業列の方法を使用してください。

 

9. 各方法の比較と選び方

総合比較表

方法難易度対応バージョン重複対応条件数上限処理速度総合推奨度
SUMIF足し算★☆☆全バージョン2-3個高速★★★☆☆
SUMPRODUCT★★☆全バージョン制限なし中速★★★★☆
SUM+IF★★☆365/2021+制限なし高速★★☆☆☆
SUM+FILTER★☆☆365/2021+制限なし最速★★★★★
作業列グループ化★★★全バージョン制限なし高速★★★★☆
包除原理★★★全バージョン2個まで高速★★☆☆☆

状況別おすすめフローチャート

Excel 365/2021をお使いの場合

  1. 第一選択:SUM+FILTER関数(方法4)
  2. 代替案:条件が頻繁に変わるなら作業列グループ化(方法5)

Excel 2019以前をお使いの場合

  1. 条件が10個以上:作業列グループ化(方法5)
  2. 条件が3-9個:SUMPRODUCT(方法2)
  3. 条件が2個のみ:SUMIF足し算(方法1)

複数人でファイルを共有する場合

  1. 全員が365/2021:SUM+FILTER(方法4)
  2. バージョンが混在:SUMPRODUCT(方法2)または作業列(方法5)
  3. 初心者が多い:作業列グループ化(方法5)

データ量別の推奨

データ行数推奨方法理由
100行未満すべての方法OKパフォーマンス差は体感できない
100-10,000行FILTER、SUMPRODUCT、作業列バランスが良い
10,000-100,000行FILTER、作業列処理速度を重視
100,000行以上作業列(必須)他の方法では遅延が発生

10. 実務での応用パターン10選

パターン1:期間指定のOR条件

課題:「2024年1月」または「2024年12月」の売上合計を求める

// 方法1:SUMIF足し算
=SUMIFS(売上,日付,">=2024/1/1",日付,"<=2024/1/31") + SUMIFS(売上,日付,">=2024/12/1",日付,"<=2024/12/31") // 方法2:SUMPRODUCT =SUMPRODUCT(((MONTH(日付)=1)+(MONTH(日付)=12)>0)*(YEAR(日付)=2024)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,((MONTH(日付)=1)+(MONTH(日付)=12))*(YEAR(日付)=2024)))

パターン2:数値範囲のOR条件

課題:「100万円未満」または「500万円超」の売上データを集計

// 方法1:SUMIF足し算
=SUMIF(売上,"<1000000") + SUMIF(売上,">5000000")

// 方法2:SUMPRODUCT
=SUMPRODUCT(((売上<1000000)+(売上>5000000)>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,(売上<1000000)+(売上>5000000)))

パターン3:部分一致のOR条件

課題:商品名に「りんご」または「apple」が含まれる売上合計

// 方法1:SUMIF足し算
=SUMIF(商品名,"*りんご*",売上) + SUMIF(商品名,"*apple*",売上) - SUMIFS(売上,商品名,"*りんご*",商品名,"*apple*")

// 方法2:SUMPRODUCT
=SUMPRODUCT((ISNUMBER(SEARCH("りんご",商品名))+ISNUMBER(SEARCH("apple",商品名))>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,ISNUMBER(SEARCH("りんご",商品名))+ISNUMBER(SEARCH("apple",商品名))))

パターン4:複数列のAND+OR複合条件

課題:「(商品Aかつ地域1)または(商品Bかつ地域2)」の売上合計

// 方法1:SUMIFS足し算
=SUMIFS(売上,商品,"商品A",地域,"地域1") + SUMIFS(売上,商品,"商品B",地域,"地域2")

// 方法2:SUMPRODUCT
=SUMPRODUCT((((商品="商品A")*(地域="地域1"))+((商品="商品B")*(地域="地域2"))>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,((商品="商品A")*(地域="地域1"))+((商品="商品B")*(地域="地域2"))))

パターン5:NOT条件の組み合わせ

課題:「商品がりんごでもバナナでもない」データの集計

// 方法1:SUMIF(全体から引く)
=SUM(売上) - SUMIF(商品,"りんご",売上) - SUMIF(商品,"バナナ",売上)

// 方法2:SUMPRODUCT
=SUMPRODUCT(((商品<>"りんご")*(商品<>"バナナ"))*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,(商品<>"りんご")*(商品<>"バナナ")))

パターン6:前方一致・後方一致の組み合わせ

課題:商品コードが「A」で始まるか「-X」で終わるもの

// 方法1:SUMIF足し算
=SUMIF(商品コード,"A*",売上) + SUMIF(商品コード,"*-X",売上) - SUMIFS(売上,商品コード,"A*",商品コード,"*-X")

// 方法2:SUMPRODUCT
=SUMPRODUCT(((LEFT(商品コード,1)="A")+(RIGHT(商品コード,2)="-X")>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,(LEFT(商品コード,1)="A")+(RIGHT(商品コード,2)="-X")))

パターン7:空白・非空白の条件

課題:「備考欄が空白」または「担当者が未設定」のデータ

// 方法1:SUMIF足し算
=SUMIF(備考,"",売上) + SUMIF(担当者,"",売上)

// 方法2:SUMPRODUCT
=SUMPRODUCT(((備考="")+(担当者="")>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,(備考="")+(担当者="")))

パターン8:複数シートからの集計

課題:Sheet1とSheet2の「商品A」の売上合計

=SUMIF(Sheet1!A:A,"商品A",Sheet1!B:B) + SUMIF(Sheet2!A:A,"商品A",Sheet2!B:B)

パターン9:動的な条件セル参照

課題:セルE1とE2に入力された商品の売上合計

// 方法1:SUMIF足し算
=SUMIF(商品,E1,売上) + SUMIF(商品,E2,売上)

// 方法2:SUMPRODUCT
=SUMPRODUCT(((商品=E1)+(商品=E2)>0)*売上)

// 方法3:FILTER(365/2021)
=SUM(FILTER(売上,(商品=E1)+(商品=E2)))

パターン10:曜日ベースの条件

課題:「土曜日」または「日曜日」の売上合計

// 方法:SUMPRODUCT
=SUMPRODUCT(((WEEKDAY(日付)=1)+(WEEKDAY(日付)=7)>0)*売上)

// 方法:FILTER(365/2021)
=SUM(FILTER(売上,(WEEKDAY(日付)=1)+(WEEKDAY(日付)=7)))

※WEEKDAY関数:1=日曜日、7=土曜日

11. トラブルシューティング

エラー1:#VALUE! エラー

原因

  • 条件範囲と合計範囲のサイズが一致していない
  • データ型の不一致(文字列と数値の混在)
  • 古いExcelでスピル機能の数式を使用
  • SUMPRODUCT内での配列サイズ不一致

対処法

// 範囲サイズの確認
=ROWS(A2:A10)  // 条件範囲の行数
=ROWS(B2:B10)  // 合計範囲の行数
// これらが一致しているか確認

// データ型の統一
=SUMPRODUCT(((TEXT(A2:A10,"@")="りんご")+(TEXT(A2:A10,"@")="バナナ")>0)*B2:B10)

// バージョン確認
// セルに =SEQUENCE(3) と入力して、3つの数値が表示されるか確認

エラー2:結果が0または空白になる

チェックポイント

  1. 条件の記述ミス
    • 余分なスペースの有無
    • 全角・半角の違い
    • 大文字・小文字の違い
  2. 範囲指定のミス
    • ヘッダー行を含んでいる
    • 空白行が含まれている
    • 絶対参照($記号)の付け忘れ

デバッグ方法

// ステップ1:条件に一致するデータ数を確認
=COUNTIF(A2:A10,"りんご")  // 0なら条件が一致していない

// ステップ2:個別のSUMIF関数を確認
=SUMIF(A2:A10,"りんご",B2:B10)  // これだけで動作するか

// ステップ3:条件範囲の内容を確認
=UNIQUE(A2:A10)  // 実際にどんな値が入っているか(365/2021)

// ステップ4:前後のスペースを除去
=SUMIF(A2:A10,TRIM("りんご"),B2:B10)

エラー3:#CALC! エラー(FILTER関数)

原因

FILTER関数で条件に一致するデータが1件も存在しない場合に発生します。

対処法

// IFERROR関数でラップする
=SUM(IFERROR(FILTER(B2:B10,(A2:A10="りんご")+(A2:A10="バナナ")),0))

// または、デフォルト値を指定(Excel 365最新版)
=SUM(FILTER(B2:B10,(A2:A10="りんご")+(A2:A10="バナナ"),0))

エラー4:処理が遅い・フリーズする

原因

  • 大量データ(10万行以上)でSUMPRODUCTを使用
  • 揮発性関数(INDIRECT、OFFSET、TODAY)との組み合わせ
  • 不要な空白行を含む広大な範囲指定

パフォーマンス改善策

// 悪い例:列全体を指定
=SUMPRODUCT(((A:A="りんご")+(A:A="バナナ")>0)*B:B)  ❌

// 良い例:必要な範囲のみ指定
=SUMPRODUCT(((A2:A10000="りんご")+(A2:A10000="バナナ")>0)*B2:B10000)  ✅

// さらに良い例:テーブル機能を使用
=SUMPRODUCT(((売上テーブル[商品]="りんご")+(売上テーブル[商品]="バナナ")>0)*売上テーブル[金額])  ✅✅

その他の最適化

  • 計算方法を「自動」から「手動」に変更(大量データの場合)
  • 作業列の使用を検討(方法5)
  • ピボットテーブルへの移行を検討
  • Power Queryでのデータ処理を検討

エラー5:#NAME? エラー

原因

  • 関数名のスペルミス
  • お使いのExcelバージョンで未対応の関数(FILTER、XLOOKUPなど)
  • 名前付き範囲の未定義

対処法

// FILTERが使えない場合はSUMPRODUCTに変更
=SUMPRODUCT(((A2:A10="りんご")+(A2:A10="バナナ")>0)*B2:B10)

// XLOOKUPが使えない場合はVLOOKUPに変更
=IFERROR(VLOOKUP(A2,マスタ範囲,2,FALSE),"")

エラー6:循環参照エラー

原因

数式が自分自身のセルまたは依存関係のあるセルを参照している

対処法

  1. 「数式」タブ →「エラーチェック」→「循環参照」で該当セルを特定
  2. 範囲指定から自分自身のセルを除外
  3. 作業列を別の場所に移動

12. よくある質問(FAQ)

Q1. SUMIFSでOR条件は本当に実現できないのですか?

A. はい、SUMIFSは仕様上、複数条件をすべてAND条件として処理します。OR条件を実現するには、この記事で紹介した代替手法を使用する必要があります。

Q2. 最も効率的な方法はどれですか?

A. Excel 365/2021をお使いの場合はSUM+FILTER関数(方法4)が最も効率的かつ直感的です。古いバージョンの場合は、データ量に応じてSUMPRODUCT関数(方法2)または作業列グループ化(方法5)がおすすめです。

Q3. 条件が10個以上ある場合はどうすればよいですか?

A. 作業列とグループ化(方法5)が最適です。グループマスタテーブルで条件を管理することで、数式はシンプルなまま、いくらでも条件を追加できます。

 

以上、SUMIF関数を使いこなして業務効率UPを目指しましょう。

著者
古見遊 正

流通業で働きながら、2005年からWindowsを使い続けている80年代生まれのサラリーマン。ExcelとPowerPointを極め、仕事の効率化を追求中。苦手だったWordも克服中!Excelを使いこなせるだけで周囲から『神扱い』されるけれど、そのせいで『システムに詳しい人』だと勘違いされがち。でも、それが新しい知識を得るきっかけになった。そんな経験を活かして、Excel・PowerPoint・Word・Windowsの時短ワザ&仕事術を発信中!

古見遊 正をフォローする
Excel関数

コメント

タイトルとURLをコピーしました