
※個人的には方法5、の作業列を作ってマスタ表からグルーピングした値を反映させ、それに対してSUMIF関数を組み合わせるのが、メンテナンスの面でよいと思います。
この記事で解決できる課題
- 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) ❌技術的な理由
- SUMIF関数の仕様制限:条件パラメータは単一の値または比較式のみを受け付ける
- OR関数の戻り値:TRUE/FALSEという論理値を返すため、SUMIF関数の条件文字列として機能しない
- 配列処理の必要性: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)動作原理の詳細解説
- 条件判定:
(A2:A7="りんご")→ 各行で TRUE(1) または FALSE(0) を返す- A2: TRUE → 1
- A3: TRUE → 1
- A4: FALSE → 0
- A5: TRUE → 1
- A6: TRUE → 1
- A7: FALSE → 0
- 論理和:
(条件1)+(条件2)→ いずれかが1なら1以上- 「+」演算子がOR条件を表現
- 両方の条件を満たす場合は2になるが、次のステップで調整
- 正規化:
>0→ 1以上を TRUE(1) に、0を FALSE(0) に変換- 重複カウントを防ぐ重要なステップ
- 乗算:
*B2:B7→ 条件を満たす行の売上のみを抽出- 1 × 売上 = 売上(条件を満たす)
- 0 × 売上 = 0(条件を満たさない)
- 合計: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 は不要です。
動作原理
- IF関数が各行で条件を評価
- 条件を満たす行は売上値を、満たさない行は0を配列として返す
- 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関数は、指定した条件に一致する行だけを抽出する動的配列関数です。
- 条件式
(A2:A7="りんご")+(A2:A7="バナナ")が各行を評価 - 条件を満たす行の売上データのみが抽出される
- 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)動的なグループ管理
テーブル機能を使用すると、グループマスタの追加・変更が自動的に反映されます。
- F2:G6範囲を選択
- 「挿入」→「テーブル」を選択
- テーブル名を「グループマスタ」に設定
- XLOOKUP数式を
=XLOOKUP(A2,グループマスタ[商品名],グループマスタ[グループ],"")に変更
メリット
- 非常に複雑な条件でも対応可能
- 条件の変更が極めて簡単(マスタテーブルを編集するだけ)
- すべてのExcelバージョンで動作
- 他のメンバーが理解しやすい
- 重複カウントの心配なし
- 数式が短く、メンテナンスが容易
- 監査証跡が残る(どの商品がどのグループか明確)
デメリット
- 作業列が必要(列の追加が制限される場合は不可)
- 初期設定に手間がかかる
- ファイルサイズが若干増加
- グループマスタの管理が必要
適用場面
- 10個以上の条件を扱う場合
- 条件が頻繁に変更される場合
- 複数の担当者がファイルを使用する場合
- 条件のロジックを明示的に管理したい場合
- 長期的なメンテナンス性を最優先する場合
実務での推奨:条件が複雑で変更が多い業務システムでは、この方法が最も実用的です。初期投資の手間を惜しまず、長期的な効率性を優先しましょう。
8. 方法6:重複除外の高度テクニック【上級者向け】
難易度:★★★ | 対応バージョン:全バージョン | 推奨度:★★☆☆☆
重複カウント問題とは
複数の条件を同時に満たすデータが、条件の数だけ重複してカウントされる問題です。
具体例で理解する
次のような企業データで「大阪府の企業」または「1970年以降設立の企業」の売上を集計する場合を考えます。
| A列:企業名 | B列:所在地 | C列:設立年 | D列:売上(百万円) |
|---|---|---|---|
| A社 | 大阪府 | 1975 | 200 |
| B社 | 大阪府 | 1965 | 340 |
| C社 | 東京都 | 1980 | 190 |
| D社 | 愛知県 | 1960 | 150 |
誤った計算(重複あり)
=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")計算の流れ
- 大阪府の企業の売上合計:200 + 340 = 540
- 1970年以降設立の企業の売上合計:200 + 190 = 390
- 両方の条件を満たす企業(重複分):200
- 最終結果: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をお使いの場合
- 第一選択:SUM+FILTER関数(方法4)
- 代替案:条件が頻繁に変わるなら作業列グループ化(方法5)
Excel 2019以前をお使いの場合
- 条件が10個以上:作業列グループ化(方法5)
- 条件が3-9個:SUMPRODUCT(方法2)
- 条件が2個のみ:SUMIF足し算(方法1)
複数人でファイルを共有する場合
- 全員が365/2021:SUM+FILTER(方法4)
- バージョンが混在:SUMPRODUCT(方法2)または作業列(方法5)
- 初心者が多い:作業列グループ化(方法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:条件に一致するデータ数を確認
=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:循環参照エラー
原因
数式が自分自身のセルまたは依存関係のあるセルを参照している
対処法
- 「数式」タブ →「エラーチェック」→「循環参照」で該当セルを特定
- 範囲指定から自分自身のセルを除外
- 作業列を別の場所に移動
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を目指しましょう。











コメント