No devolver nada si dos valores están vacíos (Microsoft Excel)
Graham usa una fórmula que hace referencia a dos celdas, B1 y C1. Todo lo que hace la fórmula es devolver el valor de una de las celdas, como en = SI (A1 = 1, SI (B1> C1, B1, C1)). Tanto B1 como C1 normalmente contienen fechas, pero a veces una o ambas pueden estar vacías. Si ambos están vacíos, el valor devuelto (que es 0 porque están vacíos) se muestra como 1/0/1900. Cuando ambas celdas están vacías, a Graham le gustaría que la fórmula devolviera un valor en blanco, no un 0.
Hay varias formas de abordar esta necesidad. Primero, empecemos con la fórmula de ejemplo de Graham:
=IF(A1=1, IF(B1>C1, B1, C1))
La fórmula es un poco «incompleta», ya que no proporciona lo que debería devolverse si A1 no contiene el valor 1. Como está escrito, si A1 contiene 2 (o cualquier otro valor excepto 1), la fórmula devuelve «FALSE «. Entonces, modifiquemos la fórmula solo un poco para que si A1 no es 1, devuelva un valor «en blanco», como este:
=IF(A1=1, IF(B1>C1, B1, C1), "")
A continuación, es clave comprender lo que está sucediendo en «B1> C1»
comparación. Las fechas, por supuesto, se almacenan internamente como valores numéricos, como números de serie. Si B1 contiene una fecha más reciente que C1, entonces el número de serie en B1 será mayor que el número de serie en C1.
Más allá de esto, las características de los datos en B1 y C1 determinan cómo funciona la comparación (>).
-
Si ambas celdas contienen valores numéricos (incluidas las fechas), la comparación funciona como se esperaba.
-
Si alguna de las celdas contiene un valor de texto, ambas celdas se tratan como si contuvieran valores de texto, incluso si una de ellas contiene un valor numérico.
-
Si una de las celdas está vacía, entonces esa celda se trata como si contuviera el valor 0.
En base a esto, si una celda contiene una fecha y la otra está vacía, equivale a comparar un número de serie (la fecha) con un 0 (la celda vacía), por lo que el número de serie siempre será mayor que la celda vacía. Si ambas celdas están vacías, ambas se tratan como si contienen 0 y, por lo tanto, ambas son iguales.
Entonces, digamos que en la fórmula de Graham, la celda A1 contiene el valor 1, la celda B1 está vacía y la celda C1 está vacía. Así es como Excel «traduce» la fórmula:
=IF(A1=1, IF(B1>C1, B1, C1), "") =IF(1=1, IF(B1>C1, B1, C1), "") =IF(B1>C1, B1, C1) =IF(0>0, B1, C1) =C1 =0
Esta es la razón por la que Graham ve 0 devuelto por la fórmula, y cuando 0 se considera un número de serie de fecha, se muestra como 1/0/00 (o 1/0/1900).
Para evitar esto, debe verificar si tanto B1 como C1 están vacíos.
Hay varias formas de hacerlo. Considere esta variación de su fórmula:
=IF(A1=1, IF((B1+C1=0), "", IF(B1>C1, B1, C1)), "")
Esta variación agrega una declaración IF para ver si B1 agregado a C1 es igual a 0, que será si ambos están en blanco porque Excel considera que los espacios en blanco y 0 son equivalentes en este contexto. El inconveniente es que si B1 o C1 contienen un valor de texto, la fórmula devuelve el error #VALUE.
Una mejor variación puede ser la siguiente:
=IF(A1=1, IF(AND(B1=0,C1=0), "", IF(B1>C1, B1, C1)), "")
En esta encarnación, la declaración IF usa la función AND para determinar si tanto B1 como C1 son 0. Esto también resuelve el problema potencial del error #VALUE.
Si realmente desea verificar si tanto B1 como C1 están vacíos, entonces deberá confiar en un enfoque diferente. Una forma es utilizar la función CONTAR:
=IF(A1=1, IF(COUNTA(B1:C1)=0, "", IF(B1>C1, B1, C1)), "")
Si sabe con certeza que tanto B1 como C1 nunca contendrán valores de texto al mismo tiempo, también puede usar la función CONTAR en lugar de la función CONTAR en la fórmula anterior.
Otro enfoque es utilizar la función CONTAR.BLANCO de la misma forma; devuelve un recuento de la cantidad de celdas en un rango que están vacías:
=IF(A1=1, IF(COUNTBLANK(B1:C1)=2, "", IF(B1>C1, B1, C1)), "")
Una variación similar es usar la función ESBLANCO (que devuelve VERDADERO si una celda está en blanco) junto con la función Y:
=IF(A1=1, IF(AND(ISBLANK(B1), ISBLANK(C1)), "", IF(B1>C1, B1, C1)), "")
También puede hacer que Excel evalúe B1 y C1 como si contuvieran texto, como se hace aquí:
=IF(A1=1, IF(B1&C1="", "", IF(B1>C1, B1, C1)), "")
Esta fórmula no funcionará como se esperaba si B1 o C1 contienen un solo espacio, por lo que es posible que desee agregar la función TRIM a la mezcla:
=IF(A1=1, IF(TRIM(B1&C1)="", "", IF(B1>C1, B1, C1)), "")
En cualquiera de las fórmulas discutidas hasta ahora, es posible que también desee cambiar la instrucción IF que devuelve B1 o C1 con la función MAX, de esta manera:
=IF(A1=1, IF(TRIM(B1&C1)="", "", MAX(B1:C1)), "")
Sin embargo, hay una advertencia si decide hacer esto: la función MAX considera que todos los valores de texto son equivalentes a 0. Por lo tanto, si la celda B1 contiene «abc» y la celda C1 contiene 1, entonces use el operador de comparación mayor que (> ) considera que «abc» es mayor que 1, pero MAX considera que 1 es mayor que «abc».
También hay una manera de volver atrás y usar la fórmula original de Graham (la que no busca dos celdas en blanco) y simplemente confiar en formatear la celda que contiene la fórmula. Simplemente cree un formato personalizado como el siguiente:
m/d/yyyy;;
Observe los dos puntos y comas al final del formato. Estos le dicen a Excel que no muestre nada si el valor en la celda es negativo o un valor cero. Con este formato, nunca verá aparecer la fecha 1/0/1900; la celda se mostraría en blanco.
Por supuesto, podría modificar Excel para que oculte todos los valores cero en la hoja de trabajo, como se ha explicado en otros ExcelTips, pero es posible que hacerlo no se adapte a sus propósitos si necesita mostrar cero resultados de otras fórmulas.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (10386) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.