viernes, junio 30, 2006

Simplificando la función SI (IF) combinando expresiones lógicas.

Una de las funciones más usadas en Excel es la función SI. La ayuda on-line de Excel la define así: "devuelve un valor si la condición especificada es VERDADERO y otro valor si dicho argumento es FALSO."
La sintaxis de esta función es:


=SI(prueba_lógica;valor_si_verdadero;valor_si_falso)

Para crear pruebas más elaboradas Excel nos permite anidar hasta siete funciones SI como argumentos valor_si_verdadero y valor_si_falso.
En entradas anteriores ya había comentado que crear formulas con varias funciones SI anidadas, suele resultar en fórmulas "chorizo" difíciles de entender y conllevan una nada despreciable inversión de tiempo.

Algunas de las alternativas, dependiendo del caso, pueden ser usar la función ELEGIR (CHOOSE) en lugar de SI o utilizar la función BUSCARV en lugar de anidar varias funciones SI.

Otra alternativa, en especial cuando tenemos varias condiciones que deben cumplirse, es crear fórmulas con expresiones lógicas combinadas con operadores "+".

Qué es una expresión lógica? Funciones (expresiones) en Excel pueden dar resultados numéricos o ser resueltas como expresión lógica con el valor VERDADERO o el valor FALSO. Si escribimos la fórmula "=A1=B1", Excel dará como resultado o FALSO o VERDADERO.
Esta característica puede ser aprovechada para crear una alternativa a la función SI. Veremos esto con un ejemplo. Supongamos un club de compras, donde los clientes reciben descuentos sobre las compras mensuales basados en las siguientes reglas







Nuestra tarea es determinar el descuento que le corresponde a cada cliente dados estos datos:



Para determinar el descuento de cada cliente no utilizaremos funciones SI, sino expresiones lógicas. Dado que tenemos que tener en cuenta dos condiciones (las compras del mes corriente y las del anterior) usaremos la función Y (AND en su versión inglesa) para armar la expresión lógica.
La fórmulas que expresan las condiciones de los descuentos son:



Por ejemplo, si la expresión =Y(B5<5000,c5<5000) es verdadera, la fórmula

=Y(B5<5000,c5<5000)*0.05

da como resultado 5%. Si la expresión no se cumple, el resultado de la fórmula será 0.

Combinamos las fórmulas para cada uno de los casos en una única formula con el operador "+"

=Y(B5<5000,C5<5000)*0.05+Y(B5<5000,c5>=5000)*0.07+Y(B5>=5000,C5<5000)*0.10+Y(B5>=5000,C5>=5000)*0.12

y la copiamos en el rango D5:D14



Esta fórmula es más explicita y manejable que la equivalente usando funciones SI anidadas.


Categorías: Funciones&Formulas_

Technorati Tags:


