スプレッドシートのMOD関数で余りを求める|偶数奇数判定・1行おき色分け・勤怠分割まで実務8パターン

スポンサーリンク

スプレッドシートで割り算をしたとき、「余り」だけがほしい場面はありませんか?

12個のお菓子を5人で分けると「1人2個で、余りは2個」。こういう計算、手作業でやるのは面倒ですよね。

そんなときに使うのがスプレッドシートのMOD関数です。割り算の余りを一発で求めてくれます。しかも偶数・奇数の判定、1行おきの色分け、N行ごとの処理にも応用できる便利な関数です。

この記事では基本の書き方から実務テンプレート8パターン、よくあるエラー、関連関数との使い分けまで紹介します。

スプレッドシートのMOD関数とは?

スプレッドシートのMOD関数(読み方: モッド関数)は、割り算の余り(剰余)を返す関数です。

名前は英語の「modulo(剰余演算)」の略です。たとえば「10÷3」の余りは「1」。MOD関数を使うと =MOD(10, 3) で「1」が返ります。

割り算には「商」と「余り」がありますよね。MOD関数は「余り」のほうを取り出す関数です。「商」の整数部分を取り出すにはINT関数やQUOTIENT関数(商の整数部分を返す関数)を使います。

MOD関数にできることをまとめると、次のとおりです。

  • 割り算の余りを求める
  • 偶数か奇数かを判定する
  • 条件付き書式と組み合わせて1行おきに色を付ける
  • N行ごと・N個ごとに処理を振り分ける
  • 時刻データから端数の「分」を取り出す
  • ページネーションのページ番号を計算する

NOTE

MOD関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心ですよ。

MOD関数の書き方(構文と引数)

基本構文

=MOD(被除数, 除数)

カッコの中に「割られる数」と「割る数」の2つを入れます。

引数の説明

引数必須/任意説明
被除数必須割られる数(余りを求めたい数値やセル参照)
除数必須割る数(いくつで割るか)

引数は2つだけです。「被除数÷除数」の余りが返ります。

数学的に書くと MOD(A, B) = A - B * INT(A/B) です。「元の数から、商の整数部分×除数を引いた残り」が余りですね。

TIP

検算するときは B INT(A/B) + MOD(A, B) が元の数Aと一致するか確認してみてください。10 ÷ 3 なら 33 + 1 = 10 で戻ります。

MOD関数の基本的な使い方

数値を直接入力する

もっともシンプルな使い方です。

=MOD(10, 3)

結果は「1」です。10÷3は「商3、余り1」ですね。

=MOD(15, 5)

結果は「0」です。15は5で割り切れるので余りはありません。

セル参照を使う

A1に「17」、B1に「5」が入っているとします。

=MOD(A1, B1)

結果は「2」です。17÷5は「商3、余り2」です。セル参照を使えば、値が変わっても自動で余りが計算されます。

01 data basic usage

割り切れるかどうかを確認する

余りが0なら割り切れる、0以外なら割り切れないと判定できます。

=IF(MOD(A1, B1)=0, "割り切れる", "割り切れない")

たとえばA1が「20」、B1が「4」なら「割り切れる」です。A1が「21」なら「割り切れない」です。在庫を箱詰めできるかチェックする場面などで便利ですね。

小数の余りも求められる

MOD関数は整数だけでなく、小数にも対応しています。

=MOD(5.5, 2)

結果は「1.5」です。5.5÷2は「商2、余り1.5」ですね。

ARRAYFORMULAで列全体を一気に処理する

セルごとにMODを書くのは面倒です。スプレッドシートではARRAYFORMULA関数(配列を一括処理する関数)と組み合わせて列を一気に処理できます。

=ARRAYFORMULA(MOD(A2:A100, 3))

A2からA100まで全部の値を3で割った余りが、1つの数式で一気に返ります。データが増えても自動で適用されるのがメリットですよ。

実務で使えるMOD関数活用パターン8つ

ここからが本題です。実務でよく使う活用パターンを8つ紹介します。

1. 偶数・奇数を判定する

もっとも使用頻度が高いパターンです。A2にチェックしたい数値が入っているとします。

