MOD関数は禁止!Excelで「割り算の余り」を求める8つの変態的アプローチ

MOD関数は禁止!Excelで「割り算の余り」を求める8つの変態的アプローチ 関数パズル・縛りプレイ

MOD関数なしで「余り」を求める?

まず、Excelで数値の「余り」を計算したいとき、
真っ先に思い浮かぶのは MOD 関数ですよね?

例えば =MOD(10, 3) なら、
10を3で割った余り「1」が返ってきます。

Excelの説明画像

これはシンプルで非常に便利です!

でも、もし「MOD 関数禁止!」という縛りがあったら、あなたはどうしますか?

え、なんでそんな制限を?

そう思いますよね!

今回の目的は、実務での実用性というよりは、
Excel関数の仕組みや数式の組み立て方への理解を深めることにあります。

そこでこの記事では、あえて MOD 関数を使わずに、
他の関数を組み合わせて「余り」を求める、
ちょっと変わった方法を8つご紹介します!

「こんな関数も使えるんだ!」
「こんな組み合わせ方があるのか!」

といった発見があるはずです。

普段あまり注目しない関数の意外な一面や、
数式作成の引き出しが増えるかもしれませんよ!

さあ、MOD 関数を封印して、関数パズルに挑戦してみましょう!

本記事では、Excel 2021を使用して検証および画像の作成を行っています。

今回のミッション

現在の状態とゴール

  • 現在の状態: はじめに、Excelのシートがあり、A1セルに割られる数(例: 1000)、B1セルに割る数(例: 13)が入力されている状態です。(数値は任意でOK!)
  • 目指すゴール: 次に、C列のセル (C1, C2, …) に、A1B1で割った「余り」を MOD 関数を使わずに表示させることを目指します。
数式の一覧

ルール

  • Excelの関数のみ使用。VBA(マクロ)は使いません。
  • 元のデータ (A1, B1) は変更・加工禁止! 数式だけで解決します。
  • MOD 関数は使用禁止! 今回の縛りです。
  • Excel 2021で使用できる関数のみを使用します。(筆者の検証環境のため)

データの準備

まず、特別なファイルは不要です!

新しいExcelシートを開き、A1セルとB1セルにお好きな整数を入力してください。
(例:A1に 1000、B1に 13)

Excelの説明画像

準備はできましたか?

それでは、さまざまなアプローチを見ていきましょう!

方法1:切り捨て・切り下げ系の関数で余りを出す! (5つのアプローチ)

考えかた

まず思いつくのは、割り算の基本的な関係式です。

元の数 = ( × 割る数) + 余り

これを変形すると、

余り = 元の数 – ( × 割る数)

となります。

ここでポイントは、MOD 関数を使わずに、
商 の「整数部分」を求めることです。

割り算 A1/B1 の結果から小数点以下を切り捨てれば、商の整数部分が得られますね!

(例:10 ÷ 7= 1 .1.4285714285714…

この「切り捨て」を行う関数はいくつかあります。

それらを順番に使ってみましょう!

手順

はじめに、余りを表示したいセル(例: C1セル)を選択します。

次に、以下に示すいずれかの数式を入力します。

INT関数

=A1 - INT(A1/B1) * B1

INT 関数は、数値の小数点以下の部分を単純に切り捨てて整数にします。

TRUNC関数

=A1 - TRUNC(A1/B1) * B1

TRUNC 関数も、数値の小数点以下を切り捨てます。
基本的に INT と似た動きをしますが、負の数の扱いなどが少し異なります。

(今回のケースではほぼ同じ結果になります)

ROUNDDOWN関数

=A1 - ROUNDDOWN(A1/B1, 0) * B1

ROUNDDOWN 関数は、指定した桁数で数値を切り捨てます。

桁数に 0 を指定すれば、小数点以下を切り捨てて整数部分を得られます。

QUOTIENT関数

=A1 - QUOTIENT(A1, B1) * B1

QUOTIENT 関数は、まさに割り算の商の「整数部分」を直接返すために用意された関数です!

これを使えば A1/B1 という割り算を数式内でする必要もありません。

FLOOR.MATH関数

=A1 - FLOOR.MATH(A1/B1, 1) * B1

FLOOR.MATH 関数は、指定された基準値の倍数になるように数値を切り下げる関数です。

A1/B1 の結果(商)を、基準値 1 の倍数になるように切り下げる
つまり小数点以下を切り捨てることになります。

また、元の数 (A1) から、
その数自身を超えない範囲で最も大きい『割る数 (B1) の倍数』を引き算する、

=A1 - FLOOR.MATH(A1, B1)
でも同様の結果になります。

INT関数なしで、INTと同様の数式を組む記事はこちら!
Excel関数パズル!INT関数なしで同じ計算をする5つの方法

動作確認

A1セルに 1000、B1セルに 13 を入力した場合、
上記のいずれの数式を使っても、求める余りは 12 と表示されるはずです。

(1000 ÷ 13 = 76 余り 12

数式の一覧

解説 (方法1まとめ)

基本的な考え方

これらの方法はすべて、

余り = 元の数 – (商の整数部分 × 割る数)」

という考え方に基づいています。

使用した関数

商の整数部分を求めるため INT, TRUNC, ROUNDDOWN, QUOTIENT, FLOOR.MATH といった、切り捨て商の整数部を求める機能を持つ関数を利用しました。

メリット&デメリット (方法1まとめ)

  • メリット:
    • 余りを求める数学の基本に沿った直感的な考え方。
    • 使用する関数(特に INTQUOTIENT)の分かりやすさ。
  • デメリット:
    • 特に大きなデメリットはないが、MOD 関数と比べて数式が長くなる。

方法2:切り上げ系の関数で余りを出す! (2つのアプローチ)

考えかた

今度は、あえて「切り上げ」系の関数を使って商の整数部分を導き出す、
少しトリッキーな方法で余りの計算に挑戦してみましょう。

単純に切り上げる商の整数部分にはなりませんが、
割り切れる場合と割り切れない場合で処理を分けることで、辻褄を合わせます!

ここでは IF 関数との組み合わせがカギになります。

手順

まず、余りを表示したい別のセル(例: C6セル)を選択します。

次に、以下に示すいずれかの数式を入力します。

ROUNDUP関数とIF関数

=A1 - IF(A1/B1 = ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0) - 1) * B1

ROUNDUP 関数は、数値を指定した桁数で切り上げる関数です。

小数点以下を切り上げて整数にする場合などに使います。

最初に A1/B1 を小数点以下で切り上げた値と、
元の A1/B1 が等しいかどうかで、割り切れるかを判断します。

Excelの説明画像

もし割り切れる場合は、切り上げた値(=商)がそのまま使えます。

=A1 - IF(A1/B1 = ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0) - 1) * B1

