Buscando solución para acortar una fórmula IF


9

Tengo una fórmula larga con la siguiente estructura:

=IF(!X!<>0,!X!+A1,"")

donde ! X! Es una fórmula muy larga.

¿Hay alguna solución para evitar repetir el! X! ¿dos veces? Lo necesito por dos razones:

  1. Para que la fórmula sea legible para el usuario de la hoja
  2. Para reducir el tiempo de proceso

Agradezco cualquier ayuda.

Gracias dio


1
si lo desea, To reduce the process timeentonces obviamente debe almacenar el resultado en algún lugar, de lo contrario, Excel debe volver a calcular el valor nuevamente cuando la condición coincida. La división también es una operación muy costosa
phuclv

2
Solo por curiosidad, ¿has "jugado" la fórmula larga tanto como puedas? Para hacerlo más corto, ¿tal vez agregar rangos con nombre?
BruceWayne

Para que una fórmula larga sea más legible, separe los argumentos en diferentes líneas usando alt + retorno. Una desventaja es que, a menos que el usuario expanda la altura de la barra de fórmulas, la fórmula parece incompleta.
Brad Smith el

Respuestas:


12

Otro enfoque es utilizar la doble inversión :

=IFERROR(1/(1/really_long_formula)+A1,"")

Si la fórmula "realmente_ larga" se evalúa a 0 , obtendrá una división entre cero y la IFERROR()capturará.

Tenga en cuenta que la forma habitual (y la mejor manera) de manejar este requisito es con una celda auxiliar.


77
esto puede sufrir la pérdida de precisión debido a la división de punto flotante
phuclv

3
@ LưuVĩnhPhúc ¡ Estás completamente en lo correcto! ¡El enfoque AFH es el mejor enfoque!
Estudiante de Gary

Este es un buen truco sucio. Me abstendría mucho de usarlo, pero, como último recurso, ¿quién sabe?
André Chalella

3
NOTA: es cierto que puede haber alguna pérdida de precisión, pero rara vez será un problema relevante. Probé 1/1/xcon 100,000 números aleatorios varias veces en Excel, y solo el 1.4% de las veces hubo un error de redondeo. El error relativo máximo que encontré fue 1.6e-16, que es, bueno, efectivamente cero. Además, curiosamente, los enteros nunca mostraron errores de redondeo (probó varios rangos de 0 a 1e14). Entonces, esta respuesta puede ser mal vista desde un punto de vista de pureza / limpieza, pero no desde un punto de vista de cálculo práctico.
André Chalella

1
Encuentro la solución de Gary como la mejor. Primero porque es limpio (como también lo mencionó André) y legible por otros usuarios. Segundo, porque satisface mi necesidad. No tengo enteros complicados o largos. Espero que los usuarios, que eligen este enfoque, lean los comentarios para conocer los pros y los contras de esta solución.
Dio

23

La respuesta obvia es colocar la fórmula en una celda de trabajo, lejos de la hoja principal. Por ejemplo, si lo usa H1, configúrelo en:

=!X!

Su fórmula se convierte en:

=IF(H1<>0,H1+A1,"")

Esto es típico de lo que uno haría en cualquier otro lenguaje de programación.


No tengo posibilidad de agregar una columna de ayuda. Gracias de cualquier manera.
Dio

2
@Dio si no se supone que debe verse, simplemente oculta la columna. Incluso puede nombrar la columna / rango para que sea más fácil de leer
phuclv

44
@Dio - OK. Su respuesta aceptada es bastante inteligente, pero tenga en cuenta que, debido al redondeo, puede perder precisión ( 1/(1/x)no siempre es exactamente la misma x), especialmente si se trata de datos enteros. Tampoco es aplicable de manera más general (por ejemplo, verificar menos de cero). (Comentario cruzado con la respuesta aceptada de @ LưuVĩnhPhúc.)
AFH

Gracias por tus consejos y comentarios. Dejaré la pregunta aún abierta para ver si todavía hay nuevas sugerencias.
Dio