=IF(MOD(A2, 2)=0, "偶数", "奇数")

2で割った余りが0なら偶数、1なら奇数。シンプルですよね。

02 result even odd

「ID番号が偶数のレコードだけ抽出したい」「奇数番目の人を表彰したい」など、グルーピングの基準として幅広く使えます。

2. 条件付き書式で1行おきに色を付ける

データが多い表を見やすくするテクニックです。条件付き書式のカスタム数式に次のように入力します。

=MOD(ROW(), 2)=0

これで偶数行だけに背景色が付きます。データが増減しても自動で交互色が維持されるので、手動で色を塗るより圧倒的に楽です。

奇数行に色を付けたい場合は次のようにします。

=MOD(ROW(), 2)=1

条件付き書式の設定手順は次のとおりです。

  1. 色を付けたい範囲を選択
  2. メニュー「表示形式」→「条件付き書式」
  3. 「カスタム数式」を選択
  4. 上記の数式を入力
  5. 背景色を選んで「完了」

これで「シマシマ模様の表」が一発で完成します。

3. N行ごとに区切り行を入れる

大量のデータに定期的な区切りを入れるパターンです。

=IF(MOD(ROW(), 5)=0, "--- 小計 ---", "")

5の倍数行(5, 10, 15…)に「— 小計 —」と表示されます。区切りラベルや小計の目印に使えますよ。

条件付き書式と組み合わせれば、N行ごとに罫線を引いたり背景色を変えたりも可能です。

=MOD(ROW(), 5)=0

これをカスタム数式に入れて罫線を付ければ、5行ごとに区切り線が入る読みやすい表になります。

4. グループ番号を振る

データをN件ずつのグループに分けて、それぞれにグループ番号を付けたい場面です。A2行目から5件ずつグループ化するなら、次のように書きます。

=INT((ROW()-2)/5)+1

これで2〜6行目がグループ1、7〜11行目がグループ2…と振られます。MOD関数の補完関数としてINT関数を使うパターンですね。

「グループ内の番号」を付けたい場合はMOD関数を使います。

=MOD(ROW()-2, 5)+1

これで各グループ内で1〜5の連番が振られます。シフト表やローテーション表で便利ですよ。

TIP

MOD関数とROW関数の組み合わせは応用範囲が広いです。「3行ごとに罫線を引きたい」「10件ごとにページ区切りを入れたい」など、定期的なパターンを作る場面で活躍します。

5. 曜日番号をカスタマイズする

WEEKDAY関数(日付から曜日番号を返す関数)と組み合わせて、曜日番号を柔軟にカスタマイズするパターンです。A2に日付が入っているとします。

=MOD(WEEKDAY(A2, 2), 7)

WEEKDAY関数の種類2は月曜=1〜日曜=7です。MOD関数で7の余りを取ると、月曜=1〜土曜=6、日曜=0になります。

日曜を「7」のままにしたい場合は次のようにします。

=IF(MOD(WEEKDAY(A2, 2), 7)=0, 7, MOD(WEEKDAY(A2, 2), 7))

曜日番号のカスタマイズはシフト管理や勤怠表で重宝します。

6. 勤怠の「時間」と「分」を分ける

時刻データから「時」と「分」を分けるパターンです。C2に作業時間(例: 2:45)が入っているとします。

時間: =INT(C2*24)
分:   =MOD(C2*24, 1)*60

C2*24で「時間数」に変換し、INT関数で整数部分(時間)を取り出します。MOD関数で1の余り(小数部分)を取り出し、60を掛けると「分」になります。

C2が「2:45」のとき、内部的には2.75時間として扱われます。INT(2.75)=2、MOD(2.75, 1)=0.75、0.75×60=45。きれいに2時間と45分に分かれますね。

勤怠管理で「2時間45分」を「2」と「45」に分けたいときに便利です。

7. 割り算を「商」と「余り」に分解する

割り算の結果を完全に分解するパターンです。A2に総数、B2に1グループの個数が入っているとします。

商:    =INT(A2/B2)     または =QUOTIENT(A2, B2)
余り:  =MOD(A2, B2)