一方、割り切れない場合は、切り上げた値から 1 を引くことで商の整数部分を得ています。

=A1 - IF(A1/B1 = ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0), ROUNDUP(A1/B1, 0) - 1) * B1

CEILING関数とIF関数

=A1 - B1 * (CEILING(A1/B1, 1) - IF(CEILING(A1/B1, 1) = A1/B1, 0, 1))

CEILING 関数も指定した基準値の倍数になるように切り上げる関数です。

(Excel 2021ではCEILING.MATH が推奨されますが、CEILING も使用可能です)。

まず、基準値 1 で切り上げることで、商を整数に切り上げます。

ROUNDUP の例と考え方は似ており、IF 関数を使って処理を分けます。

切り上げた結果が元の A1/B1 と同じ(=割り切れる)なら 0 を、異なる(=割り切れない)なら 1 を、切り上げた値から引きます。

これにより、結果的に商の整数部分を計算しています。

動作確認

A1セルに 1000、B1セルに 13 を入力した場合、
これらの数式でも求める余りは 12 と表示されるはずです。

Excelの説明画像

解説 (方法2まとめ)

切り上げ関数とIF関数の連携

切り上げ系の関数 ROUNDUPCEILING を使いつつ、
IF 関数で「割り切れる場合」と「割り切れない場合」の処理を分岐させています。

これにより、商の整数部分を算出しています。

方法1に比べると、やや回り道をしているような数式ですね。(…というか、無駄です。)

メリット&デメリット (方法2まとめ)

  • メリット:
    • 切り上げ系関数でも「余り」の計算が可能な実証。
    • IF 関数との組み合わせの良い練習。
  • デメリット:
    • 方法1よりも複雑な数式で、一見して理解しにくい点。
    • 直感的ではないアプローチ。

方法3:TEXTとREPLACEで小数部分から攻める!?【マニアック】

考えかた

最後は、かなりマニアックな方法です!

まず、発想を変えて、
「余り」を直接求めるのではなく、

余り = (商の小数部分) × (割る数)

という考え方を利用します。

どうやって MOD 関数や他の数値計算関数を使わずに「商の小数部分」だけを抜き出すか?

そこで登場するのが、なんと文字列操作関数

手順としては、最初に A1/B1 の計算結果を TEXT 関数で一度文字列に変換します。

Excelの説明画像

次に、FIND 関数で小数点の位置を探します。

Excelの説明画像

続いて、REPLACE 関数で整数部分を “0” に置き換えて “0.xxxx” という文字列を作り出します。

Excelの説明画像

最後に VALUE 関数で数値に戻し、割る数 B1 を掛けて目的の「余り」を算出する、
というアイディア満載の手順です!

Excelの説明画像

手順

まず、余りを表示したいさらに別のセル(例: C8セル)を選択します。

次に、以下の数式を入力します。

覚悟はいいですか?(笑)

TEXT, REPLACE, FIND, VALUE, IFERROR の合わせ技

