Excelのmod
関数に相当するvbaはありますか?
mod演算子 が必要です。
_The expression a Mod b is equivalent to the following formula:
a - (b * (a \ b))
_
追加して編集:
Excelは浮動小数点演算を使用している(そしてfloat
を返す)ため、VBA関数は整数を返すため、考慮しなければならない特殊なケースがいくつかあります。このため、mod
を浮動小数点数で使用するには、特別な注意が必要になる場合があります。
Excelの結果は、予測と正確に一致しない場合があります。これについては、簡単に説明します ここ(最上位の回答を参照) および長さ ここ 。
@Andréがコメントで指摘しているように、負の数は予想とは反対の方向に丸められる場合があります。彼が提案するFix()
関数について説明します ここ(MSDN) 。
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モジュールで
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を返します
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function
この関数は常に機能し、Excel関数の正確なコピーです。
ただし、奇数反復と偶数反復の違いを伝えたいだけの場合は、これで十分です。
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
一番上の答えは実際には間違っています。
推奨される方程式:a - (b * (a \ b))
解決する:_a - a
_
もちろん、これはすべての場合で0です。
正しい方程式は次のとおりです。
a - (b * INT(a \ b))
または、数値(a)が負になる可能性がある場合は、これを使用します。
a - (b * FIX(a \ b))