VBA equivalente a la función mod de Excel

¿Hay un vba equivalente a la función mod de Excel?

Quieres el operador de mod .

 The expression a Mod b is equivalent to the following formula: a - (b * (a \ b)) 

Editado para agregar:

Hay algunos casos especiales que puede tener que considerar, porque Excel está usando matemáticas de coma flotante (y devuelve un float ), que la función VBA devuelve un entero. Debido a esto, el uso de mod con números de coma flotante puede requerir atención adicional:

  • Los resultados de Excel pueden no corresponder exactamente con lo que predecirías; esto se trata brevemente aquí (ver la respuesta más alta) y en detalle aquí .

  • 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 aquí (MSDN) .

En vba, la función es MOD. p.ej

  5 MOD 2 

Aquí hay un enlace útil.

Mi forma de replicar MOD(a,b) Excel en VBA es usar XLMod(a,b) en VBA donde incluya la función:

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

en tu módulo VBA

Tenga mucho cuidado con la función Excel MOD (a, b) 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 0.123000000000005 en lugar de 0.123 En VBA 90.123 Mod 90 devuelve 0

¡Ciertamente no son equivalentes!

Equivalente son: En Excel: = Redondeado (Modificado (90.123,90), 3) Retorno 0.123 y En VBA: ((90.123 * 1000) Modificado 90000) / 1000 retornando también 0.123

El operador Mod es aproximadamente equivalente a la función MOD :

number Mod divisor es más o menos equivalente a MOD(number, divisor) .

La respuesta principal es realmente incorrecta.

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

Resolverá a: a - a

Lo cual es por supuesto 0 en todos los casos.

La ecuación correcta es:

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

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

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

Pero si solo quieres 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 
 Function Remainder(Dividend As Variant, Divisor As Variant) As Variant Remainder = Dividend - Divisor * Int(Dividend / Divisor) End Function 

Esta función siempre funciona y es la copia exacta de la función de Excel.