スプレッドシートのSUMIFS関数の使い方|日付・OR条件の書き方

スポンサーリンク

「営業部の4月分だけ合計したい」「営業部か総務部の分をまとめて出したい」。Googleスプレッドシートで売上表や経費表を扱っていると、こんな集計にすぐぶつかりますよね。

SUMIF なら書けるのに、条件を2つにした途端に結果が0になる。{} で条件をまとめたら、なぜか片方の部署しか合計されない。原因がわからず、フィルタで絞って電卓で足している人も多いはずです。

この記事では、スプレッドシートのSUMIFS関数を1つのサンプル表で通して解説します。条件の早見表、OR条件の3つの書き方、0やエラーになる原因の確かめ方まで、貼れる数式つきでまとめました。

対応バージョン: Googleスプレッドシート(2026年10月時点のブラウザ版で確認)。{} の配列条件など、一部の挙動は Excel と異なります。

スプレッドシートのSUMIFS関数の書き方(構文とSUMIFとの違い)

SUMIFS(サムイフス)関数は、指定した条件をすべて満たす行だけを合計する関数です。名前は SUM(合計)+IF(もし)+複数形の S で、「複数の条件つきの合計」という意味。

公式ヘルプにも「行のすべての条件を満たしている必要があります」とあり、条件どうしは AND(かつ)でつながります。条件を重ねるほど、対象の行が絞られていく仕組みです。

基本構文と引数(合計範囲が先頭)

=SUMIFS(合計範囲, 条件範囲1, 条件1, [条件範囲2, 条件2, ...])
引数必須/任意内容
合計範囲必須合計したい数値の列(例: 金額)
条件範囲1必須1つ目の条件を調べる列(例: 部署)
条件1必須1つ目の条件(例: "営業部")
条件範囲2, 条件2 …任意2つ目以降の条件のペア

ポイントは、合計範囲がいちばん先頭に来ること。そのあとに条件範囲と条件のペアを、必要な数だけ並べます。

合計範囲は1列で指定します(公式ヘルプにも「複数列にわたる合計を返すことはできません」とあります)。合計範囲と条件範囲の行数もそろえてください。ずれると #VALUE! エラーになります。

サンプル表で2条件の合計を出す

次の表(A1:E9)を最後まで使い回します。B列は日付、D列は TRUE/FALSE の論理値です。

行A 部署B 日付C 金額D 済E 担当
2営業部2026/4/312000TRUE田中
3総務部2026/4/105000FALSE佐藤
4営業部2026/4/188000TRUE鈴木
5開発部2026/5/215000TRUE田中
6営業部2026/5/93000FALSE高橋
7総務部2026/5/207000TRUE佐藤
8(空白)2026/5/252000FALSE田中
9営業部␣(末尾に半角スペース)2026/4/254000TRUE鈴木

8行目の部署は空白、9行目は「営業部」の後ろに半角スペース入り。実務でよく混ざる「見えないズレ」を、わざと仕込んでいます。

「営業部」かつ「2026年4月」の2条件で合計してみましょう。

=SUMIFS(C2:C9, A2:A9, "営業部", B2:B9, ">="&DATE(2026,4,1), B2:B9, "<="&DATE(2026,4,30))

結果は 20000(2行目の12000+4行目の8000)。期間は「4/1以上」「4/30以下」の2条件を、同じB列に重ねます。

9行目の「営業部␣」も4月ですが、末尾のスペースで “営業部” と一致しません。確かめ方は後半の原因の章で扱います。

SUMIFとの引数順の違い

単一条件の SUMIF関数 とは、合計範囲の位置が逆です。同じ「営業部の合計」を並べてみます。

=SUMIF(A2:A9, "営業部", C2:C9)
=SUMIFS(C2:C9, A2:A9, "営業部")

どちらも結果は 23000(12000+8000+3000)。SUMIF は合計範囲が最後、SUMIFS は先頭です。

比較項目SUMIFSUMIFS
構文SUMIF(範囲, 条件, [合計範囲])SUMIFS(合計範囲, 条件範囲1, 条件1, …)
合計範囲の位置最後(省略可)先頭(省略不可)
条件の数1つ1つ以上(すべて AND)

SUMIFS は条件1つでも使えます。引数の順番で迷いたくないなら、最初から SUMIFS にそろえてしまうのも手です。

条件の書き方早見表(以上以下・日付・空白・部分一致)

