Gibt es ein VBA, das der Funktion mod
von Excel entspricht?
Du willst den Mod Operator .
The expression a Mod b is equivalent to the following formula:
a - (b * (a \ b))
Bearbeitet, um hinzuzufügen:
Es gibt einige Sonderfälle, die Sie möglicherweise berücksichtigen müssen, da Excel Gleitkomma-Mathematik verwendet (und ein float
zurückgibt), wobei die VBA-Funktion eine Ganzzahl zurückgibt. Aus diesem Grund kann die Verwendung von mod
mit Gleitkommazahlen zusätzliche Aufmerksamkeit erfordern:
Die Ergebnisse von Excel stimmen möglicherweise nicht genau mit den Vorhersagen überein. Dies wird kurz behandelt hier (siehe oberste Antwort) und ausführlich hier .
Wie @ André in den Kommentaren hervorhebt, können negative Zahlen in die entgegengesetzte Richtung gerundet werden. Die Fix()
-Funktion, die er vorschlägt, wird erklärt hier (MSDN) .
Meine Methode, um das MOD(a,b)
von Excel in VBA zu replizieren, besteht darin, XLMod(a,b)
in VBA zu verwenden, wobei Sie die folgende Funktion einfügen:
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
in Ihrem VBA-Modul
Seien Sie sehr vorsichtig mit der Excel MOD (a, b) -Funktion und dem VBA a Mod b-Operator. Excel gibt ein Gleitkommaergebnis und VBA eine Ganzzahl zurück.
In Excel = Mod (90.123,90) gibt 0.123000000000005 anstelle von 0.123 zurück. In VBA 90.123 gibt Mod 90 0 zurück
Sie sind sicherlich nicht gleichwertig!
Äquivalent sind: In Excel: = Round (Mod (90.123,90), 3), das 0.123 zurückgibt, und in VBA: ((90.123 * 1000) Mod 90000)/1000, das auch 0.123 zurückgibt
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function
Diese Funktion funktioniert immer und ist die exakte Kopie der Excel-Funktion.
Wenn Sie jedoch nur den Unterschied zwischen einer ungeraden und einer geraden Iteration feststellen möchten, funktioniert dies einwandfrei:
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
Die Top-Antwort ist eigentlich falsch.
Die vorgeschlagene Gleichung: a - (b * (a \ b))
Wird lösen, um: a - a
Welches ist natürlich 0 in allen Fällen.
Die richtige Gleichung lautet:
a - (b * INT(a \ b))
Wenn die Zahl (a) negativ sein kann, verwenden Sie Folgendes:
a - (b * FIX(a \ b))