Excel の SUMIFS 関数は、複数の条件を AND でつなぎ、一致した行の合計を返す関数です。SUMIF(条件 1 つ)の上位互換にあたり、業務で売上集計や経費集計をするなら必修の関数です。
本記事では、Microsoft Excel 2024(永続版 / Build 19929.0)の実機で全数式を検証し、基本構文・複数条件・日付期間・ワイルドカード・別シート参照に加え、Excel 2024 で見落としやすい 4 つの罠までまとめて解説します。
長くなるので、目次で必要な章へ飛んでください。「とりあえず動かしたい」方は H2-2、「ハマっている」方は H2-9 の罠 4 つを直接ご覧ください。
【30 秒で分かる】SUMIFS 関数とは ― 複数条件で合計する関数
SUMIFS 関数は、複数の条件をすべて満たす行を抽出して、その金額(や数量)を合計する関数です。たとえば「東京支店の、りんご商品の、4 月以降の売上合計」のように、条件を増やしてピンポイント集計ができます。
- 条件は AND(すべて満たす)でつながる
- 条件は最大 127 個まで指定できる
- SUMIF(条件 1 つ)の上位互換
- Excel 2007 以降に追加。Excel 2024 / Microsoft 365 では 条件に配列を渡すとスピル展開するようになった
本記事のサンプルデータと結果はすべて、Excel 2024(Build 19929.0、日本語版)の実機で検算しています。各数式の右側に書いてある数値は実機での結果です。
サンプルデータ(A〜G 列、行 2〜11)
本記事の数式と結果はすべて、次のサンプルデータを前提にしています。手元で同じ結果を再現したい場合は、新規ブックの A〜G 列に以下のとおりに入力してください。
| 行 | A: 日付 | B: 支店 | C: 商品 | D: 金額 | F: メモ | G: 金額(文字列) |
|---|---|---|---|---|---|---|
| 2 | 2026/4/1 | 東京 | りんご | 12,000 | 限定A型 | “12000” |
| 3 | 2026/4/2 | 大阪 | みかん | 8,000 | 通常?A | “8000” |
| 4 | 2026/4/3 | 東京 | ぶどう | 15,000 | ぶどう*限定 | “15000” |
| 5 | 2026/4/4 | 名古屋 | りんご | 9,000 | りんご限定 | “9000” |
| 6 | 2026/4/15 | 東京 | みかん | 7,000 | 通常XA | “7000” |
| 7 | 2026/4/20 | 大阪 | りんご | 11,000 | 限定B型 | “11000” |
| 8 | 2026/5/1 | 東京 | ぶどう | 14,000 | 通常YA | “14000” |
| 9 | 2026/5/2 | 名古屋 | みかん | 6,500 | 限定?C | “6500” |
| 10 | ― | ― | ― | 5,000 | ぶどう種類限定 | ― |
| 11 | ― | ― | ― | 3,000 | ぶどう特売限定 | ― |
- 列 E は使いません(撮影上の余白として空けています)
- 行 10〜11 は Trap 2(ワイルドカード未エスケープ)専用の追加行。基本例は行 2〜9(D2:D9)だけで完結します
- 列 G の
"12000"等のクォートは 値そのものが文字列として保存されていることを示します(NumberFormat=”@” を先に設定してから入力)。値の引用符は表記上のものでセルには含まれません。Trap 3 はこの「値の型」状態でないと再現しません - 列 A の日付は
yyyy/m/d書式、列 D は#,##0書式で表示しています
SUMIFS 関数の基本構文 ― 合計範囲が最初、条件は後ろ
基本構文は次のとおりです。
=SUMIFS(合計対象範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, ...)大事なポイントは 第 1 引数が「合計したい数値の範囲(合計対象範囲)」であること。SUMIF とはこの順序が違うので、後で混同しないよう先に押さえておきましょう。
サンプルデータのうち基本 8 行(行 2〜9)に対して「東京支店の合計」を求める最も簡単な式は次のとおり。
=SUMIFS(D2:D9, B2:B9, "東京") → 48000
=SUMIFS(D2:D9,B2:B9,"東京")、結果セルは 48000。条件範囲(B2:B9)と合計対象範囲(D2:D9)は 同じ行数・同じ起点 でなければなりません。ここがずれると、後述する Trap 1 のように #VALUE! ではなく「違う数値が静かに返る」状態になり、誤集計に気づかない事故が起きます。
SUMIF との違い ― 引数順序が逆(最頻誤り 1 位)
SUMIFS と SUMIF を取り違えるミスは、Excel 関数のなかでも特に多い失敗です。違いは引数の順序です。
SUMIF : =SUMIF(条件範囲, 条件, 合計範囲)
SUMIFS: =SUMIFS(合計範囲, 条件範囲, 条件, ...) ← 合計範囲が「先頭」| 関数 | 第 1 引数 | 条件数 | 配列スピル (Excel 2024) |
|---|---|---|---|
| SUMIF | 条件範囲 | 1 つ | ○(criteria に配列を渡すとスピル) |
| SUMIFS | 合計範囲 | 1〜127 | ○(criteria1 などに配列を渡すとスピル) |
「SUMIF はスピルしない」と書いている古い解説が多いのですが、これは Excel 2024 / Microsoft 365 では誤り です。両方とも配列条件でスピルします。違いは「条件の数を 1 つしか書けるか複数書けるか」だけです(実機検証済 / Build 19929.0)。

