0 votos

Evaluar una fórmula almacenada en una celda

¿Es posible almacenar una expresión en una celda y luego referirse a ella/evaluarla dentro de otras celdas?

Me he encontrado en repetidas ocasiones utilizando expresiones complejas en las fórmulas de las celdas, por ejemplo, la subexpresión OFFSET ( $A$2, 0, 0, ROW() -1, 1 ) para referirse a una celda de una fila y a todas las filas por encima de ella se anida dentro de muchas otras expresiones. A medida que las expresiones en las celdas se hacen más largas y complejas, se hace más difícil escribirlas y depurarlas correctamente. Me gustaría poner las subexpresiones en sus propias celdas y luego evaluarlas en las celdas principales, para facilitar la lectura (como las macros en C).

¿Es esto posible?

1voto

WilyUlysses Puntos 26

Puedes conseguir que funcione una especie de macrofacilidad. Pruebe esto:

Inserta una hoja separada, haz que el nombre de la tabla sea único para la hoja de cálculo (yo uso "Macros"), y asegúrate de que la tabla tiene una fila de cabecera y una columna de cabecera. A continuación, etiquete la cabecera de la columna A como "Nombre" y la de la columna B como "macro". De este modo, dispondrás de un sistema de nomenclatura abreviado y autodocumentado. Para añadir una macro, elige un nombre para ella, pon el nombre en la columna A y el código en la columna B y luego llámala. Si los nombres de la tabla, la fila y la columna están configurados correctamente, entonces $macro $myMacroName lo hará.

Ejemplo: tienes tres casillas de verificación en lugares conocidos (digamos $A$1, $A$2 y $A$3) y necesitas comprobar repetidamente si alguna casilla está marcada y luego realizar un código específico diferente para cada casilla. Lo siguiente en las columnas A y B de cualquier fila de su tabla de Macros logrará el objetivo.

    anyBoxChecked  =IFERROR(CHOOSE(MATCH(TRUE,$A$1:$A$3,0),1,2,3),0)
    runCheckbox    =INDIRECT("$macro $runCheckbox"&$macro $anyBoxChecked)
    runCheckbox0   ="ERROR"
    runCheckbox1   =specific code for checkbox $A$1
    runCheckbox2   =specific code for checkbox $A$2
    runCheckbox3   =specific code for checkbox $A$3

Tenga en cuenta que la declaración de la macro debe ser siempre preservada por filas y columnas (es decir, con $s).

Este es un ejemplo complejo (como que me fui a la ciudad en él) con macros incluyendo macros y llamadas indirectas a macros.

Pero al utilizar $macro $anyBoxChecked<>0 tiene un booleano que representa si alguna de las tres casillas está marcada y al usar $macro $runCheckbox puede ejecutar un código específico de casilla de verificación automáticamente y obtener un mensaje de error si ninguna de las casillas está marcada.

Ahora la mala noticia: estas macros no aceptan ningún parámetro y no puedes utilizar ninguna función que dependa de la ubicación. Así que el ejemplo para el que pediste ayuda, OFFSET($A$2,0,0,ROW()-1,1) no puede ser una de estas macros porque ROW() devolverá el número de fila de la macro, no el número de fila de la celda desde la que se llamó a la macro.

Pero anímate; yo estaba exactamente en el mismo aprieto que tú y el uso de este sistema, junto con un juicioso análisis de código, me permitió reducir sustancialmente mi huella de código y documentar mucho mejor el código restante. También parece mejorar el rendimiento.

Otra nota: puedes tener las filas de la macro en cualquier orden y añadir, eliminar o moverlas tanto como quieras. Numbers se encarga automáticamente de los cambios de fila para que no tengas que cambiar ninguna llamada a la macro.

Diviértete.

(por cierto, estoy ejecutando Numbers 6.0 (6194) en Mojave 10.14.4.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X