2010-12-07 21 views

Respuesta

30

Quiere el mod operator.

The expression a Mod b is equivalent to the following formula: 

a - (b * (a \ b)) 

Editado para agregar:

Hay algunos casos especiales que pueda tener en cuenta, porque Excel está utilizando cálculos de coma flotante (y devuelve un float), que la función de VBA devuelve un entero. Debido a esto, el uso de mod con números de punto flotante puede requerir una atención especial:

  • resultados de Excel pueden no corresponder exactamente con lo que se puede predecir; esto se cubre brevemente here (see topmost answer) y en gran longitud here.

  • Como señala @ André en los comentarios, los números negativos pueden redondear en la dirección opuesta a la esperada. La función Fix() que sugiere se explica here (MSDN).

+4

Será mejor que cambie '(a \ b)' para 'Fix (a/b)'. De lo contrario, puede tener problemas con los argumentos decimales. Prueba tu fórmula con 'a = 1.75' y' b = 1' y verás mi punto. –

+0

La fórmula sugerida es incorrecta y siempre producirá 0 como respuesta – PSVSupporter

+0

@PSVSupporter Creo que está confundiendo el operador '\' con '/'. Ellos son diferentes. – egrunin

42

En vba la función es MOD. por ejemplo

5 MOD 2 

Aquí es un útil link.

+4

+1 la página de referencia de idioma de VBA para 'Mod' es [aquí] (http://msdn.microsoft.com/en-us/library/office/gg264708%28v=office.14%29.aspx) – barrowc

+0

El operador mod no es equivalente porque no puede devolver la precisión flotante, a diferencia de la función excel. – johnzilla

7

Mi manera de replicar de Excel MOD(a,b) en VBA es el uso de XLMod(a,b) en VBA, donde se incluye la función:

Function XLMod(a, b) 
    ' This replicates the Excel MOD function 
    XLMod = a - b * Int(a/b) 
End Function 

en su módulo de VBA

4

tener mucho cuidado con el Ministerio de Defensa de Excel (a, b) función y el operador VBA a Mod b. Excel devuelve un resultado de punto flotante y VBA un entero.

En Excel = MOD (90.123,90) devuelve ,123000000000005 en lugar de 0,123 En VBA 90.123 Mod 90 vuelve 0

Desde luego, no son equivalentes!

equivalentes son: En Excel: = redondo (Mod (90.123,90), 3) devolver 0.123 y En VBA: ((90.123 * 1000) Mod 90000)/1000 volver también 0,123

1

La parte superior la respuesta es realmente incorrecta

La ecuación sugerida: a - (b * (a \ b))

resolverá a: a - a

que por supuesto es 0 en todos los casos.

La ecuación correcta es:

a - (b * INT(a \ b))

O, si el número (a) puede ser negativo, utilice esto:

a - (b * FIX(a \ b))

+1

\ operator no es lo mismo que/operador \ El resultado es el cociente entero de expression1 dividido por expression2, que descarta cualquier resto y conserva solo la parte entera. Esto se conoce como truncamiento. El/Operador (Visual Basic) devuelve el cociente completo, que conserva el resto en la parte fraccionaria. https://msdn.microsoft.com/en-us/library/0e16fywh.aspx –

0

Pero si lo que desea es decir la diferencia entre una iteración impar y una iteración par, esto funciona bien:

If i Mod 2 > 0 then 'this is an odd 
    'Do Something 
Else 'it is even 
    'Do Something Else 
End If 
Cuestiones relacionadas