条件の書き方は、パターンさえ覚えれば使い回せます。式はすべて =SUMIFS(C2:C9, …) の「…」部分で、結果はサンプル表での値です。

やりたいこと条件範囲と条件の書き方結果
5000以上・10000未満C2:C9, ">=5000", C2:C9, "<10000"20000
営業部以外A2:A9, "<>営業部"33000
4月(DATE で指定)B2:B9, ">="&DATE(2026,4,1), B2:B9, "<="&DATE(2026,4,30)29000
4月(セル参照)B2:B9, ">="&O10, B2:B9, "<="&O1129000
5月(EOMONTH で月初〜月末)下の本文を参照27000
部署が空白A2:A9, ""2000
部署が空白以外A2:A9, "<>"54000
「営業」で始まるA2:A9, "営業*"27000
「営業」+1文字A2:A9, "営業?"23000
済が TRUED2:D9, TRUE46000
済が FALSED2:D9, FALSE10000

O10 には =DATE(2026,4,1)、O11 には =DATE(2026,4,30) を入れています。以下、つまずきやすい点だけ補足します。

以上・以下・不一致とセル参照("&" で連結)

比較演算子は >=(以上)、<=(以下)、>、<、<>(等しくない)の5つ。">=5000" のように、演算子と数値をまとめてダブルクォーテーションで囲むのが決まりです。

金額で絞るなら、早見表の1行目のように合計範囲と同じ C列を条件範囲にも指定します(5000+8000+7000=20000)。条件をセルに置くときは、演算子とセルを & でつなぎましょう。

=SUMIFS(C2:C9, B2:B9, ">="&O10, B2:B9, "<="&O11)

これは 29000 です。ところが ">=O10" とセル番地まで引用符に入れると、結果は 0。「O10」という文字列と比べてしまうためで、エラーが出ないぶん気づきにくいミスです。

日付・期間・今月で絞り込む

期間は「開始日以上」と「終了日以下」の2条件で書くのが基本。日付は DATE(年,月,日) で作るか、日付を入れたセルを参照するのが確実です。

文字列の ">=2026/4/1" でも、今回のシートでは 29000 になりました。ただ、地域設定で日付の読み方が変わるおそれがあるので、共有シートでは DATE かセル参照が安心です。

月単位なら、EOMONTH 関数で月初と月末を作ると便利です。5月分はこう書けます。

=SUMIFS(C2:C9, B2:B9, ">="&EOMONTH(DATE(2026,5,15),-1)+1, B2:B9, "<="&EOMONTH(DATE(2026,5,15),0))

結果は 27000(15000+3000+7000+2000)。EOMONTH(日付,-1)+1 が月初、EOMONTH(日付,0) が月末です。

「今月」を自動で追いかけたいときは、DATE(2026,5,15) を TODAY() に置き換えます。

=SUMIFS(C2:C9, B2:B9, ">="&EOMONTH(TODAY(),-1)+1, B2:B9, "<="&EOMONTH(TODAY(),0))

月が替われば、集計の対象も自動で切り替わります。

空白/空白以外・部分一致・チェックボックス

空白の行は ""、空白以外の行は "<>" で指定します。サンプルでは空白の8行目だけが "" に一致して 2000、残りの7行が "<>" で 54000 です。

部分一致にはワイルドカードを使います。* は0文字以上の任意の文字列、? は任意の1文字。SUMIFS のヘルプページには記載がないものの、SUMIF と同じ書き方で使えました。

"営業*" は、末尾にスペースがある9行目も拾って 27000。"営業?" は「営業」+ちょうど1文字なので、9行目(4文字)が外れて 23000 です。

* や ? を文字そのものとして探すときは、前に ~ を付けます。別の小さな表(Q4:R5)で比べてみましょう。

Q列R列
A*B100
AxB200
=SUMIFS(R4:R5, Q4:Q5, "A~*B")

「AB」の行だけに一致して 100 です。~ を外した "AB" は両方に一致して 300。小文字の "a*b" も 300 で、大文字と小文字は区別されません。

チェックボックスの列は、既定ならオンで TRUE、オフで FALSE の論理値です。サンプルの D列と同じなので、D2:D9, TRUE で 46000、FALSE で 10000 になります。文字列の "TRUE" を渡しても 46000 でした。

OR条件(AまたはB)で合計する3つの方法