2
Sería útil ver la fórmula larga. Además de una celda de trabajo, es posible definir un nombre en una hoja de trabajo que contiene una fórmula
datatoo

3

¿Realmente necesitas que el resultado esté ""en el caso falso? Si solo necesita que la celda se vea en blanco (por ejemplo, no usará algo así =ISNUMBER()más adelante), puede usar el formato condicional para ocultar el contenido en el caso falso.

El formato condicional que aplicará a la celda para que no muestre nada es el formato personalizado "", como este (está en portugués, pero se entiende):

formato personalizado para celdas en blanco

La fórmula en la celda será, como se esperaba, simplemente =!X!+A1.

La fórmula de formato condicional podría ser =!X!=0, pero eso forzaría el recálculo de !X!lo que no desea (su "Punto 2"). Es mejor aprovechar la célula usando =B1=A1(suponiendo que nuestra célula sea B1 ), eso implicaría !X! = 0.

Incluso si necesita que el contenido de la celda sea realmente "", generalmente se pueden hacer pequeñas modificaciones en la hoja de trabajo para que se pueda utilizar este enfoque. Si ese es el caso, deje un comentario que describa la situación.


1

No tengo posibilidad de agregar una columna de ayuda. Gracias de cualquier manera.

Si no puede agregar una columna auxiliar , ¿por qué no agrega una hoja de trabajo completa? Hay varias ventajas para esto:

  • Su celda auxiliar no ocupa espacio que de otro modo podría usarse, porque está en una hoja de trabajo separada.
  • Puede nombrar la celda y luego abordarla por su nombre, p. Ej.=IF(X<>0,X+A1,"")
  • Si necesita hacer esto en más de una celda, puede:
    1. Cambie el nombre de la hoja de trabajo auxiliar "helper"
    2. Coloque la ecuación auxiliar en la misma celda que la ecuación principal (llamémosla D5.
    3. Dirección de la celda como helper!D5en la hoja principal.
  • Puede ocultar la hoja auxiliar si es necesario.
  • Es más rápido que evaluar dos veces.
  • No pierde precisión.

Las desventajas que puedo ver son:

  • Debe hacer referencia a celdas sin nombre en la hoja principal como en sheetname!D5lugar de solo como D5.
  • Ahora la fórmula tiene dos partes en lugar de una.
  • Proliferación de la hoja de trabajo.

Sopesando las ventajas y desventajas, creo que para muchos casos de uso esta es una buena solución. Existen situaciones en las que no es óptimo, aunque no puedo pensar en ninguna en este momento.


1
Gran respuesta. Las desventajas que veo son: 1. No ayuda mucho al simplificar el cálculo para el usuario, ya que ahora la gran fórmula está oculta. 2. Muchos libros de trabajo ya están llenos de hojas. Incluso si lo oculta, es posible que tenga que pasar por muchas hojas ocultas para mostrarlo. Aparte de eso, es una buena solución.
André Chalella

@ AndréNeves ¡Gracias por eso! El primero se me ocurrió, pero lo olvidé cuando escribí la sección de desventajas .
wizzwizz4

1

una opción aún no sugerida es crear una función definida por el usuario. Debería activar la pestaña Desarrollador en la barra de menú (google) y crear un módulo.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

En la barra de fórmulas entonces harías

=udf_myCalc(A1)

NOTA: Esto ahora se convierte en un archivo .xlsx (con macros) y puede necesitar permisos adicionales en una red corporativa, ya que las macros pueden usarse con fines maliciosos y algunos filtros de correo electrónico las bloquearán. Las funciones no están documentadas, por lo que deberá proporcionar notas sobre lo que están haciendo sus funciones y me resulta útil llamar a todas mis funciones udf_xxxxx para que quede claro que no es una función integrada.

También hay otros GOTCHA con UDF. Vea este enlace para algunos buenos consejos http://www.decisionmodels.com/calcsecretsj.htm

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.