jueves, noviembre 20, 2008

La función RESIDUO de Excel con números negativos.

Hemos visto diversos usos de la función RESIDUO en varias notas de este blog. Por ejemplo, para superar el problema de diferencias negativas en cálculos de horas o para generar fondos para facilitar la lectura de tablas.

En esta nota veremos algunos aspectos del uso de esta función. Empecemos por su definición. Según la ayuda en línea de Excel:

RESIDUO proporciona el residuo después de dividir un número por un divisor

Es decir RESIDUO(3,2) = 1

Si investigamos un poco más la ayuda de Excel vemos que esta función equivale a la expresión

n - d*ENTERO(n/d)

donde "n" es el número a dividir y "d" es el divisor

Veamos cuál será el residuo de dividir 30 por 4, considerando que ambos números pueden ser positivos o negativos:





Vemos que en todos los casos el resultado es el mismo, excepto por el signo que es el del divisor.

Pero si calculamos el residuo de 34 dividido por 6 vemos estos resultados



Estos resultados se deben a que el residuo se define como la diferencia entre el múltiplo entero más grande del divisor que no supera al dividendo. En el caso que estamos considerando, 30 es el múltiplo más grande (6 * 5) que no supera al dividendo (34) y la diferencia entre ellos es 4.
Pero cuando consideramos un dividendo negativo, como -34, el mayor múltiplo de 6 que no supera a -34 es -36 (6 * -6) y la diferencia es obviamente 2.

En Visual Basic existe el operador MOD cuya función es la misma que la de la función RESIDUO. Sin embargo el operador no siempre da resultados idénticos a los de la función RESIDUO.
MOD es usado como operador, es decir, para encontrar el residuo de 34 dividido por 6 escribimos en un módulo de Vba

34 Mod 6

Podemos usar la ventana Inmediate del editor de Vba para ver los resultados



Como pueden observar los resultados son inconsistentes. Para hacerlo más evidente podemos crear una función UDF (definida por el usuario) y usarla luego en la hoja para compara los resultados

Function residuo_vba(n As Double, d As Double)
residuo_vba = n Mod d
End Function


En esta tabla se puede ver que los resultados de las dos funciones son inconsistentes



Sin entrar a considerar cuál de los resultados es el correcto, tema que dejo librado a los matemáticos, podemos usar esta fórmula para obtener con funciones los mismos resultados como con el operador MOD de VBa

número - divisor *COCIENTE(número, divisor)

como podemos ver en esta tabla



Para usar la función COCIENTE (QUOTIENT en inglés) hay que tener instalado el complemento Analysis ToolPak.




Technorati Tags:

2 comentarios:

  1. Mejor aclaración imposible... Gracias

    ResponderBorrar
  2. Disculpa y en caso de que no necesitemos un resultado con signo negativo no es mas facil agregarle al dividendo y divisor previamente la funcion de valor absoluto ABS

    =RESIDUO(ABS(34),ABS(6))
    =RESIDUO(ABS(-34),ABS(6))
    =RESIDUO(ABS(34),ABS(-6))
    =RESIDUO(ABS(-34),ABS(-6))

    Como ves a menos que se requiera del resultado con signo negativo

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.