たとえば100個のお菓子を12個ずつ箱詰めするなら、INT関数で「8箱」、MOD関数で「余り4個」です。検算すると 12 × 8 + 4 = 100 で元の数に戻ります。

03 result divide decompose

TIP

QUOTIENT関数でも商の整数部分を求められます。=QUOTIENT(100, 12) は「8」です。INT(A2/B2)と同じ結果ですが、QUOTIENT関数のほうが「商を求めている」という意図が明確になりますよ。

8. ページネーション(ページ番号)を計算する

レコード番号からページ番号と「ページ内の順序」を計算するパターンです。1ページに10件表示する場合、A列にレコード番号(1, 2, 3…)が入っているとします。

ページ番号:   =INT((A2-1)/10)+1
ページ内番号: =MOD(A2-1, 10)+1

A2が「15」のとき、ページ番号は INT(14/10)+1 = 2、ページ内番号は MOD(14, 10)+1 = 5。つまり「2ページ目の5番目」と分かります。

検索結果の表示や在庫リストのページ割りなど、データを一定数ごとに区切る場面で重宝するテクニックですよ。

よくあるエラーと対処法

MOD関数は引数2つのシンプルな関数ですが、エラーが出ることもあります。

エラー原因対処法
#DIV/0!除数が0または空白セル除数が0でないか事前にチェックする
#VALUE!引数に文字列が入っているセル参照先が数値かどうか確認する
#ERROR!構文ミス(カッコ忘れ等)数式の入力内容を見直す
結果が想定と違う負の数での動作を誤解している次のセクションの説明を確認する

除数が0のとき

MOD関数で最もよくあるエラーです。0で割ることはできません。

=MOD(10, 0)

結果は#DIV/0!エラーです。除数に0が入る可能性がある場合は、IF関数で事前にチェックしましょう。

=IF(B1=0, "エラー: 0では割れません", MOD(A1, B1))

IFERROR関数(エラーを別の値に置き換える関数)でラップする方法もあります。

=IFERROR(MOD(A1, B1), "")

エラーセルを空白にして見た目をすっきりさせたいときに便利ですよ。

除数が空白セルのとき

参照先のセルが空白だと、空白は「0」として扱われます。つまり結果は同じく#DIV/0!エラーです。

データを途中まで入力した段階でエラーが大量に出るのを防ぐには、IFERRORでラップしておくのがおすすめです。

引数に文字列が入っているとき

セル参照先に文字列が入っていると#VALUE!エラーになります。

=MOD("abc", 3)   → #VALUE!

数値以外を弾きたい場合は、ISNUMBER関数で事前チェックすると安全です。

=IF(ISNUMBER(A1), MOD(A1, B1), "数値を入力してください")

負の数を扱うときの注意点

MOD関数の結果の符号は、除数の符号に従います。ここが少し直感と違うので、整理しておきましょう。

数式結果解釈
=MOD(10, 3)1正÷正 → 正の余り
=MOD(-10, 3)2負÷正 → 正の余り
=MOD(10, -3)-2正÷負 → 負の余り
=MOD(-10, -3)-1負÷負 → 負の余り

「-10 ÷ 3 の余りが2?」と意外に感じるかもしれません。これは数学的な「正の剰余」の定義に従っているためです。検算すると 3 × (-4) + 2 = -10 で確かに元の数に戻ります。

実務では正の数同士で使うことがほとんどです。負の数を扱う場面では、ABS関数(数値の絶対値を返す関数)で絶対値に変換してからMOD関数に渡すと安全です。

=MOD(ABS(A1), ABS(B1))

これなら符号を気にせず常に正の余りが取れます。

似た関数との違い・使い分け

MOD関数と関連する関数をまとめました。

関数動作引数戻り値
MOD割り算の余り2つ余り(剰余)
QUOTIENT割り算の商の整数部分2つ商の整数部分
INT整数に切り捨て1つ整数
ROUNDDOWN指定桁数で切り捨て2つ切り捨てた数値
FLOOR倍数で切り捨て2つ倍数に切り捨てた数値
CEILING倍数で切り上げ2つ倍数に切り上げた数値
MROUND最も近い倍数に丸め2つ倍数に丸めた数値

MODとQUOTIENTの関係