複数条件 (AND) の基本 ― 2〜3 条件の実例
SUMIFS の真価は条件を 2 つ以上指定できる点にあります。条件範囲と条件をペアで追加していくだけで、AND 集計が書けます。
2 条件: =SUMIFS(D2:D9, B2:B9, "東京", C2:C9, "りんご") → 12000
3 条件: =SUMIFS(D2:D9, B2:B9, "東京", C2:C9, "りんご",
A2:A9, ">=2026/4/1") → 12000同じ列に対して「以上 / 未満」のような数値範囲指定もできます。
=SUMIFS(D2:D9, D2:D9, ">=10000", D2:D9, "<15000") → 37000
(金額が 10000 以上 15000 未満の合計)
日付期間で挟む ― 月初以上・翌月初未満が安全
「2026 年 4 月分の売上合計」のような期間集計は、月初 >= かつ翌月初 < で挟むのが定番です。
リテラル日付: =SUMIFS(D2:D9, A2:A9, ">=2026/4/1", A2:A9, "<2026/5/1") → 62000
DATE 連結: =SUMIFS(D2:D9, A2:A9, ">="&DATE(2026,4,1),
A2:A9, "<"&DATE(2026,5,1)) → 62000
セル参照連結: =SUMIFS(D2:D9, A2:A9, ">="&I1, A2:A9, "<"&I2)
※ I1=開始日(2026/4/1)、I2=翌月初(2026/5/1)
- 比較演算子 (
>=,<) はダブルクォート内に書く - セル参照を埋め込むときは
">="&I1のように、演算子だけを文字列、値を&で連結 - 「以下 (
<=) 月末日」より「未満 (<) 翌月初」の方が安全(月末日 30/31 や時刻付きデータの取りこぼしを防げる)
日付期間集計のさらに詳しい例(時刻付きデータの罠など)は SUMIFS で日付が期間内の合計を求める方法 をご覧ください。
ワイルドカード * ? ― 部分一致の基本
条件文字列にワイルドカードを使うと、部分一致で集計できます。
含む: =SUMIFS(D2:D9, F2:F9, "*限定*") → 53500
で始まる: =SUMIFS(D2:D9, F2:F9, "限定*")
で終わる: =SUMIFS(D2:D9, F2:F9, "*限定")*は 0 文字以上の任意文字列にマッチ?は 任意の 1 文字にマッチ- 文字列内に literal の
*や?を含めたい場合は~*~?でエスケープ(後述の Trap 2 参照)
ワイルドカードのさらに詳しい使い分け(前方/後方/部分一致のパターン、エスケープの罠)は Excel で SUMIFS 関数にワイルドカードを使う方法 をご覧ください。
別シート参照と複数シート集計
SUMIFS は別シートの範囲も参照できます。
固定シート: =SUMIFS('4月'!D:D, '4月'!B:B, "東京")
INDIRECT 切替: =SUMIFS(INDIRECT(I1&"!D:D"), INDIRECT(I1&"!B:B"), "東京")
※ I1 にシート名を入れて切り替える- シート名にスペースや記号(
-!(など)を含む場合は'シート名'!のようにシングルクォートで囲む必要がある。日本語のみのシート名(例:=売上!A1、=4月!A1)は実機でクォートなしでも通るが、迷う場面では常時クォートを付けても問題ない - INDIRECT は揮発性関数。シート数が多いと再計算で重くなるので注意
- 複数シートの総和は SUMPRODUCT または SUM で各 SUMIFS を加算する
固定参照 / INDIRECT 切替 / 重さ対策の詳細は SUMIFS を別シートにまたがって使う方法、複数シート集計は 複数のシートからのデータ集計:INDIRECT 関数と SUMIFS 関数を使った効率的な方法 をご覧ください。
【Excel 2024 実機】配列条件で SUMIFS がスピルする
Excel 2024 と Microsoft 365 では、SUMIFS の条件に配列を渡すと結果がスピル展開されます。これは古い解説では触れられていない、新しい挙動です。
=SUMIFS(D2:D9, B2:B9, {"東京","大阪","名古屋"})
→ 横スピル: P3=48000, Q3=19000, R3=15500
=SUMIFS(D2:D9, B2:B9, {"東京";"大阪";"名古屋"})
→ 縦スピル: P8=48000, P9=19000, P10=15500
=SUMIFS(D2:D9, B2:B9, UNIQUE(B2:B9))
→ UNIQUE のスピル結果に応じて縦スピル![Excel 2024 で SUMIFS の配列条件が P3:R3 に [48000, 19000, 15500] と横スピル展開している画面](https://www.helpaso.net/wp-content/uploads/2026/04/sumifs-basics-array-spill.png)
[48000, 19000, 15500] をスピル展開。
=UNIQUE(B2:B9) でユニーク支店を縦スピル、それを =SUMIFS(D2:D9,B2:B9,P14#) に渡すと支店ごとの合計が縦スピルする。OR 条件が 1 式で書ける
OR 条件で合計したいときは、配列定数を渡して結果を SUM で包むだけです。
OR 集計 (東京 OR 大阪):
=SUM(SUMIFS(D2:D9, B2:B9, {"東京","大阪"})) → 67000
従来の SUMPRODUCT 版でも同じ結果:
=SUMPRODUCT(((B2:B9="東京")+(B2:B9="大阪"))*D2:D9) → 67000- SUMIFS 自体に重複排除はない。
{"東京","東京"}を渡すと 96000 になる(倍カウント) - スピル先がブロックされていると
#スピル!(後述の Trap 4) - Excel 2019 以前ではスピル展開できない → 互換性が必要なら従来の SUMPRODUCT で書く
- SUMIF も同じ要領でスピルする:
=SUMIF(B2:B9, {"東京","大阪","名古屋"}, D2:D9)も[48000, 19000, 15500]に横スピル。違いは「条件が 1 つしか書けない」だけ
【Excel 2024 で気づきにくい】4 つの罠
ここからが本題です。基本構文は他の Excel 解説サイトでも読めますが、これから紹介する 4 つの罠は、検索しても出てきにくいうえに「気づかないまま誤集計が混入する」厄介な現象ばかりです。すべて Excel 2024 実機で再現した数値とスクリーンショットつきで解説します。
Trap 1: 行数は同じだが起点がずれている → #VALUE! ではなく違う合計が返る
SUMIFS は条件範囲と合計範囲を 「相対位置でペア化」して評価 します。これは「条件範囲の何行目か」と「合計範囲の何行目か」が 位置で対応するという意味です。
そのため、行数(要素数)が同じでも 起点がずれた範囲を渡すと、#VALUE! エラーは出ずに、ペア化された結果として誤った合計が返ります。
| 数式 | 結果 | 説明 |
|---|---|---|
=SUMIFS(D2:D9, B2:B9, "東京") | 48000 | 正常(合計範囲と条件範囲が同じ起点) |
=SUMIFS(D2:D9, B3:B10, "東京") | 28000 | 条件範囲を 1 行下にずらした → 違う合計 |
=SUMIFS(D2:D9, B1:B8, "東京") | 34500 | 条件範囲を 1 行上にずらした(見出し含む)→ 違う合計 |

防御策:
- 範囲を テーブル化 (Ctrl+T) し、構造化参照(
売上T[金額],売上T[支店])で書く。テーブル化するとずれが起こりにくい - 列全体指定(
D:D,B:B)を使う(パフォーマンスとのトレードオフ) - 名前の定義で範囲に名前を付け、ペアで管理する
Trap 2: ワイルドカード * ? の意図せぬ発火
「メモ列に * や ? を含む文字列があり、それを完全一致で集計したい」というケース。エスケープ(~* ~?)を書き忘れると、ワイルドカードとして発火して別の行にも一致してしまう事故が起こります。
サンプルデータ(F 列にメモ、D 列に金額)の F2:F11 / D2:D11 に対して、? の罠 a と * の罠 b で同じ現象を見ます。
罠 a: ? の未エスケープ(任意 1 文字として発火)
| 数式(意図: 「通常?A」という文字列だけを集計) | 結果 | 説明 |
|---|---|---|
=SUMIFS(D2:D11, F2:F11, "通常?A") | 29000 | ? が任意 1 文字 → 通常?A (8000) + 通常XA (7000) + 通常YA (14000) すべてマッチ |
=SUMIFS(D2:D11, F2:F11, "通常~?A") | 8000 | ~? でリテラルエスケープ → 通常?A だけ一致 |
罠 b: * の未エスケープ(0 文字以上として発火)
| 数式(意図: 「ぶどう*限定」という文字列だけを集計) | 結果 | 説明 |
|---|---|---|
=SUMIFS(D2:D11, F2:F11, "ぶどう*限定") | 23000 | * が 0 文字以上 → ぶどう*限定 (15000) + ぶどう種類限定 (5000) + ぶどう特売限定 (3000) |
=SUMIFS(D2:D11, F2:F11, "ぶどう~*限定") | 15000 | ~* でリテラルエスケープ → ぶどう*限定 だけ一致 |

罠の核心: 検索対象に * や ? を含む行が 1 つしかないとエスケープあり/なしで同じ結果になり気づきません。データが増えて他の行が紛れ込んだ瞬間に誤集計が発火します。
防御策:
- 文字列内に
*?を含む可能性があれば常に~*~?でエスケープ - 関数開発時に「
*や?を含むデータが来たらどうなるか」を必ずテスト
Trap 3: 値が文字列として保存された数値は SUMIFS で 0 になる
CSV や Web から取り込んだデータでは、見た目は数字でも 値そのものが文字列として保存されていることがよくあります。この状態で SUMIFS の合計対象範囲に渡すと、その分はまったく加算されません。
注意したいのは、これは「セル書式」だけの問題ではなく 「値の型」 の問題だという点です。すでに数値が入っているセルに対して後から書式を「文字列(@)」に変えても、値は数値のままなので SUMIFS は普通に加算します(実機検証で 27000 が返ることを確認済み)。罠が発火するのは、値そのものが文字列として保存されている場合だけです。
サンプルでは G 列にあらかじめ NumberFormat="@" を設定したうえで "12000" "8000" などを入力し、値の型が str(文字列)として保存される状態にしています。
| 数式 | 結果 | 説明 |
|---|---|---|
=SUMIFS(G2:G9, B2:B9, "東京") | 0 | ← ハマる。値が文字列として保存されていると SUMIFS は加算しない |
=SUMIF(B2:B9, "東京", G2:G9) | 0 | SUMIF でも同じ |
=SUM(G2:G9) | 0 | SUM ですら 0 |
=SUMPRODUCT(G2:G9 * 1) | 82500 | *1 で数値強制すると加算できる |

"12000" などが値ごと文字列として保存されている。SUMIFS / SUMIF / SUM はすべて 0、SUMPRODUCT(G2:G9*1) だけが 82500 を返す。罠の核心: セルの見た目は同じ「12,000」でも、値が文字列として保存されていると SUMIFS は 0 として扱います。「部分的に欠ける」現象になりやすく、合計値が想定よりちょっと少ないので気づきにくいです。一方、書式が文字列でも値が数値であれば加算されるため、書式だけ見ても判別できません。
防御策:
- データクレンジング段階で
=VALUE(A1)または値貼り付けで、セル書式を「数値」へ変換 - 一括変換: 範囲を選択 → 「データ」タブ → 「区切り位置」 → 完了 で強制再評価(書式が数値になり値も数値化される)
- SUMIFS の代わりに
SUMPRODUCT(範囲*1)で数値強制する
Trap 4: 配列スピル先がブロックされていると #スピル!
H2-8 で見たように、SUMIFS に配列条件を渡すとスピル展開されます。展開先のセルがブロックされていると、結果セルは #スピル!(英語環境では #SPILL!)になります。
例として、S2 にラベル「通常 (ブロックなし)」、S3 に =SUMIFS(D2:D9, B2:B9, {"東京";"大阪";"名古屋"}) を入れた状態を考えます。期待は S3:S5 に [48000, 19000, 15500] が縦スピル展開です。

#スピル!。右 (解除後) = S4 を空にすると S3:S5 にスピル復活し [48000, 19000, 15500]。- セル表示は日本語環境では
#スピル!、英語環境では#SPILL!。VBA やRange.Textで取得すると同様に'#スピル!'(実機検証済 / LanguageID=1041) - ブロックを解除(削除)すると、再計算で自動的にスピルが復活する
- 横配列(
{...,...,...})と縦配列({...; ...; ...})でブロック方向が異なる
防御策:
- 配列スピルする数式の展開予定領域を事前にクリアしておく
- スピルさせたくない場面では
=SUM(SUMIFS(...))で 1 セルに集約してしまう - スピル動作が分かっているなら、結果領域を予め空けて運用フォーマットに組み込む
エラー早見表
| エラー / 結果 | 原因 | 対処 |
|---|---|---|
#VALUE! | 合計範囲と条件範囲の行数が違う | 範囲の行数を揃える |
#NAME? | 関数名のスペルミス | SUMIFS の綴り確認 |
#スピル! (英語環境では #SPILL!) | 配列スピル先のセルがブロックされている | 展開先をクリア(Trap 4) |
結果が 0 | (1) 完全一致条件で部分一致を期待 (2) 値が文字列として保存された数値 (Trap 3) | (1) * ? 追加 (2) 値を数値型に戻す |
| 違う数値が返る | 行数同じだが起点ずれ (Trap 1) または * ? 未エスケープ (Trap 2) | テーブル化 / 列全体指定 / ~* ~? |
関連記事
- SUMIFS で日付が期間内の合計を求める方法
- SUMIFS にワイルドカードを使う方法(部分一致で合計)
- SUMIFS を別シートにまたがって使う方法
- 複数のシートからのデータ集計:INDIRECT × SUMIFS
- COUNTIF・SUMIF など条件付き集計関数の一覧
まとめ
SUMIFS は複数条件の合計をシンプルに書ける強力な関数です。基本は =SUMIFS(合計範囲, 条件範囲1, 条件1, ...) で、SUMIF と引数順序が逆になる点だけ注意すれば、すぐに使えます。Excel 2024 では条件に配列を渡すとスピル展開もされ、OR 集計や支店別の合計が 1 式で書けるようになりました。
一方で、本記事で取り上げた 4 つの罠(行数同じ起点ずれ・ワイルドカード未エスケープ・値が文字列として保存された数値・スピル衝突)はどれも検索しにくく、誤集計に気づきにくい厄介な現象です。データが増えた瞬間に発火するパターンも多いので、関数を組み込む前に「* や ? 含むデータが来たらどうなるか」「文字列として保存された数値が混ざったら?」を必ずチェックすることをおすすめします。
検証環境
- Excel: Microsoft Excel 2024(永続版)/ バージョン 16.0 / Build 19929.0
- 言語: 日本語版(UI LanguageID=1041)
- OS: Windows 11 Pro 25H2
- 検証日: 2026-04-28
コメント