SUMIFS の条件は、すべて AND でつながります。そのため「営業部または総務部」のような OR は、1つの SUMIFS には書けません。

同じ A列へ "営業部" と "総務部" を並べると、結果は 0。1つのセルが両方に当てはまることはないからです。ここでは「営業部または総務部の合計」(正解は 35000)を3つの方法で出します。

方法数式の形結果向いている場面
1. SUMIFS の足し算SUMIFS(…)+SUMIFS(…)35000条件が2〜3個まで
2. MAP と LAMBDASUM(MAP({…}, LAMBDA(k, SUMIFS(…))))35000条件が多い・期間も足したい
3. SUMPRODUCT / FILTERSUMPRODUCT(((…)+(…))*C2:C9)35000別の列どうしの OR にも広げたい

方法1:SUMIFSを足し算する

いちばん素直なのが、部署ごとの SUMIFS を足す方法です。

=SUMIFS(C2:C9, A2:A9, "営業部") + SUMIFS(C2:C9, A2:A9, "総務部")

23000+12000 で 35000。読みやすく、誰が見ても意味がわかるのが強みです。

期間も加えるなら、それぞれの SUMIFS に同じ期間を書き足します。4月分はこうです。

=SUMIFS(C2:C9, A2:A9, "営業部", B2:B9, ">="&O10, B2:B9, "<="&O11) + SUMIFS(C2:C9, A2:A9, "総務部", B2:B9, ">="&O10, B2:B9, "<="&O11)

結果は 25000(営業部 20000+総務部 5000)。条件が増えるほど式が長くなるのが弱点です。

方法2:MAPとLAMBDAで条件のリストを回す

条件の数が多いなら、MAP 関数で「条件のリストを1つずつ SUMIFS に渡す」形にまとめられます。LAMBDA は、渡された値に名前(ここでは k)を付けて式の中で使う関数です。

=SUM(MAP({"営業部","総務部"}, LAMBDA(k, SUMIFS(C2:C9, A2:A9, k))))

MAP が「営業部」「総務部」を順に k へ入れて SUMIFS を2回計算し、SUM で合計して 35000 です。

部署を増やすときは {} の中に足すだけ。期間も、SUMIFS の部分に1回書けば済みます。

=SUM(MAP({"営業部","総務部"}, LAMBDA(k, SUMIFS(C2:C9, A2:A9, k, B2:B9, ">="&O10, B2:B9, "<="&O11))))

こちらも方法1と同じ 25000。部署が増えても式が長くならないのが、足し算に比べた利点です。

方法3:SUMPRODUCTかFILTERで1本にまとめる

SUMPRODUCT関数 なら、条件を + でつなぐことで OR を表せます。

=SUMPRODUCT(((A2:A9="営業部")+(A2:A9="総務部"))*C2:C9)

(A2:A9="営業部") は行ごとに TRUE/FALSE を返し、計算の中では 1/0 として扱われます。2つを足すと「どちらかに当てはまる行」が1になり、金額を掛けて合計すれば 35000 です。

抽出してから合計する FILTER関数 でも、同じ答えになります。

=SUM(FILTER(C2:C9, (A2:A9="営業部")+(A2:A9="総務部")))

結果は 35000。ただし、条件に合う行が1つもないと FILTER はエラーを返します。0を表示したい場面では、IFERROR で包んでおきましょう。

やりがちだが効かない書き方:{}とARRAYFORMULA

OR 条件でよく見かけるのが、条件を {} の配列にまとめる書き方です。ところが Googleスプレッドシートの SUMIFS は、ARRAYFORMULA で包んでも配列の条件を展開しません。返るのは最初の条件の値だけです。

数式結果
=SUMIFS(C2:C9, A2:A9, {"営業部","総務部"})23000
=SUM(SUMIFS(C2:C9, A2:A9, {"営業部","総務部"}))23000
=SUM(ARRAYFORMULA(SUMIFS(C2:C9, A2:A9, {"営業部","総務部"})))23000
=ARRAYFORMULA(SUMIFS(C2:C9, A2:A9, {"営業部","総務部"}))23000(隣のセルは空)
=SUM(ARRAYFORMULA(SUMIFS(C2:C9, A2:A9, O2:O3))) ※O2:O3 に営業部・総務部0

