webdevqa.jp.net

Excelのmod関数に相当するVBA

Excelのmod関数に相当するvbaはありますか?

36
Arlen Beiler

mod演算子 が必要です。

_The expression a Mod b is equivalent to the following formula:

a - (b * (a \ b))
_

追加して編集:

Excelは浮動小数点演算を使用している(そしてfloatを返す)ため、VBA関数は整数を返すため、考慮しなければならない特殊なケースがいくつかあります。このため、modを浮動小数点数で使用するには、特別な注意が必要になる場合があります。

  • Excelの結果は、予測と正確に一致しない場合があります。これについては、簡単に説明します ここ(最上位の回答を参照) および長さ ここ

  • @Andréがコメントで指摘しているように、負の数は予想とは反対の方向に丸められる場合があります。彼が提案するFix()関数について説明します ここ(MSDN)

34
egrunin

Vbaでは、関数はMODです。例えば

 5 MOD 2

これが便利な link です。

57

VBAでExcelのMOD(a,b)を複製する私の方法は、VBAでXLMod(a,b)を使用して関数を含めることです。

Function XLMod(a, b)
    ' This replicates the Excel MOD function
    XLMod = a - b * Int(a / b)
End Function

vBAモジュールで

8
Michael Wilson

Excel MOD(a、b)関数とVBA a Mod b演算子には非常に注意してください。 Excelは浮動小数点の結果を返し、VBAは整数を返します。

Excelでは= Mod(90.123,90)は0.123ではなく0.123000000000005を返しますVBA 90.123ではMod 90は0を返します

それらは確かに同等ではありません!

同等:Excelの場合:= Round(Mod(90.123,90)、3)0.123を返し、VBAの場合:((90.123 * 1000)Mod 90000)/ 1000も0.123を返します

7
Carlo

Mod演算子 は、 MOD関数 とほぼ同等です。

_number Mod divisor_は、MOD(number, divisor)とほぼ同等です。

3
LukeH
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
    Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function

この関数は常に機能し、Excel関数の正確なコピーです。

0

ただし、奇数反復と偶数反復の違いを伝えたいだけの場合は、これで十分です。

If i Mod 2 > 0 then 'this is an odd 
   'Do Something
Else 'it is even
   'Do Something Else
End If
0
Rhys

一番上の答えは実際には間違っています。

推奨される方程式:a - (b * (a \ b))

解決する:_a - a_

もちろん、これはすべての場合で0です。

正しい方程式は次のとおりです。

a - (b * INT(a \ b))

または、数値(a)が負になる可能性がある場合は、これを使用します。

a - (b * FIX(a \ b))

0
Stu