Si(), SI.CONJUNTO() y BUSCARV()

 Tres formas de resolver el mismo problema.




En el ejercicio que planteamos deseamos conocer el importe a pagar por cada uno de los pasajeros del vuelo Dallas-Bogotá. 
El precio del billete está marcado en 220 USD, pero se aplica una serie de descuentos en función de la edad del pasajero, datos que tenemos recogidos en la tabla Tarifas:
Por otro lado tenemos el listado de pasajeros con su fecha de nacimiento y edad:


Solución con la función SI()

La función SI(prueba lógica; [valor_si_verdadero];[valor_si_falso]), dispone de tres argumentos:
  • Prueba lógica. En este apartado de la función nos solicita que le planteemos "una pregunta" cuya respuesta sea "Sí" o "No".
  • Valor si verdadero. En este segundo argumento, nos pide que indiquemos que valor, función u operación deseamos realizar en el caso de que la respuesta a la pregunta sea .
  • Valor si falso. Por último, en el tercer argumento, nos pide que indiquemos que valor, función u operación deseamos realizar en el caso de que la respuesta a la pregunta sea No.
Así pues, en el ejercicio planteado el esquema de preguntas y respuestas será:

Que trasladado a la función SI() quedaría del siguiente modo:
En primer lugar estamos planteando la pregunta (Prueba lógica): "La edad es igual o superior a los 13 años", pregunta que solo tiene dos respuestas posibles "Sí" o "No".
A continuación, le tenemos que indicar cuál es el importe cuando la respuesta es Sí; que en nuestro casos es USD 220
Ahora tendremos que pasar al tercer argumento en el que indicamos que hacer cuando la respuesta a nuestra pregunta es NO. en este caso lo que tenemos que volver a hacer es otra pregunta, para lo que hay que hacer un nuevo SI().

Es decir, si no tiene 13 o más años, preguntamos si tiene 3 o más, Es decir estamos en la segunda prueba lógica o pregunta. Ante la cual, una vez más sólo caben dos respuestas Sí  o  No.
¿Qué toca ahora? Pues indicar que hacer en el caso que la respuesta sea Sí. Sabemos por la tabla de tarifas que si la edad esta entre 3 y 12 años la respuesta es 187 USD.
Llegado este punto nos queda por indicar que hacer cuando la respuesta de esta segunda pregunta es No. Es decir, si la edad tampoco está comprendida entre 3 y 12 años, el importe del billete es de 154USD.
De modo que tras cerrar paréntesis, la función queda del siguiente modo:

=SI([@Edad]>=13; 220; SI([@Edad]>=3; 187; 154))

El orden de las preguntas sí que importa.

Fijaros que hemos empezado preguntado por el rango de edad más alto, ¿Qué hubiera pasado si la primera pregunta hubiese sido por los de 3 o más años y luego por los de 13 o más años?

=SI([@Edad]>=3;187; SI([@Edad]>=13; 220; 154))
  • Para una persona con 2 años: la primera respuesta hubiese sido No, con lo que pasaríamos a la segunda respuesta que también sería negativa y por tanto la tarifa a aplicar sería de 154USD, lo cual es correcto
  • Para una persona de 10 años: la primera respuesta hubiese sido SI, y por lo tanto la tarifa 187 USD, Cómo ya ha encontrado la solución Excel no continua leyendo la función.
  • Y, para una persona de 25 años: la primera respuesta también es Sí, y por lo tanto su tarifa es de 187, lo cual es incorrecto, pues debería de ser 220

Función SI.CONJUNTO()    

Esta función es relativamente nueva, esta disponible a partir de la versión 2019. Consta al menos de dos argumentos:

=SI.CONJUNTO(prueba_lógica1; valor_si_verdadero: ...)
  • Prueba lógica 1: Al igual que en la función SI(), se trata de plantear una pregunta que tenga dos solas respuestas (Sí o No).
  • Valor si verdadero: Igual que en la función SI(), que valor, calculo o función debe ejecutar Excel si la respuesta es Sí.
  • ... Aquí viene la diferencia con la función SI(), no nos pide que acción realizar en el caso de que la respuesta sea NO, en todo caso lo que nos pedirá es que hagamos una nueva pregunta.
Así pues para el ejercicio planteado, la primera cuestión que nos hacemos es si la edad del pasajero es mayor o igual a 13 (recordar que el orden influye):
=SI.CONJUNTO([@Edad]>=13;
Y, que si la respuesta es afirmativa la solución es 220
=SI.CONJUNTO([@Edad]>=13;220;
Ahora tendríamos que hacer una segunda pregunta: ¿la edad es superior o igual a 3 años?
=SI.CONJUNTO([@Edad]>=13;220;[@Edad]>=3;   
Si es así, la respuesta es 187 USD
=SI.CONJUNTO([@Edad]>=13;220;[@Edad]>=3;187; 
Y para el resto de casos (sólo tenemos tres ("INFANT", "CHILD", y "ADULTOS") cuando es mayor o igual a 0 años volvemos a preguntar:
=SI.CONJUNTO([@Edad]>=13;220;[@Edad]>=3;187;[@Edad]>=0
Y la respuesta es 154 USD
=SI.CONJUNTO([@Edad]>=13;220;[@Edad]>=3;187;[@Edad]>=0;   154)

Función BUSCARV()

Sin embargo para este tipo de casos en los que trabajamos con distintos casos (tres tipos de tarifas) y que dependen de un rango de valores (rangos de edad, la solución más rápida y más cómoda es utilizar la función BUSCARV(), con coincidencia aproximada.
=BUSCARV(valor buscado; matriz buscar en; indicador columna;[ordenado])
 La función consta de cuatro argumentos:
  • El valor que desea buscar, también conocido como el valor de búsqueda.
  • El rango donde se encuentra el valor de búsqueda. Recuerda que el valor de búsqueda debe estar siempre en la primera columna del rango para que BUSCARV funcione correctamente. 
  • El número de columna del rango que contiene el valor devuelto. 
  • Opcionalmente, puede especificar VERDADERO si desea una coincidencia aproximada o FALSO si desea una coincidencia exacta del valor devuelto. Si no especifica nada, el valor predeterminado siempre será VERDADERO o la coincidencia aproximada.
Así pues en nuestro caso, la función quedará del siguiente modo:





Comentarios

Entradas populares de este blog

Tablero KANBAN

Buscar y traer múltiples imágenes en Excel