どれも 35000 になりません。23000 は営業部だけの合計で、総務部の 12000 が抜けています。エラーにならず「それらしい数字」が出るぶん、見落としやすいのが厄介なところ。

対照的に、単一条件の SUMIF なら ARRAYFORMULA で展開されます。

=SUM(ARRAYFORMULA(SUMIF(A2:A9, {"営業部","総務部"}, C2:C9)))

こちらは 35000(ARRAYFORMULA を外すと 23000)。条件の列が1つだけならこの形、2列以上なら方法1〜3を選びましょう。

別の列どうしのORはSUMPRODUCTで

「部署が総務部」または「担当が田中」のように、別の列にまたがる OR もあります。SUMIFS の足し算で書くと、両方を満たす行(総務部で担当が田中)が2回足されてしまいます。SUMPRODUCT なら、行ごとに1回だけ判定できます。

=SUMPRODUCT(((A2:A9="総務部")+(E2:E9="田中")>0)*C2:C9)

>0 で「どちらか1つ以上を満たす行」を1にそろえるのがコツ。サンプルには両方を満たす行がないため、結果は足し算と同じ 41000 です。

SUMIFSで集計表を作る(コピー型と一括型)

部署ごとの合計を一覧にするなら、SUMIFS で集計表を作れます。ここでは O5:O7 に「営業部」「総務部」「開発部」を並べ、隣の P列に合計を出します。

絶対参照でコピーして集計表を作る

基本は、1つ目のセルに式を書いて下へコピーする方法。P5 に次の式を入れます。

=SUMIFS($C$2:$C$9, $A$2:$A$9, $O5)

データの範囲には $ を付けて固定(絶対参照)し、条件の $O5 は行だけ動くようにしています。P7 までコピーすると、23000・12000・15000 が並びます。

月の軸も加えれば、部署×月の表になります。T5:T7 に部署名、U4 と V4 に各月の1日(=DATE(2026,4,1) と =DATE(2026,5,1))を置きます。U5 に次の式を入れ、右下へコピーしましょう。

=SUMIFS($C$2:$C$9, $A$2:$A$9, $T5, $B$2:$B$9, ">="&U$4, $B$2:$B$9, "<="&EOMONTH(U$4,0))
部署2026年4月2026年5月
営業部200003000
総務部50007000
開発部015000

$T5 は列を固定し、U$4 は行を固定するのがポイント。こうすると、縦横どちらにコピーしても参照がずれません。

MAPやBYROWで縦一列を一括で出す

コピーせずに1本の式で縦一列を埋めたいなら、MAP 関数を使います。P5 に次の式を1つ入れるだけです。

=MAP(O5:O7, LAMBDA(k, SUMIFS(C2:C9, A2:A9, k)))

P5:P7 に 23000・12000・15000 が展開されます。MAP を BYROW に替えても、同じ結果になりました。

=ARRAYFORMULA(SUMIFS(C2:C9, A2:A9, O5:O7)) はここでも効かず、先頭の 23000 しか出ません。条件の列が1つだけなら、SUMIF を ARRAYFORMULA で包めば展開できます。

=ARRAYFORMULA(SUMIF(A2:A9, O5:O7, C2:C9))

結果は MAP と同じです。ARRAYFORMULA の使い方は ARRAYFORMULA関数の記事 で解説しています。

期間などの条件は、MAP の中の SUMIFS に書き足します。4月分なら 20000・5000・0 が並ぶ形です。部署×月のクロス集計を1本で作るなら、QUERY関数 や ピボットテーブル が向いています。

SUMIFSが0になる・エラーになる原因と確かめ方

SUMIFS で困るのは、エラーではなく「0」や「少なすぎる数字」が返るケースです。数式は正しく見えるため、原因の当たりを付ける手順を押さえておきましょう。

原因の早見表(症状・原因・直し方)

症状よくある原因確かめ方直し方
一部の行が足されない末尾・先頭のスペース=LEN(A9) が想定より長いTRIM 関数で整える
見た目は同じなのに一致しない全角と半角の違いCOUNTIFS の件数が0ASC 関数などで表記をそろえる
金額の一部が足されない数値が文字列になっている=ISTEXT(セル) が TRUE数値で入れ直す・VALUE 関数
日付条件で0になる日付が文字列で入っている=ISNUMBER(セル) が FALSE日付として入れ直す・DATEVALUE 関数
セル参照の条件で0になる">=O10" と書いている数式の引用符の位置を見る">="&O10 に直す
OR のつもりで0になる同じ列に両立しない条件条件範囲が同じ列か見る足し算・MAP・SUMPRODUCT
片方の条件しか足されない条件を {} で渡している条件ごとに SUMIFS を分ける足し算・MAP・SUMPRODUCT
#VALUE! になる範囲の行数がそろっていない各範囲の開始・終了行を見る範囲をそろえる

