¿Función de Excel que evalúa una cadena como si fuera una fórmula?

26

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.

drapkin11
fuente
3
Excel tenía esta función EVALUAR () que hace exactamente esto. Sin embargo, eso fue hace mucho tiempo y no estoy muy seguro sobre el nuevo Excel. Buscaré y veré si puedo encontrar algo equiv.
aCuria
1
esa función suena familiar, pero ciertamente no puedo encontrarla en Excel2007, que es lo que estoy usando actualmente.
drapkin11
No puedo encontrarlo tampoco = /
aCuria

Respuestas:

26

EVALUATE está disponible en VBA en todas las versiones actuales

Puede incluirlo en su código VBA o envolverlo en un UDF simple para que esté disponible como una función de hoja de trabajo

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

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 resultado

Chris Neilsen
fuente
1
Olvidé todo acerca de las funciones definidas por el usuario en Excel, gracias.
drapkin11
Hice una pequeña modificación cambiando el parámetro Range a String y funciona bien para mí. gracias
Makah
17
=evaluate(put_reference[s]_here)

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)

    Evaluar ejemplo

  • Escriba =evaluate(y haga clic en la celda que desee (lo mejor es mantener la referencia relativa).

  • Termina la fórmula con )
  • Déle un NOMBRE - (en este ejemplo lo llamaré eva).
  • Haz clic en Aceptar .

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 =evapara obtener la evaluación de cualquier celda que quede una celda desde donde la desea. (por ejemplo, en B2, =evadevolverá el resultado de la celda A2)

Laurentiu Mirica
fuente
1
Muy bien, y es bueno saberlo. Incluso funciona para una columna de tabla: = EVALUAR (nombre de tabla [@ [columna]]) Algo que no puede encontrar en la mayoría de la Ayuda de Excel o Tutorial avanzado fácilmente
Paschi
1
... y como es habitual con las fórmulas de Excel, si utiliza una acumulación localizada, es necesario utilizar la función localizada - por ejemplo, en Excel 2016 DE se llama=auswerten(...)
kiwiwings
7

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 .

Demostración del problema eval

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),)

jlear
fuente
Gracias, he estado buscando un truco como este de vez en cuando :)
Ben Personick
4
=indirect()

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):

=INDIRECT(CONCATENATE(A2,"!B5"))

Para que funcione INDIRECTO, la hoja de trabajo externa debe estar abierta.

usuario206351
fuente
No funciona, devuelve
#REF
10
INDIRECTO puede realizar operaciones matemáticas y funciones, pero solo como parte de la creación de una referencia de celda. No se puede usar en el sentido general de la pregunta.
Fixer1234