MOD関数とQUOTIENT関数はセットで使うのが基本です。割り算を「商」と「余り」に完全分解できます。

=QUOTIENT(17, 5)  → 3(商の整数部分)
=MOD(17, 5)       → 2(余り)

検算すると 5 × 3 + 2 = 17 で元の数に戻ります。割り算を完全に分解するペアですね。

QUOTIENT関数の代わりに =INT(A1/B1) でも同じ結果です。ただしQUOTIENT関数のほうが「商を求める」意図が明確になります。

MODとINTの補完関係

INT関数は「整数部分」、MOD関数は「余り部分」を取り出します。

=INT(7.5)      → 7(整数部分)
=MOD(7.5, 1)   → 0.5(小数部分 = 1で割った余り)

INT + MODで数値を「整数部分」と「小数部分」に分解できます。活用パターン6で紹介した「時刻を時間と分に分ける」技がまさにこの応用ですね。

MODとFLOORの関係

FLOOR関数は「倍数に切り捨てた値」を返します。一方MOD関数は「倍数で割った余り」を返します。実は両者には次の関係があります。

FLOOR(A, B) + MOD(A, B) = A

たとえば =FLOOR(17, 5) は「15」、=MOD(17, 5) は「2」。15+2=17で元の数に戻ります。

FLOOR関数は「いくつ取れるか」(切り捨てた値)を求めるとき、MOD関数は「いくつ余るか」を求めるときに使います。同じ計算の表と裏ですね。

MODとCEILINGの関係

CEILING関数は「倍数に切り上げた値」を返します。MOD関数と組み合わせると「あといくつで次の倍数になるか」を計算できます。

=CEILING(17, 5) - 17   → 3(次の倍数20まであと3)

または次のように書くこともできます。

=IF(MOD(A1, B1)=0, 0, B1 - MOD(A1, B1))

ケース出荷で「あと何個追加すれば1ケース満たせるか」を計算する場面で便利ですよ。

TIP

関連する丸め関数の使い分けも確認してみてください。ROUNDROUNDUPROUNDDOWNMROUNDCEILINGFLOORINTABSで詳しく解説しています。

Excelとの違い

MOD関数はExcelとGoogleスプレッドシートで完全に同じ動作です。

項目ExcelGoogleスプレッドシート
構文=MOD(数値, 除数)=MOD(被除数, 除数)
動作割り算の余り割り算の余り
負の数除数の符号に従う除数の符号に従う
引数2つ2つ

引数名の表記が若干異なるだけで、機能は完全に同じです。ExcelとSheetsでファイルを共有しても、計算結果がずれることはありません。安心して使えますよ。

MOD関数のよくある質問(FAQ)

MOD関数を実務で使っていると、エラーや動作の違いで戸惑う場面が出てきます。ここでは、特に質問の多い4つのポイントを取り上げて解決していきます。

Q. MOD関数でゼロ除算(除数に0を指定)するとどうなる?

除数(2番目の引数)に0を指定すると、MOD関数は #DIV/0! エラーを返します。これは割り算で0では割れないのと同じ理由です。

たとえば =MOD(10, 0) と入力すると、計算ができずに #DIV/0! が表示されます。除数をセル参照にしている場合、参照先が空欄でも0とみなされ、同じエラーになる点に注意してください。

実務では、除数を別セルから取得するケースで起こりがちです。対策として、IFERROR関数で囲んでおくと安全です。

=IFERROR(MOD(A2, B2), "除数を確認")

このようにしておけば、B2が0や空欄でもエラー表示にならず、わかりやすいメッセージを出せます。エラー処理の詳しい使い方はスプレッドシートのIFERROR関数の記事も参考にしてください。

なお、除数が0かどうかをIF関数で事前に判定する方法もあります。状況に応じて使い分けるとよいでしょう。

Q. MOD関数を使った数式がとても遅い(大量データで処理が重い)。対策は?

MOD関数そのものは非常に軽い処理なので、関数単体が原因で遅くなることはほとんどありません。重くなる本当の原因は、数式の「配置のしかた」にあるケースが多いです。

