SUMIFS関数の使い方|複数条件と期間の指定・OR条件の書き方

SUMIFS関数は、複数の条件をすべて満たす行だけを合計する関数です。条件範囲と条件をペアで並べるのが書き方の骨格。同じ列を2回指定すれば「4月1日から4月30日まで」のような期間も挟めます。条件は「かつ」で結ばれるため、「または」を書きたいときだけ別の組み立てが要ります。

この記事でわかること

  • SUMIFS関数のペア構造と、条件を増やす書き方
  • 期間で区切って合計する方法と、月ごとのクロス集計の組み方
  • 時刻が入った日付で最終日が漏れる原因と直し方
  • OR条件・「〇〇以外」・空白/空白以外の指定
  • #VALUE!や「0になる」ときの原因と、SUMIFとの引数順の違い


目次

SUMIFS関数の構文と引数

構文

=SUMIFS(合計範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], ...)
引数指定するもの注意点
合計範囲実際に足すセル範囲先頭に置く。SUMIFとは順番が違う
条件範囲11つ目の条件を判定する列合計範囲と同じ行数・同じ形にそろえる
条件11つ目の条件比較演算子やワイルドカードは " で囲む
条件範囲2・条件22つ目以降2つで1組。組を増やすほど条件が足される

条件範囲と条件は必ず2つで1組です。片方だけ足すと引数の数が合わず、そのまま確定できません。

条件が複数あるとき、SUMIFSは「すべてを満たす行」だけを合計します。条件どうしは常に「かつ」で結ばれると覚えておけば、後半のOR条件の話がそのままつながります。

SUMIFS関数はExcel 2016以降のどのバージョンでも使えます。

SUMIFS関数の使い方|複数条件と期間の指定・OR条件の書き方の解説図1

基本の使い方

A列に日付、B列に支店、C列に商品、D列に金額が並ぶ売上表を例にします。大阪支店の「ペン」だけを合計する式です。

=SUMIFS($D$2:$D$100, $B$2:$B$100, "大阪", $C$2:$C$100, "ペン")

条件を直接書かず、集計表のセルを参照させると使い回せます。F列に支店名、1行目に商品名を並べたクロス集計表なら、次の形です。

=SUMIFS($D$2:$D$100, $B$2:$B$100, $F2, $C$2:$C$100, G$1)

$F2 は列だけ固定、G$1 は行だけ固定。こうすると右にも下にもコピーできる1本の式で、表全体が埋まります。範囲側の $D$2:$D$100 は両方固定です。

範囲の行数は必ずそろえる

合計範囲と条件範囲の行数がずれていると #VALUE! になります。どの範囲も同じ行番号で始め、同じ行番号で終えるのが鉄則です。

行が増える表なら、範囲を $D$2:$D$1000 のように余裕を持たせるか、テーブル(Ctrl+T)にして構造化参照で書くと保守が楽になります。

条件が1つでもSUMIFSで書ける

条件が1つのときSUMIF関数でも書けますが、SUMIFSでも問題なく動きます。後から条件を足すとき、式の末尾に1組追記するだけで済むのがSUMIFSの利点です。集計表の書式をチーム内でそろえたいなら、最初からSUMIFSに寄せる選び方があります。


期間で区切って合計する

日付の集計は、SUMIFSがSUMIFより素直に書けるところです。同じ列を2回指定して挟みます。

=SUMIFS($D$2:$D$100, $A$2:$A$100, ">="&DATE(2026,4,1), $A$2:$A$100, "<="&DATE(2026,4,30))

日付を ">=2026/4/1" と文字列で直接書くと、環境の日付設定によって解釈が変わることがあります。DATE関数か、日付を入れたセルの参照で指定するのが確実です。

セル参照にするなら、演算子と参照を & でつなぎます。

=SUMIFS($D$2:$D$100, $A$2:$A$100, ">="&$G$1, $A$2:$A$100, "<="&$G$2)

">=G1" と書くと「G1という文字そのもの」を探しに行きます。ここを & でつながないのは、よくある書き間違いです。

⛔ 時刻が入っていると最終日が漏れる

Excelの日付は内部で数値として持たれ、時刻はその小数部分に入ります。つまり 4月30日 14:20 は「4月30日」より大きい値です。

"<="&DATE(2026,4,30) は 4月30日 0時00分までしか拾わないため、時刻つきで記録されたその日のデータがまるごと漏れます。システムから書き出したログや受注データで実際に起きる事故です。

安全な書き方は、翌日の0時より前で切ることです。

