Existe-t-il un équivalent vba de la fonction mod
d'Excel?
Vous voulez le opérateur mod .
The expression a Mod b is equivalent to the following formula:
a - (b * (a \ b))
Édité pour ajouter:
Vous devrez peut-être prendre en compte certains cas particuliers, car Excel utilise des maths en virgule flottante (et renvoie un float
), pour lequel la fonction VBA renvoie un entier. Pour cette raison, utiliser mod
avec des nombres à virgule flottante peut nécessiter une attention particulière:
Les résultats d'Excel peuvent ne pas correspondre exactement à vos prévisions. ceci est couvert brièvement ici (voir la réponse en haut) et très longuement ici .
Comme @ André l’a souligné dans les commentaires, les nombres négatifs peuvent arrondir dans le sens opposé à celui que vous attendez. La fonction Fix()
qu'il suggère est expliquée ici (MSDN) .
Ma façon de répliquer la MOD(a,b)
d'Excel dans VBA consiste à utiliser XLMod(a,b)
dans VBA où vous incluez la fonction:
Function XLMod(a, b)
' This replicates the Excel MOD function
XLMod = a - b * Int(a / b)
End Function
dans votre module VBA
Soyez très prudent avec la fonction Excel MOD (a, b) et l'opérateur VBA a Mod b. Excel renvoie un résultat en virgule flottante et VBA un entier.
Dans Excel = Mod (90.123,90) renvoie 0.123000000000005 au lieu de 0.123 Dans VBA 90.123, Mod 90 renvoie 0
Ils ne sont certainement pas équivalents!
Les équivalents sont: Dans Excel: = Round (Mod (90.123,90), 3) en retournant 0,123 et En VBA: ((90.123 * 1000) Mod 90000)/1000 en retournant également à 0,123.
Function Remainder(Dividend As Variant, Divisor As Variant) As Variant
Remainder = Dividend - Divisor * Int(Dividend / Divisor)
End Function
Cette fonction fonctionne toujours et est la copie exacte de la fonction Excel.
Mais si vous voulez juste faire la différence entre une itération étrange et une itération paire, cela fonctionne très bien:
If i Mod 2 > 0 then 'this is an odd
'Do Something
Else 'it is even
'Do Something Else
End If
La meilleure réponse est en fait fausse.
L'équation suggérée: a - (b * (a \ b))
Résoudra à: a - a
Ce qui est bien sûr 0 dans tous les cas.
L'équation correcte est:
a - (b * INT(a \ b))
Ou, si le nombre (a) peut être négatif, utilisez ceci:
a - (b * FIX(a \ b))