特に、1行おきの色分けや連番処理で、数万行に1セルずつMOD関数の数式をコピーしていると、再計算のたびに全セルが評価されて重くなります。1行ずつコピーするのではなく、ARRAYFORMULAでまとめて処理する方法が有効です。

=ARRAYFORMULA(MOD(ROW(A2:A10000), 2))

この書き方なら、1つの数式で範囲全体を一括計算できるため、数式の個数が劇的に減り、動作が軽くなります。

また、1行おきの色分けが目的であれば、そもそも数式を使わず「条件付き書式」のカスタム数式でMODを使う方法もあります。書式設定だけならシートの計算負荷をほとんど増やしません。

=MOD(ROW(), 2) = 0

それでも重い場合は、不要な列の数式を削除する、外部参照やIMPORTRANGEを減らすなど、シート全体の見直しも検討してください。

Q. MOD関数でうるう年かどうかを判定できる?

判定できます。うるう年のルールは「4で割り切れる年はうるう年、ただし100で割り切れる年は平年、さらに400で割り切れる年はうるう年」という三段構えになっており、これはまさにMOD関数で表現できる条件です。

A2セルに西暦の年(例: 2024)が入っているとして、次の数式で判定できます。

=IF(OR(AND(MOD(A2,4)=0, MOD(A2,100)<>0), MOD(A2,400)=0), "うるう年", "平年")

MOD(A2,4)=0で4の倍数を判定し、MOD(A2,100)<>0で世紀年(100の倍数)を除外し、MOD(A2,400)=0で400の倍数を例外的に拾う、という構成です。これで2000年はうるう年、1900年は平年と正しく判定できます。

ちなみに、MOD関数を使わない裏ワザもあります。2月29日が存在するかどうかをDAY関数で調べる方法です。

=IF(DAY(DATE(A2,3,0))=29, "うるう年", "平年")

DATE関数で「3月0日」を指定すると、その年の2月末日が返ります。その日をスプレッドシートのDAY関数で取り出し、29なら閏年という仕組みです。日付の月部分を扱うときはスプレッドシートのMONTH関数も合わせて覚えておくと、日付計算の幅が広がります。

Q. ExcelのMOD関数とGoogleスプレッドシートのMOD関数は結果が違うことがある?

基本的な使い方では、ExcelとGoogleスプレッドシートのMOD関数は同じ結果になります。構文も MOD(数値, 除数) で共通です。

ただし、注意したいのは「負の数を扱うとき」です。両者とも符号は除数に合わせる仕様で、結果の考え方は同じなのですが、浮動小数点の扱いや、ごく一部の極端なケースで差が出る可能性はゼロではありません。とはいえ、整数同士の通常の計算であればまず一致すると考えて問題ありません。

むしろ実務で差を感じやすいのは、数式をコピー&ペーストでExcelとスプレッドシート間を移動させたときです。MOD関数自体は移植できても、ROW関数の挙動や日付のシリアル値の基準日が両ソフトで異なるため、MODと組み合わせた数式の結果がずれて見えることがあります。

両ソフトでファイルをやり取りする場合は、MOD単体ではなく「MODと組み合わせている他の関数」を含めて結果を確認するのが安全です。とくに日付や行番号を絡めた数式は、移行後に一度テスト用の値で動作チェックをしておくことをおすすめします。

まとめ

スプレッドシートのMOD関数は、割り算の余りを求めるシンプルで万能な関数です。

ポイントを整理します。

  • 構文は =MOD(被除数, 除数) の2引数。余りを返す
  • 偶数・奇数の判定は =MOD(A1, 2) で0か1かを確認
  • 1行おきの色分けは条件付き書式の =MOD(ROW(), 2)=0
  • N行ごとの処理はROW関数と組み合わせて活用
  • 勤怠の「時」と「分」分割は INT(C224)MOD(C224, 1)*60 のペア
  • INT関数やQUOTIENT関数と組み合わせて割り算を完全分解
  • 除数が0だと#DIV/0!エラーになるので事前チェック
  • ABS関数と組み合わせると負の数も安全に処理できる

まずは =MOD(A1, 2) で偶数・奇数の判定から試してみてください。慣れてきたら条件付き書式の交互色や、勤怠の時分分割にも応用してみましょう。

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