=SUMIFS($D$2:$D$100, $A$2:$A$100, ">="&DATE(2026,4,1), $A$2:$A$100, "<"&DATE(2026,5,1))

<= を < に変え、終了日を翌日にする。この形なら時刻の有無にかかわらず結果が変わりません。

月ごとに集計する

月初日を並べた列を用意すれば、月末日を手で入力せずに済みます。EOMONTH関数は指定月の末日を、EDATE関数は数か月後の同じ日を返します。

=SUMIFS($D$2:$D$100, $A$2:$A$100, ">="&$F2, $A$2:$A$100, "<"&EDATE($F2,1))

F2に「2026/4/1」を入れておけば、5月1日より前=4月分が合計されます。F列を下へ伸ばすだけで月次表になり、時刻の問題も同時に回避できます。

SUMIFS関数の使い方|複数条件と期間の指定・OR条件の書き方の解説図2

OR条件・「〇〇以外」・空白の書き方

① OR条件(どちらか一方)

SUMIFSの条件は「かつ」で結ばれるため、"大阪" と "京都" を並べても該当0件になります。「または」は書き方を変えます。

方法は2つあります。足し算でつなぐのが最も読みやすい形です。

=SUMIFS($D$2:$D$100, $B$2:$B$100, "大阪") + SUMIFS($D$2:$D$100, $B$2:$B$100, "京都")

対象が増えるなら、条件を波かっこで並べて合計します。

=SUM(SUMIFS($D$2:$D$100, $B$2:$B$100, {"大阪","京都","神戸"}))

SUMIFSが3つの結果を返し、それをSUMがまとめて足す形です。「大阪または京都、かつ1万円以上」のようにANDと混ぜることもできます。

=SUM(SUMIFS($D$2:$D$100, $B$2:$B$100, {"大阪","京都"}, $D$2:$D$100, ">=10000"))

⚠️ 波かっこの並びを2組同時に使うのは避けてください。組み合わせの総当たりにはならず、1番目どうし・2番目どうしが対になって処理されます。総当たりが必要なら、条件ごとにSUMIFSを分けて足すほうが確実です。

② 「〇〇以外」で絞る

=SUMIFS($D$2:$D$100, $B$2:$B$100, "<>大阪")

<> が「等しくない」を表す演算子です。除外する対象が複数あるなら、条件を組で並べます。

=SUMIFS($D$2:$D$100, $B$2:$B$100, "<>大阪", $B$2:$B$100, "<>京都")

「かつ」で結ばれる性質が、除外条件ではそのまま素直に働きます。

③ 空白・空白以外で絞る

書き方意味
"<>"空白以外の行
"="空白の行
"*"何らかの文字列が入っている行(数値は対象外)

未入力の行を除いて集計したいときは "<>" を1組足します。担当者未定の案件を除く、といった使い方です。

④ 部分一致で絞る

書き方意味
"*ペン*"「ペン」を含む
"東京*"「東京」で始まる
"??支店"任意の2文字+「支店」
"~*"アスタリスクそのもの

セル参照と組み合わせるなら "*"&$F2&"*" の形にします。

SUMIFS関数の使い方|複数条件と期間の指定・OR条件の書き方の解説図3

うまくいかないときの原因と直し方

症状主な原因直し方
#VALUE!合計範囲と条件範囲の行数が違うすべての範囲を同じ行番号でそろえる
#VALUE!参照先の別ブックが閉じている表を同じブックへ移す。またはSUMPRODUCTで書き換える
結果が0になる金額が文字列として入っている左寄せなら文字列。「区切り位置」で数値に変換する
結果が0になる条件列に余分な空白/全角半角の混在TRIM・ASCで整える
結果が0になる複数の値を1つの条件欄に並べたORは足し算か配列定数で書く
最終日の分だけ合計されない日付に時刻が入っている"<="&終了日 を "<"&翌日 に変える
日付の条件が効かない演算子とセル参照を & でつないでいない">="&$G$1 の形にする
非表示の行まで合計されるSUMIFSは表示状態を見ないSUBTOTAL関数かAGGREGATE関数を使う
再計算が重い範囲に列全体を指定している$D$2:$D$5000 のように行数を区切る

結果が0のときに見る順番

  1. 合計範囲だけをSUMしてみる — =SUM($D$2:$D$100) が0なら、金額が文字列です
  2. 条件を1組だけにして試す — どの条件で0になるかを切り分けます
  3. その条件をCOUNTIFで数える — =COUNTIF($B$2:$B$100, $F2) が0なら表記ゆれです