サンプルの9行目が、スペースの典型例です。スペース付きの "営業部 " を条件にすると、4000 だけが合計されます。=LEN(A9) は、「営業部」なら3のところが4です。

範囲は終了行が1つ違うだけでも #VALUE! になります(例: =SUMIFS(C2:C8, A2:A9, "営業部"))。そろえるのが面倒なら列全体を指定する手もあり、=SUMIFS(C:C, A:A, "営業部") も 23000 です。

COUNTIFSとISNUMBERで原因を切り分ける

結果がおかしいときは、まず COUNTIFS関数 で「条件に合う行が何件あるか」を数えます。条件の書き方は SUMIFS と同じで、合計範囲を消すだけです。

=COUNTIFS(A2:A9, "営業部", B2:B9, ">="&DATE(2026,4,1), B2:B9, "<="&DATE(2026,4,30))

結果は 2。「営業部の4月は3件のはず」と思うなら、どこかの行が漏れています。条件を1つずつ外して件数の変化を見れば、原因の条件を絞り込めます。

件数が合うのに金額が合わないなら、合計範囲の「型」を疑います。小さな表(Q2:R3)で、文字列の数値を混ぜた例を見てみましょう。

Q列R列
営業部1000(数値)
営業部5000(="5000" で入れた文字列)
=SUMIFS(R2:R3, Q2:Q3, "営業部")

結果は 6000 ではなく 1000。文字列の "5000" は合計されません。=ISTEXT(R3) が TRUE、=ISNUMBER(R3) が FALSE なら文字列です。

直すなら、数値として入れ直すのが確実です。元のデータを触れないときは、計算の中で VALUE 関数を使って数値に直します。

=SUMPRODUCT((Q2:Q3="営業部")*VALUE(R2:R3))

これなら 6000 です。

よくある質問とまとめ

よく聞かれる疑問と、ほかの関数との使い分けを整理します。

ExcelのSUMIFSと違いはある?

構文と引数の順番(合計範囲が先頭)、比較演算子とワイルドカード(* ? ~)の書き方は Excel と共通です。

一方、この記事の {} の配列条件や MAP・BYROW の結果は、Googleスプレッドシートで確かめたものです。Excel で同じ集計をするなら、ExcelのSUMIFS関数の記事 をあわせて確認してください。

SUMIF・COUNTIFS・SUMPRODUCT・QUERYとの使い分け

やりたいこと向いている関数・機能
条件1つで合計SUMIF(SUMIFS でも可)
複数条件(AND)で合計SUMIFS
条件に合う件数を数えるCOUNTIFS
別の列どうしの OR・配列の計算SUMPRODUCT
条件で抜き出してから合計FILTER+SUM
部署×月などのグループ集計QUERY・ピボットテーブル

迷ったら、「AND だけなら SUMIFS、OR が入るなら SUMPRODUCT か足し算」が出発点。集計表が大きくなったら、QUERY やピボットテーブルへの切り替えを検討してください。

まとめ

スプレッドシートの SUMIFS 関数のポイントをおさらいします。

  • 構文は =SUMIFS(合計範囲, 条件範囲1, 条件1, …)。合計範囲が先頭で、SUMIF とは逆
  • 条件はすべて AND。期間は「開始日以上」「終了日以下」の2条件で書く
  • セルを条件にするときは ">="&O10 のように & でつなぐ
  • 空白は ""、空白以外は "<>"、部分一致は * と ?
  • OR は「足し算」「SUM+MAP+LAMBDA」「SUMPRODUCT か FILTER」のどれか
  • {} の条件は ARRAYFORMULA で包んでも、最初の条件しか合計されない
  • 0になったら COUNTIFS で件数、ISTEXT・LEN でセルの中身を確かめる

まずは手元の表で、=SUMIFS(金額の列, 部署の列, "部署名") の基本形から試してみてください。そこへ条件のペアを1つずつ足していけば、複数条件の集計も迷わず組めるはずです。

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