The expression a Mod b is equivalent to the following formula:
a -(b *(a \ b))
Modifiées afin d'ajouter:
Il existe quelques cas particuliers que vous pourriez avoir à prendre en compte, car Excel à l'aide de calcul en virgule flottante (et retourne un float), dont la fonction VBA qui renvoie un entier. De ce fait, à l'aide de mod avec des nombres à virgule flottante nécessitent plus d'attention:
D'Excel, les résultats peuvent ne pas correspondre exactement avec ce que vous pourriez prévoir, ce qui est couvert brièvement ici (voir plus haut la réponse) et à grande longueur ici.
Comme @André points dans les commentaires, les nombres négatifs peuvent tour dans la direction opposée de ce que vous attendez. Le Fix() fonction qu'il suggère est expliqué ici (en anglais).
Vous feriez mieux de changer de (a \ b) pour Fix(a / b). Sinon, vous risquez d'avoir des problèmes avec décimale arguments. Essayer votre formule avec a = 1.75 et b = 1 et vous verrez mon point.
La formule proposée est incorrecte et produit toujours 0 comme réponse
Je pense que vous êtes confus le ` \ ` opérateur avec /. Ils sont différents.
\ et mod sont à la fois 32 bits uniquement. / et int semblent fonctionner sur le double.
+1 le langage VBA page de référence pour Mod est ici
L'opérateur mod n'est pas équivalent, car il ne peut pas revenir précision en virgule flottante, à la différence de la fonction excel.
Sachez que la Excel fonction MOD calcule différemment que le VBA opérateur Mod lorsque les nombres négatifs sont utilisés. Je viens de découvrir cela avec de simples entiers. Je m'attendais à voir une explication plus détaillée de cette question sur cette page. Dans VBA 11 Mod -5 = 1 où, comme Excel la formule de MOD(11,-5) = -4 Dans mon cas, j'ai décidé d'utiliser le XLMod() la fonction indiquée sur cette page, au lieu de la Mod VBA opérateur.
Être très prudent avec les Excel MOD(a,b) la fonction et le VBA un Mod b de l'opérateur.
Excel renvoie un résultat en virgule flottante et VBA est 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 équivalent!
Équivalent sont:
Dans Excel: =Round(Mod(90.123,90),3) le retour 0.123 et
Dans VBA: ((90.123 * 1000) Mod 90000)/1000 retour aussi 0.123
Il y a beaucoup de mises en garde à propos de virgule flottante résultats. +1 pour la fourniture d'un exemple.
Ou, si le nombre (a) peut être négatif, utilisez ceci:
a - (b * FIX(a \ b))
\ opérateur n'est pas la même chose que / opérateur \ Le résultat est le quotient entier de expression1 divisé par expression2, qui ignore tout le reste et ne conserve que la partie entière. Ceci est connu comme la troncature. L'Opérateur / (Visual Basic) retourne la totalité du quotient, qui conserve le reste de la partie fractionnaire. msdn.microsoft.com/en-us/library/0e16fywh.aspx
-1 Comme expliqué par Cheeky Charlie cette réponse est trompeuse, basé sur une hypothèse erronée; si vous n'êtes pas convaincu, essayez d'entrer Msgbox 3 - (2 * (3 \ 2)) dans la fenêtre de l'éditeur VBA, qui renvoie 1 comme prévu à partir de la fonction modulo au lieu de 0 comme postulé par cette affiche.
Cette fonction fonctionne toujours et est la copie exacte de la fonction Excel.
Bien que cette réponse est probablement correct et utile, il est préférable, si vous incluez une explication avec elle pour expliquer comment elle aide à résoudre le problème. Ceci est particulièrement utile dans le futur, si il y a un changement (éventuellement sans rapport) qui provoque l'arrêt de travail et les utilisateurs doivent comprendre comment il a travaillé autrefois.
Vous voulez le opérateur mod.
Modifiées afin d'ajouter:
Il existe quelques cas particuliers que vous pourriez avoir à prendre en compte, car Excel à l'aide de calcul en virgule flottante (et retourne un
float
), dont la fonction VBA qui renvoie un entier. De ce fait, à l'aide demod
avec des nombres à virgule flottante nécessitent plus d'attention:D'Excel, les résultats peuvent ne pas correspondre exactement avec ce que vous pourriez prévoir, ce qui est couvert brièvement ici (voir plus haut la réponse) et à grande longueur ici.
Comme @André points dans les commentaires, les nombres négatifs peuvent tour dans la direction opposée de ce que vous attendez. Le
Fix()
fonction qu'il suggère est expliqué ici (en anglais).(a \ b)
pourFix(a / b)
. Sinon, vous risquez d'avoir des problèmes avec décimale arguments. Essayer votre formule aveca = 1.75
etb = 1
et vous verrez mon point./
. Ils sont différents.En vba la fonction MOD.
e.g
Ici est utile lien.
Mod
est ici11 Mod -5 = 1
où, comme Excel la formule deMOD(11,-5) = -4
Dans mon cas, j'ai décidé d'utiliser le XLMod() la fonction indiquée sur cette page, au lieu de la Mod VBA opérateur.Ma façon de répliquer Excel
MOD(a,b)
en VBA est d'utiliserXLMod(a,b)
en VBA où vous incluez la fonction:dans votre Module VBA
Être très prudent avec les Excel MOD(a,b) la fonction et le VBA un Mod b de l'opérateur.
Excel renvoie un résultat en virgule flottante et VBA est 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 équivalent!
Équivalent sont:
Dans Excel: =Round(Mod(90.123,90),3) le retour 0.123 et
Dans VBA: ((90.123 * 1000) Mod 90000)/1000 retour aussi 0.123
La
Mod
de l'opérateur, est à peu près équivalent à laMOD
function:number Mod divisor
est à peu près équivalent àMOD(number, divisor)
.Haut réponse est en fait mal.
Le suggère l'équation:
a - (b * (a \ b))
Permettra de résoudre à:
a - a
Qui est de la course de 0 dans tous les cas.
La bonne équation est:
a - (b * INT(a \ b))
Ou, si le nombre (a) peut être négatif, utilisez ceci:
a - (b * FIX(a \ b))
Mais si vous voulez juste faire la différence entre une itération impaire et une même itération, cela fonctionne bien:
Cette fonction fonctionne toujours et est la copie exacte de la fonction Excel.