Home » エクセルマクロ・Excel VBAの使い方 » VBAで割り算の余りを求めるMOD関数は?

対象:Excel2007, Excel2010, Excel2013

「エクセルvba mod関数の使い方」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気づきました。

Excelのワークシート関数には、割り算をしたときの余りを求めるMOD関数があります。

例えば下図のように、A1セルに「5」・B1セルに「2」が入力されているとき、C1セルに
「=MOD(A1, B1)」
という数式を入力すると、

VBAで割り算の余りを求めるMOD関数は?

5を2で割った余りの「1」がC1セルに計算されます。

VBAで割り算の余りを求めるMOD関数は?

「エクセルvba mod関数の使い方」
という検索をした方は、このワークシート関数のMODと同じ働きをするVBA(Visual Basic for Applications)の関数を探していたのでしょうか。

あるいは、
 ret = MOD(Range("A1").Value, Range("B1").Value)
といったコードを入力したものの構文エラーとなるので、どうすればいいのかを探していたのかもしれません。

[スポンサードリンク]

VBAにはMod関数はない

この検索キーワードに対して、まずは杓子定規にお答えすると、MODという名前の関数はVBAには存在しません。

VBE(Visual Basic Editor)に付属するオブジェクトブラウザーで、ライブラリーを「VBA」にして、

VBAで割り算の余りを求めるMOD関数は?

[クラス]ペインで「グローバル」を選択したときに、

VBAで割り算の余りを求めるMOD関数は?

[メンバー]ペインに表示されるのが、VBAの関数です。

VBAで割り算の余りを求めるMOD関数は?

ですが、ここで「mo」ではじまるメンバーを探しても、下図のとおりModという名前は見当たりません。

VBAで割り算の余りを求めるMOD関数は?

オブジェクトブラウザーで非表示のメンバーを表示しても同じです。VBAにはMod関数は存在しないということです。

WorksheetFunctionオブジェクトにもMod関数はない

Excelマクロの経験がある程度ある方だと、WorksheetFunctionプロパティでWorksheetFunctionオブジェクトを取得することで、VBAからワークシート関数を使えることをご存知でしょう。

このことをご存知の方だと、VBAにMod関数がないのならば、WorksheetFunction.Modと記述してワークシート関数のMODを使えばいいのではないか、と考えるかもしれません。

これもダメです。

下図のとおり、ExcelライブラリーのWorksheetFunctionオブジェクトにModメソッドはありません。

VBAで割り算の余りを求めるMOD関数は?

VBAで余りを求めるのはMod演算子

では、VBAでは、割り算の余りを求められないのかというと、勿論そんなことはありません。

VBAには、割り算の余りを求めるMod演算子が用意されています。関数ではなく演算子です。

Sub Mod演算子の使い方のサンプル()

 Dim ret As Long

 ret = Range("A1").Value Mod Range("B1").Value
 MsgBox ret

End Sub

一般的な割り算は、
 Dim ret As Single
 ret = Range("A1").Value / Range("B1").Value
のような使い方をします。この割り算をする演算子「/」を、割り算の余りだけを計算する演算子「Mod」にすればOKです。

ワークシート関数のMOD関数をご存知の方なら、書き方は違いますが、すぐに使えるのではないかと思います。

負の値・マイナスの数値の場合は要注意

正の値・プラスの数値を扱う場合は、ワークシート関数のMODとVBAのMod演算子で違いはありませんが、負の値・マイナスの数値が関係した場合、結果が異なりますから注意が必要です。

例えば、
A1セルに「-5」・B1セルに「2」が入力されているとき
MOD関数を使った「MOD(A1, B1)」は「1」を返すのに対し、
Mod演算子を使った「Range("A1").Value Mod Range("B1").Value」は「-1」
を返します。

逆に、
A1セルに「5」・B1セルに「-2」が入力されているとき
MOD関数を使った「MOD(A1, B1)」は「-1」を返すのに対し、
Mod演算子を使った「Range("A1").Value Mod Range("B1").Value」は「1」を返します。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBAで割り算の余りを求めるMOD関数は?

「エクセルマクロ・Excel VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.