web-dev-qa-db-fra.com

VBA équivalent à la fonction mod Excel

Existe-t-il un équivalent vba de la fonction mod d'Excel?

36
Arlen Beiler

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) .

34
egrunin

Dans vba, la fonction est MOD. par exemple

 5 MOD 2

Voici un utile lien .

57
Vincent Ramdhanie

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

8
Michael Wilson

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.

7
Carlo

L'opérateur Mod est à peu près équivalent à la fonction MOD :

number Mod divisor Est à peu près équivalent à MOD(number, divisor).

3
LukeH
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.

0

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
0
Rhys

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))

0
Stu