条件を1組ずつ外していけば、原因の組はすぐ特定できます。式全体をにらむより、条件を減らすほうが速いという切り分け方です。


似た関数との使い分け

関数・機能対応バージョン選ぶ場面
SUMIFS2016〜条件が2つ以上。条件1つでも書ける
SUMIF2016〜条件が1つだけの短い式にしたい
SUMPRODUCT2016〜単価×数量を掛けてから合計する。閉じた別ブックも参照できる
SUBTOTAL2016〜フィルタで絞った表示中の行だけを集計する
COUNTIFS2016〜足すのではなく件数を数える
ピボットテーブル2016〜集計軸を何度も入れ替えて確かめたい

集計軸が固まっていないうちはピボットテーブル、決まった位置のセルに数値を出したいならSUMIFS、という分け方が扱いやすくなります。ピボットは式の保守が要らない代わりに、更新操作が必要です。

⛔ SUMIFとは引数の順番が逆

=SUMIF(範囲, 検索条件, 合計範囲)
=SUMIFS(合計範囲, 条件範囲1, 条件1, ...)

SUMIFSは合計範囲が先頭です。SUMIFの感覚のまま書くと、条件を判定するはずの列を合計してしまいます。2つを行き来せず、どちらかに統一しておくほうが事故が減ります。


よくある質問

Q1:条件はいくつまで指定できますか?

上限は127組とされていますが、実務でこの数に当たることはまずありません。むしろ条件が5つを超えたあたりから式が読めなくなるので、作業列で条件をまとめるか、ピボットテーブルへ切り替えるほうが保守しやすくなります。

Q2:条件のセルを空欄にしたら全件が合計されますか?

されません。空欄のセルを条件に渡すと「空白と一致する行」を探しに行き、結果は0になります。「未指定なら全件」にしたい場合は、IF($F2="", SUM($D$2:$D$100), SUMIFS(...)) のように、条件が空のときだけ別の式へ分岐させます。

Q3:大文字・小文字や全角・半角は区別されますか?

大文字と小文字は区別されません。ABC と abc は同じ扱いです。一方で全角と半角は別の文字として扱われるため一致しません。ASC関数やJIS関数で、あらかじめどちらかに寄せておくのが確実です。

Q4:別のシートやブックにある表も集計できますか?

別シートは =SUMIFS(売上!$D$2:$D$100, 売上!$B$2:$B$100, $F2) の形で問題なく集計できます。別ブックも指定はできますが、参照先のブックを閉じると #VALUE! になります。継続して使う集計表なら、同じブック内に取り込んでおくのが確実です。

Q5:合計範囲にエラー値が混ざっているとどうなりますか?

#N/A や #DIV/0! が1つでも含まれていると、SUMIFSの結果もエラーになります。元の数式をIFERROR関数で包むなどして、先にエラーを解消してください。文字列が混ざっているだけなら無視されます。

Q6:フィルタで絞り込んだ結果だけを合計できますか?

SUMIFSは行の表示・非表示を見ないため、隠れている行も合計します。表示中の行だけを対象にしたいなら、SUBTOTAL関数(集計方法 109)かAGGREGATE関数を使ってください。


まとめ

SUMIFSの要点
  • 引数は合計範囲が先頭。条件範囲と条件は必ず2つで1組
  • すべての範囲を同じ行数にそろえる。ずれると#VALUE!
  • 期間は同じ列を2回指定。終了日は「翌日より前」で切ると時刻の漏れが消える
  • 条件は常に「かつ」。ORは足し算か配列定数で書く
  • 結果が0なら「①合計範囲をSUM ②条件を1組ずつ外す」の順で切り分ける

※関数の対応バージョンはExcelの一般提供時点の情報にもとづいています。お使いの環境や更新プログラムの適用状況により、利用できる関数や表示が異なる場合があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

はじめまして、白石です。製造業の生産管理で15年、毎日の実績集計と帳票づくりをExcelでやってきました。マクロを組もうとして早々に挫折し、そこからは「関数と表の機能だけでどこまでやれるか」でしのいできた口です。部門では「この集計どうやるの」と聞かれる係になり、聞かれた内容を手元にメモし続けました。そのメモがいつのまにか、関数名ではなくやりたいことから引く形になっていて、それがこのサイトのもとになっています。Excelは同じことをやるのに何通りもやり方があって、しかもバージョンによって使える関数が違います。ここでは実際に動かして確かめた式だけを載せ、つまずきやすいところと使えないバージョンを先に書くようにしています。

目次