=IFERROR(VALUE(REPLACE(TEXT(A1/B1,"0.000000000000"),1,FIND(".",TEXT(A1/B1,"0.000000000000"))-1,"0"))*B1, 0)

TEXT 関数の “0.00…” の部分の桁数は、
必要な精度に応じて調整が必要になる場合があります

動作確認

A1セルに 1000、B1セルに 13 を入力した場合、この複雑な数式でも求める余りは 12 と表示される…はずです!

ただし、注意点として、この方法は内部的に浮動小数点演算と文字列変換を経由します。

そのため、扱う数値によっては計算誤差が生じる可能性があります。

厳密な計算には注意が必要です。

また、割り切れる場合(例: A1=10, B1=2)は、FIND 関数が 「. (ドット)」 を見つけられずにエラーになる可能性があります。

そのため、IFERROR 関数でエラー時に 0 を返すようにしています。

浮動小数点の壁を超えるミッションは、Excelの限界突破!2の100乗を正確に計算・表示する方法 にて紹介しています!興味のある方は是非ご覧ください。

解説

文字列への変換 (TEXT)

まず、TEXT(A1/B1,"0.00...") を使います。

これで A1/B1 の結果を、指定した小数点以下の桁数を持つ文字列に変換します。

(例: “76.923076923077”)

小数点の位置特定 (FIND)

次に、FIND(".", TEXT(...)) を使います。

これで文字列化された結果から、小数点 . の位置を見つけます。

(例: 3)

小数部分の文字列抽出 (REPLACE)

続いて、REPLACE(TEXT(...), 1, FIND(...)-1, "0") を使います。

TEXT の結果の、1文字目から小数点の手前まで (FIND(…)-1 文字分) を “0” に置き換えます。

(例:”76.923076923077“→ “0.923076923077“)。

これで小数部分を表す文字列ができました。

数値への再変換 (VALUE)

そして、VALUE(REPLACE(...)) を使います。

これで “0.xxxx” という文字列を、実際の数値に変換します。

余りの計算

VALUE(...) * B1 を計算します。

得られた小数部分の数値に、割る数 B1 を掛けて余りを算出します。

(例: 0.923076923077 * 13 → 12)

エラー処理 (IFERROR)

最後に、IFERROR(…, 0) を使います。

上記の「余り」の計算過程でエラーが発生した場合は、
結果として 0 を表示します。

メリット&デメリット

  • メリット:
    • 数値計算を文字列操作関数で行う、非常にトリッキーで面白いアプローチ。
    • 複数の関数を複雑に組み合わせる、関数の多様な使い方の習得
  • デメリット:
    • 「余り」を求めるには非常に長く複雑怪奇な数式!
    • 浮動小数点演算文字列変換に伴う計算誤差のリスク
    • TEXT 関数の小数点以下の桁数指定への依存による汎用性の欠如。
    • 実務での使用はまず推奨されない!

参考:今回登場した主な関数

今回の「MOD関数封印」チャレンジで活躍した関数たちを簡単にご紹介します。

  • INT: 数値の小数点以下を切り捨てて整数に。
  • TRUNC: 数値の小数点以下を切り捨てて指定した桁まで表示。
  • ROUNDDOWN: 指定した桁数での数値切り捨て
  • QUOTIENT: 割り算の「整数部分」だけを返す。
  • FLOOR.MATH: 指定された基準値の倍数になるように、数値を切り捨て
  • ROUNDUP: 指定した桁数での数値切り上げ
  • CEILING: 指定された基準値の倍数になるように、数値を切り上げ。(Excel 2021ではCEILING.MATH推奨)
  • IF: 指定した条件によって異なる値を返す。
  • TEXT: 数値を、指定した表示形式の文字列に変換。
  • REPLACE: 文字列内の指定した位置から、指定した文字数分の文字列を、別の文字列で置き換える。
  • FIND: 文字列内で特定の文字や文字列が最初に現れる位置を返す。
  • VALUE: 数字を表す文字列の、数値への変換。
  • IFERROR: 数式結果がエラーの場合の、指定値(今回は0)を返す。

まとめ

今回は、「MOD関数を使わないで余りを出す」というテーマで、
8つの方法を探求してみました。

INTQUOTIENT を使った方法は比較的シンプルで分かりやすかった一方、
TEXTREPLACE といった文字列関数を駆使する方法は、実用性0ですね。

もちろん、実務で余りを計算するなら MOD 関数を使うのが最も簡単で確実です。

今回紹介した方法(特に方法3)を積極的に使う場面は少ないでしょう。(いや、ほぼ0ですね。)

しかし、普段使わない関数やテクニックに触れることで、

「こんな考え方もできるんだ!」「この関数にはこんな特性があるんだ!」

という発見があります。

それが数式を作る力応用力を高めるきっかけになるはずです。

たまには、こんな「関数パズル」に挑戦してみるのも、
Excelスキル向上の面白いトレーニングになるかもしれませんね!

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