Me gusta mantener mis hojas de cálculo de Excel bastante limpias. Entonces, muchas veces termino escribiendo declaraciones como esta:
IF([formula x]=[value],"",[formula x])
Lo que eso dice esencialmente es que si la fórmula coincide con un criterio determinado, no muestre el resultado; de lo contrario, muestre el resultado.
En algunos casos, [formula x]
se repite en toda una columna de celdas y cada celda tiene una referencia [formula x]
que apunta a la celda que está encima. Para evitar errores de fórmula, tengo que agregar otra capa así:
IF(C2="","",IF([formula x]=[value],"",[formula x])
Sin embargo, especialmente cuando [formula x]
es muy largo, esto puede resultar en una fórmula final que parece mucho más complicada de lo que es y se vuelve mucho más difícil de solucionar y mantener de lo que debería ser.
Aquí hay un ejemplo horrible...
Fórmula básica:
=IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)
Agregar supresión condicional:
=IF(C2="","",IF(IF(A3>=$E$11,C2+(C2*($F$2/12)-$E$9),C2+(C2*($F$2/12))-$E$7)<=0,"",IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)))
Una fórmula que ya es muy larga tiene más del doble de tamaño, solo para poder mostrar un espacio en blanco (o cualquier otro valor elegido, de hecho) cuando esa misma fórmula cumple una condición determinada. Si intento hacer esto en una fila completa, dependiendo de la fórmula inicial, fácilmente podría encontrarme con errores de referencia circulares.
¿Hay alguna manera de hacer referencia a una fórmula o argumento existente dentro de la misma celda, o tal vez otra función o característica que pueda usarse para lograr este resultado de manera más limpia?
Una función que haga lo que estoy buscando podría ser así:
=FnName([base formula],[match condition],[condition result])
El argumento 1 es la fórmula base, el argumento 2 es la condición que me interesa hacer coincidir. El argumento 3 es el resultado que se mostrará si la condición coincide. En caso de que la condición no coincida, la función devuelve el resultado de la fórmula base.
Respuesta1
¿Ha pensado en evaluar la fórmula en una celda oculta (o en una celda de otra hoja de trabajo) y luego realizar el borrado condicional en función del valor de la celda oculta en lugar de tener que ingresar la fórmula dos veces? No conozco todo el contexto en el que estás trabajando, pero he hecho algo similar con cierto éxito en el pasado.
Respuesta2
Podrías recurrir a una función de VBA para limpiar la sintaxis de la fórmula. Por ejemplo, puedes poner algo como esto en un módulo (Presiona Alt+ F11, luego Insertar >> Módulo):
Option Explicit
Public Function BLANKIF(checkcell As String, notb As Variant, Optional checkcond As String) As Variant
If checkcell = checkcond Then
BLANKIF = ""
Else
BLANKIF = notb
End If
End Function
Entonces, para usar esto para aplicar el borrado condicional a
=IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7)
tu usarías
=BLANKIF(C2,IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7))
Si quisieras dejar la celda en blanco if C2
= "omg", agregarías un tercer argumento opcional:
=BLANKIF(C2,IF(A3>=$E$11,C2+(C2*($F$2/12))-$E$9,C2+(C2*($F$2/12))-$E$7),"omg")
Respuesta3
Puedes utilizarlo Conditional Formatting
para lograr tu objetivo.
Elimina todo lo extra de la fórmula, dejando solo la fórmula base.
Aplicar una Format only cells that contain
condición con sus criterios de ocultación.
Cuando la condición de supresión es verdadera, aplique un formato de número personalizado de;;;
Alternativa para Excel 2007 o posterior
IFERROR(value, value_if_error)
De la ayuda de Excel:
Devuelve un valor que usted especifica si una fórmula se evalúa como un error; de lo contrario, devuelve el resultado de la fórmula. Utilice la función SIERROR para detectar y manejar errores en una fórmula.