Supongamos que tengo una cadena de texto como "11+5"
o incluso "=11+5"
almacenada en una celda. ¿Hay una función en Excel que me permita evaluar esa cadena como si fuera una fórmula?
Esto sería útil para otro proyecto en el que me gustaría poder escribir fórmulas 'dinámicas' en Excel.
microsoft-excel
worksheet-function
drapkin11
fuente
fuente
Respuestas:
EVALUATE
está disponible en VBA en todas las versiones actualesPuede incluirlo en su código VBA o envolverlo en un UDF simple para que esté disponible como una función de hoja de trabajo
Básicamente trata el valor del parámetro pasado como una fórmula de Excel, igual que si se ingresara en una celda
"11+5"
y"=11+5"
producirá el mismo resultadofuente
Esta es una semifunción: solo se puede usar en Name Manager.
Así es como puedes usarlo:
Señale una celda y abra el Administrador de nombres (desde la pestaña FORMULAS o haciendo clic en CTRL + F3)
Escriba
=evaluate(
y haga clic en la celda que desee (lo mejor es mantener la referencia relativa).)
eva
).Ahora, supongamos que ha seleccionado B1 y ha hecho que todo esto se refiera a A1. En A1 puedes poner " 1 + 1 " y en B1 escribes
=eva
: una vez que presionas ENTER, el valor B1 será2
. Como la referencia en el Administrador de nombres era relativa, puede usarla=eva
para obtener la evaluación de cualquier celda que quede una celda desde donde la desea. (por ejemplo, en B2,=eva
devolverá el resultado de la celda A2)fuente
=auswerten(...)
Hay una advertencia importante con la gran respuesta de @karel y @Laurentiu Mirica: la función de evaluación no volverá a calcular a menos que cambie la celda referenciada. Por ejemplo, la celda C1 contiene el texto
"A1+B1"
y D1 contiene la función=eval
. Si los valores en A1 o B1 cambian, la celda D1 no se recalcula .Esto puede corregirse introduciendo una función volátil en la cadena o en la celda de evaluación. Esto forzará un recálculo cada vez que se recalcule la hoja de trabajo. Por ejemplo, la celda C1 podría reemplazarse por
=if(today(),"A1+B1",)
. O, D1 podría ser reemplazado por=if(today(),eval,)
. Cualquier función volátil debería hacer.Una tercera y quizás la solución más simple es cambiar la semifunción en el administrador de nombres a
=if(today(),evaluate(c1),)
fuente
Si usa esto en una celda (junto concatenar) puede ser muy útil.
Por ejemplo, esta fórmula mostrará el valor de la celda B5 en otra hoja de trabajo (cuyo nombre se almacena en la celda A2 en esta hoja de trabajo):
Para que funcione INDIRECTO, la hoja de trabajo externa debe estar abierta.
fuente