«El Arte de los Condicionales.»
El arte de los condicionales no hace referencia a las expresiones del ser humano, sino al Arte de la Guerra de Sun Tzu. En este post quiero hacer hincapié, así como en el libro de Sun Tzu a la estrategia para abordar problemas, en este caso los condicionales. Es importante anotar que este artículo se enfoca en la función SI() y sus alternativas y no, se centra en abordar todos los condicionales, debería entonces llamarse: «El Arte de los Condicionales con la Función SI()», pero para simplificar dejémoslo: «El Arte de los Condicionales».
Otro aspecto a resaltar antes de empezar es que mucho de lo mencionado aquí, por no decir que todo, es aplicable a fórmulas en Excel en general
El día de hoy quiero hablar de algo muy especifico que he podido notar a lo largo de los años con Excel, acerca de la función SI(), aquellas más utilizada de todas las funciones lógicas; tengo que ser honesto, el uso de esta función esta sobrevalorado.
El dominio de condicionales es vital en Excel; es el dominio del flujo de cálculo, el camino hacia la eficiencia en fórmulas o la pérdida de tiempo tanto en ejecución como en desarrollo: es forzoso manejar esta temática a la perfección.
No tomarse el tiempo para dominar las diferentes alternativas con lleva a crear fórmulas largas, poco eficientes y difíciles de leer (a lo que yo llamo fórmulas espagueti: fórmulas anidadas largas, poco estructuradas y muy complejas de interprtar o que requieren mucho tiempo por su montón de fórmulas intricada y mal organizadas para lectura)
Es importante valorar otras opciones a la función SI() y hacer comparaciones entre las alternativas con vista a determinar cuál es más clara y eficiente para el condicional
.
Sobre intervalos
Nunca es beneficioso para la estructura de la hoja de cálculo dejar que la extensión de una fórmula sea demasiado larga y, muchos menos que sino existe necesidad.
¡Simplifica, simplifica, simplifica! Esta es la idea para poder crear fórmulas pequeñas que realicen nuestra tarea de forma acertada, aunque no siempre es posible, siempre buscar simplificar, simplificar y simplificar al máximo. Para aquellas fórmulas demasiados largas utilizar segmentación en bloque.
– Ejemplo
Es extremadamente habitual tener que identificar un valor de acuerdo a un intervalo, como en cálculo de comisiones, pero veamos esto mejor con un ejemplo:
En el Total($) se tiene que encontrar cuál es la comisión correspondiente de acuerdo a la tabla, según el Cumplimiento (%) señalado en C2, para de esta manera de acuerdo a la base indicada en la celda C3 calcular la comisión y, en definitiva determinar el total a pagar.
He tenido la oprtunidad de ver un buen número de personas creando una fórmula para esta situación, sin exagerar, prácticamente el 95% de ellas optona por crear múltiples SI() anidados para hallar la comisión, algo de este estilo:
¡Es gigantesca, una Mega-fórmula! Como he mencionado antes, existen situaciones en las cuales crear MEGA-FÓRMULAS incluso mucho más extensas que al presentada en la imagen anterior es inevitable, además, generalmente son manejos matriciales de funciones para resolver tareas de alta complejidad, sin embargo, en la situación anterior es innecesario crear una fórmula de esta magnitud, algunos problemas:
- No es fácil de leer (Sobre todo para personas que no llevan mucho tiempo con el manejo de la herramienta)
- Tipo de ejecución lento (Si este proceso se debiera repetir para 300,000 datos la hoja de cálculo se haría bastante lenta)
.
En este escenario no se necesita la función SI(), una alternativa más apropiada es utilizar la función BUSCAR, observe la imagen siguiente:
Lo más notorio; es una fórmula mucha más compacta (más corta), adicionalmente la función BUSCAR para esta situación es mucha más veloz. Básicamente lo que tenemos que hacer es coger todos los límites superiores, incluyendo el 0, y crear un vector (En el ejemplo de la imagen se creó estático, pero idealmente variable – Puedes estudiar acerca de vectores y matrices estáticas y variables en este vídeo) Este es el vector:
Y en un segundo vector del mismo tamaño poner los valores correspondientes del intervalo, que para este caso en particular es el rango C7:C17. Para verlo de otra forma:
BUSCAR(Valor; Vector_con_límites_superiores_de_cada_intervalo; Vector_resultado_de_cada_intervalo_correspondiente)
Es importante que el primer vector este organizado de forma ascendente.
Otra alternativa bastante buena también, es con la función INDICE y COINCIDIR anidadas, véase la imagen a continuación:
Otra forma es adecuar los intervalos, cada parte en una columna para poder utilizar la referencia al rango de forma directa:
Sobre valores con texto y listas
Los grandes gurús en fórmulas y funciones se retan así mismo a mirar los problemas con otra perspectiva, primero solucionando el problema por la alternativa convencional y extensa y después utilizar esta para encontrar una más apropiada.
Por ejemplo, otra situación de alta frecuencia consite en seleccionar un valor de acuerdo a una lista:
– Por ejemplo
Retornar el código de un producto de acuerdo al nombre seleccionado, en la imagen siguiente se ilustra esta situación; donde en la celda C2 hay una lista desplegable que muestra los productos listados en el rango B6:B9, una vez seleccionado se debe retornar el código en la celda C3 donde su equivalente se encuentra en el rango C6:C8, la solución convencional con la función SI() también se presenta en la imagen debajo:
En lugar de esto, se puede poner un número delante del producto de la siguiente manera:
El 0 es opcional si en la lista no hay más de 10 ítems. La lista desplegable se vería asi:
Entonces en lugar de utilizar esta anidación (con la función SI()), una forma más eficiente es utilizando la función ELEGIR anidad con IZQUIERDA, donde la función IZQUIERDA extrae el número, y ELEGIR retornar el valor correspondient. La fórmula queda:
Sobre valores en tablas
Si conoces las funciones matriciales y el uso de las funciones normales, en ningún momento tu hoja de cálculo estará mal estructurada; si conoces las funciones matriciales y no has pasado por un proceso de aprendizaje exhaustivo de las fórmulas «normales», entonces ralentizaras tu hoja de cálculo, si conoces solo el uso de funciones «normales» entonces tus hoja de cálculo serán pesadas, extensas y difíciles de entender; sino dominas o has pasado por un proceso riguroso de estudio de ninguna de las dos, entonces todas tus hojas de cálculo sufrirán de graves problemas en la estructura.
En ocasiones es bueno el uso de fórmulas matriciales en vez de SI() anidados, dado que puede ser más lenta. (No siempre es el caso, de hecho la opción matricial suele ser casi siempre una mejor elección) Vamos con un ejemplo:
– Por ejemplo
Supongamos que tenemos una lista de datos a la cual a cada producto tiene un porcentaje asociado que representa el índice o porcentaje de calidad, entonces por cada producto tenemos un intervalo que indica cuál es el precio correspondiente, observe la imagen debajo para mayor claridad:
Con la ausencia de un buen dominio de funciones matriciales, una solución con SI() anidados como se muestra a continuación no es nada descabellado de encontrar:
Esta cantidad de condicionales anidados es bastante extensa y además no es muy fácil de leer en muchas ocasiones; por otra parte, si la gran mayoría de opciones se encuentran en el último condicional, entonces tenemos que tener cuidado de poner demasiado lenta nuestra hoja de cálculo. Con un dominio de funciones matriciales podemos optar por una solución como la mostrada enseguida:
En este artículo nos vamos a detallar esta situación, sino que queremos mostrar su importancia
El siguiente vídeo es un vídeo introductorio a los conceptos escenciales de fórmulas matriciales: Introduccióna fórmulas y funciones matriciales
Sobre control casilla
Las usuarios de Excel que conocen la lógica booleana pueden aprovecharse de todo tipo de situaciones sencillas para manejar valores lógicos a su favor sin necesidad de hacer uso de la función SI().
Cuando utilizamos el control de casilla, el cual retorna un valor booleano (FALSO() o VERDADERO()) podemos omitir la función SI() de manera sencilla utilizando lógica booleana básica, por ejemplo, en la siguiente situación tenemos una lista de productos (comidas rápidas) con su respectivo precio, en loa celda C16 debemos calcular de acuerdo al producto seleccionado en el cuadro combinado que se encuentra en la celda C2 y al número de unidades señalas en la celda C3 el precio total, además si selecciona la casilla Entrega domicilio se debe adicionar €1.8, ver imagen:
La primera parte indentifcar el precio del producto y unidades es solo esto: (C3*INDICE(C7:C14;F1)), no obstante la segunda opción de la entrega domicilio puede ser bastante tentador utilizar la función SI() como se muestra arriba, en lugar de ellos use la siguiente alternativa:
Sobre celdas vacías y 0
La creatividad es la clave para el arte de los condicionales y, en general para resolver tareas en Microsoft Excel.
Por ejemplo: cuando queremos identificar si una celda esta en blanco para así retornar blanco en lugar del número 0, solemos utilizar =SI(LARGO(C3)>0;C3;»»), pero otra alternativa puede ser:=–(REPETIR(C3;–LARGO(C3)>=1))
¡Goodbye función SI() de Excel!
¿Quiere decir que no necesitamos la función SI()?
-El objetivo en realidad de este artículo es ofrecer nuevas perspectivas de cómo se resuelven los problemas, utilizar la función SI() siempre que no lleve más de 3 anidaciones es una buena alternativa, sin embargo, hemos demostrado como podemos atacar los problemas desde otro ángulo visual y proporcionar mayor eficiencia y legibilidad a nuestras fórmulas.
¿Se te ocurre alguna situación en la cual el uso de la función SI() sea imprescindible?, coméntalo y hagamos de este texto un mejor artículo
– Eso es todo por mí el día de hoy, hasta la próxima oportunidad.