Estoy tratando de crear una fórmula en una hoja de cálculo de Google que se vea así:
if (x < 0, x + 1, x)
Significa si x
es menor que 0
, return x + 1
, else return x
.
Sin embargo, x
sí mismo es una expresión, por ejemplo A1 + B1
. Entonces terminé con:
if ((A1 + B1) < 0, (A1 + B1) + 1, (A1 + B1))
¿Cómo puedo guardar la expresión (A1 + B1)
en una variable temporal para x
poder hacer esto? :
x = (A1 + B1);
if (x < 0, x + 1, x);
La expresión actual en mi hoja de cálculo se ve así:
if(
timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
< 0,
1 +
timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
,
timevalue(Sheet1!$D10)-timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))))
)
Estoy tratando de hacer que se vea más corto y más manejable de esta manera:
x = timevalue(Sheet1!$D10) - timevalue(min(filter(Sheet1!$D$2:$D$99,Sheet1!$A$2:$A$99=A10,Sheet1!$E$2:$E$99=E10))));
if(
x
< 0,
1 +
x
,
x
)
google-sheets
google-apps-script
Pacerier
fuente
fuente
Respuestas:
A menudo termino usando celdas como variables para cálculos que se usan con frecuencia, y de hecho los nombro usando "rangos con nombre". Hace que sea más fácil pensar en la fórmula que está tratando de desarrollar. Puede ocultar esas celdas, si no desea que se vean.
fuente
Respuesta corta
En este momento, Google Sheets no tiene una función para asignar un nombre a una variable definida por una fórmula en lugar de una referencia de celda o rango. Para usar una fórmula con este tipo de variables, la alternativa es usar funciones personalizadas.
Funciones personalizadas en Hojas de cálculo de Google
Las funciones personalizadas se definen en proyectos vinculados de Google Apps Scripts o complementos de Google Sheets. Solo se pueden usar para devolver valores, no para automatizar tareas como enviar un correo electrónico.
Una función personalizada es como una función de JavaScript y podría usar JSDOC para agregar funciones incorporadas como autocompletar y mostrar el asistente de fórmula emergente. También se podría incluir un mensaje de error personalizado.
En el caso presentado en la pregunta, la estructura deseada de la fórmula que se mostrará en una celda debe tener la siguiente estructura
donde
x
podría ser una función personalizada.El siguiente es un ejemplo simple de una función personalizada que usa JSDOC .
La fórmula que usa la función personalizada anterior con la estructura especificada en la pregunta se verá de la siguiente manera
row()
podría usarse en lugar de una constante para tener como entrada la fila donde se coloca la fórmula.Con el fin de "emular" la fórmula explícita presentada en la pregunta, las fórmulas integradas deben reemplazarse por las funciones JavasScript / Google Apps Script.
Referencias
fuente
Estoy intentando hacer esto (estoy de acuerdo en que sería una característica muy útil, especialmente para fórmulas largas. Esto es lo que he escrito hasta ahora:
Teóricamente, esto sería útil para simplificar una fórmula celular compleja como:
dentro de esto:
Adicional
D_VAR#'s
yVAR#'s
podría escribirse en el script para permitir múltiples declaraciones de variables y llamadas según sea necesario.Sin embargo, parece que
D_VAR0
no almacena correctamente la variable envuelta en la matriz de variables [].Si ingreso manualmente un elemento en la matriz, VAR0 puede acceder a él y devolverlo a la celda activa. Por ejemplo:
Esto me deja con dos preguntas. Si es posible lo siguiente, creo que es posible declarar y llamar variables temporales a través de una función personalizada:
Si las funciones personalizadas pueden acceder a los elementos de la matriz, ¿también pueden almacenar elementos en una matriz? ¿Si es así, cómo?
Si las funciones personalizadas pueden almacenar elementos en una matriz, ¿solo son accesibles dentro de la misma fórmula contigua en la misma celda? ¿O es posible acceder a esa misma variable almacenada en una celda diferente? Ejemplo:
Cell A1 = D_VAR0(sum(3,5))
Cell D4 = VAR0() //would this return 8 in cell D4? It hasn't worked in my testing.
fuente