Cesarettin señaló que la función de la hoja de trabajo MOD no puede producir un resultado cuando el número que se está evaluando es 268,435,456 o mayor y el divisor es 2. Si el número es menor que esto, no hay problema. Por ejemplo, si la función es MOD (268435455, 2) no hay problema. Se pregunta si hay alguna forma de usar la función MOD con números más grandes y un divisor de 2.

El problema es en realidad mayor de lo que propone Cesarettin. Microsoft conoce este problema; parece provenir de problemas con las fórmulas internas utilizadas por MOD. Puede encontrar más información sobre el error aquí:

http://support.microsoft.com/kb/119083

Básicamente, la función MOD devuelve un error si el divisor (el segundo argumento en la función MOD), multiplicado por 134,217,728, es menor o igual que el número que se evalúa (el primer argumento en la función MOD).

Por lo tanto, el problema ocurre cuando el número que se evalúa es 268,435,456 y el divisor es 2, el número que se evalúa es 402,653,184 y el divisor es 3, el número que se evalúa es 536,870,912 y el divisor es 4, etc.

La solución sugerida por Microsoft es simplemente no usar la función MOD y en su lugar confiar en la siguiente fórmula:

=number-(INT(number/divisor)*divisor)

Sin embargo, esta no es la única solución. También hay otros enfoques basados ​​en fórmulas que puede utilizar. Por ejemplo:

=MOD(MOD(number,134217728*divisor),divisor)

Esto resolverá números más grandes que el límite de MOD, pero teóricamente resolverá el mismo problema cuando el número que se evalúe alcance 134,217,728134,217,728 divisor. Para la mayoría de los usos, este límite es lo suficientemente grande como para que nunca se alcance.

Si solo necesita encontrar el módulo de un número dividido por 2, entonces puede insertar un cheque en su fórmula de la siguiente manera:

=MOD(IF(A1>=268435456,A1-268435456,A1),2)

Esto verifica si el número que se está evaluando (en este caso, en la celda A1) es mayor que el límite, y si lo es, resta el límite del número antes de calcular el módulo. También puede eliminar eficazmente el límite de MOD utilizando esta fórmula:

=MOD(MOD(number,2^16),2))

Esto lleva el número grande módulo 2 a la 16ª potencia, luego toma el valor resultante módulo 2. Si los números se ven como binarios, es fácil ver lo que está sucediendo. MOD (largenum, 2 ^ 16) simplemente coloca todos los bits a la izquierda del decimosexto dígito binario. Para el módulo 2, solo se requiere el dígito más a la derecha para determinar el resultado de todos modos, por lo que los bits eliminados nunca afectan el resultado, independientemente del valor.

Por supuesto, puede simplemente crear su propia función MOD en VBA y usarla en sus fórmulas en lugar de la función MOD incorporada.

Function DblMod(Dividend, Divisor)

' Declare two double precision variables     Dim D1 As Double     Dim D2 As Double

' Copy function arguments to local variables     D1 = Dividend     D2 = Divisor

DblMod = D1 Mod D2 End Function

La función simplemente le permite pasar dos argumentos a la función VBA. Luego se basa en la función VBA Mod, que no tiene la misma limitación que la función de hoja de trabajo MOD.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3302) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.