15 comentarios:

  1. Fijándonos en que los descuentos son del 5% para pedidos menores de 5.000 en el mes, y 10% para iguales o superiores y que hay un 2% adicional para pedidos del mes anterior mayores o iguales que 5.000. Creo que se podría reducir a:

    =SI(B5<5000;0,05;0,10)+(C5>=5000)*0,02

    ResponderBorrar
  2. Hola, efectivamente, se puede reducir a la fórmula que propones. La idea de la entrada es mostrar como resolver proposiciones lógicas sin utilizar la función SI.
    Gracias por el comentario.

    ResponderBorrar
  3. Perdona, completamente cierto, son cosas de informático, aficionado a las matemáticas y obsesionado por la optimización.

    ResponderBorrar
  4. No tienes por qué disculparte. Es más, tu comentario en mi entrada sobre el uso de ELEGIR en lugar de SI me hizo ver que a veces, por querer mostrar una técnica determinada, paso por alto cuestiones de optimización.
    Tus observaciones son bienvenidas.

    ResponderBorrar
  5. Solo queria consultar...
    Tengo un Ecxel en el cual se lleca la Facturación mensual de la empresa en la cual trabajo.
    Cada factura cuenta con cuatro estados diferentes segun se van completando datos en otras celdas.
    En la ceda "A" es donde para una Facrtura puede figurar cualquiera de los siguientes estados: A Cobrar, A Depositar, Anulada o Cerrado.
    Por el momento el cambio de los estados es manual, pero lo ideal seraia que a medida que se van cargando los datos de las fechas de cobro, depositos y montos los estados vayan cambiando automaticamente.
    Mi pregunta es... Es posible lograr esto? D es er así, como puedo hacerlo?

    Muchisimas gracias desde ya.

    Salut!

    ResponderBorrar
  6. Hola Carla,
    se puede y hay varias formas de hacerlo, dependiendo del diseño de la hoja (es decir, de cómo están organizados los datos).
    Lo que puedes hacer es mandarme una copia del archivo (o un ejemplo) para que me haga una idea. Puedes enviarlo a jorgedun@maaganm.co.il

    ResponderBorrar
  7. Hola Jorge,
    Felicitarte por tu blog en primer lugar y solicitarte tu apoyo en la resolucion de este caso, tengo dos listas, la primera tengo una columan de resultados, en la segunda una tabla de rangos, lo que busco es ubicar en que rango de valores se encuentra un valor de la primera lista con respecto a la tabla de rangos.

    Espero me puedas ayudar.

    Saludos

    ResponderBorrar
  8. Hola Dick

    mis disculpas por la demora. En breve estaré publicando una nota sobre el tema.

    ResponderBorrar
  9. Tengo una consulta con respecto al uso de la funcion si.
    En mi trabajo usamos para facturar una planilla que esta armada con la funcion si para traer los precios de los distintos productos.
    Ahora, mi consulta es si es posible hacer que eligiendo en primer lugar entre dos formas de pago (pago anticipado, o contado, por ejemplo) el excel traiga uno u otro resultado de las dos listas de precios

    ResponderBorrar
  10. Agustina,
    si. Lo más corriente es combinar la función SI con la función BUSCARV. Suponiendo que la lista de precios tiene una columna para los precios en caso de pago por anticipado y otra para los pagos al contado, la fórmula sería algo como
    =SI(A1="anticipado", BUSCARV(......),SI(A1="contado",BUSCARV(....),BUSCARV(....))

    ResponderBorrar
  11. Hola Jorge! Gracias por tu block, que ya me ha sido útil muchas otras veces. Tengo una duda respecto a lo que aquí planteas. Supongamos que queremos hacer cálculos con los datos de la columna de porcentage en función de las otras dos condiciones anteriores, por ejemplo, si el mes corriente y el anterior han facturado más de 5000, multiplicar el porcentage por otros datos disponibles en otra columna (el valor numérico al cual piensas aplicar el % de descuento, x.e.). ¿Podría hacerse esto con una función lógica?
    Ejemplo
    A B C D
    condición1 cond.2 valor 1 valor 2

    Si se cumple la condición 1 y la cond. 2, múltiplica el valor 1 por el valor 2...

    No sé si me he explicado bien.

    Muchas gracias por la ayuda!

    ResponderBorrar
  12. Si, podrías anidar funciones SI e Y. Por ejemplo

    =SI(Y(A2>5000;B2<3000);C2*15%;C2*5%)

    ResponderBorrar
  13. Hola Jorge, felicidades por tu blog, está buenisimo.

    Una pregunta ¿Se pueden anidar las funciones SI, Y, con otras como SUMA?

    Lo que pasa es que tengo una tabla en la que se registran las ventas realizadas, y necesito obtener los montos vendidos por vendedor, por producto.

    Estoy probando con esta fórmula, pero no funciona:

    =if(and(c5:c9999="Daniel Gil",e5:e9999="GMM",sum(j5:j9999))

    Muchas gracias de antemano!

    Daniel Gil
    danielgil@hotmail.com

    ResponderBorrar
  14. En lugar de combinaciones de funciones te sugiero usar tablas dinámicas. Si quieres usar funciones tu mejor alternativa es SUMAPRODUCTO.

    ResponderBorrar
  15. wow, soy una persona que debería de estar super familiarizada con excel de estar forma, sin embargo no lo estoy y ahora que requiero hacer uso de ciertas funciones me he dado cuenta gracias a tu blog lo maravilloso que es, en serio muchas gracias!

    ResponderBorrar

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