Convierte una cadena en una fórmula con Evaluar
Recientemente me encontré con una situación en la que necesitaba convertir una cadena de texto en una fórmula para el cálculo. Esperaba encontrar que Excel tuviera la capacidad de hacer esto. Y lo hace. . . en parte.
Si tiene un número almacenado como texto, puede multiplicarlo por 1 y se convertirá en un número. Pero, ¿qué pasa si queremos convertir una cadena de texto completa en una fórmula, en lugar de simplemente convertir un solo número? ¿Cómo podemos lograr esto? Excel tiene la fórmula EVALUAR, sin embargo, esta es una fórmula heredada que no funciona como se esperaba. Entonces, veamos cómo podemos resolver esto.
Usando EVALUAR para convertir una cadena en una fórmula
Usemos un ejemplo sencillo de cómo la función EVALUAR podría convertir una cadena en una fórmula.
En nuestra hoja de trabajo tenemos datos en 3 celdas.
A1 = 1
A2 = +
A3 = 1
Si quisiéramos usar esta información para crear la fórmula 1+1 (que es igual a 2), ¿cómo podríamos hacerlo? La fórmula EVALUAR sería la opción perfecta, excepto que sólo existe parcialmente. Si tuviéramos que incluir una fórmula como:
=EVALUAR(A1A2A3)
Nota: Se utiliza para combinar celdas en una sola cadena, por lo que nuestro ejemplo sería:
=EVALUAR(“1+1”)
Parece que podría funcionar, pero si lo intentamos recibiremos un error como este:
Sin embargo, podemos crear esa misma fórmula como un rango con nombre.
Fórmulas – Definir nombres – Administrador de nombres
Haga clic en Nuevo
Ingrese la fórmula en el cuadro Se refiere a y haga clic en Aceptar.
Ese rango con nombre ahora está disponible para su uso en fórmulas.
El resultado en la celda C1 será: 2
Esto puede resultar útil hasta cierto punto, pero en la mayoría de circunstancias no proporciona una solución adecuada para convertir una cadena de texto en una fórmula. Necesitamos algo que dé el mismo resultado, pero que pueda usarse como una fórmula normal de Excel.
EVALUAR como función definida por el usuario para convertir cadena en fórmula
Es posible crear nuestras propias funciones de Excel con VBA; éstas se conocen como funciones definidas por el usuario (UDF). Funcionan de la misma manera que las funciones estándar de Excel, pero nosotros determinamos cómo se debe calcular el resultado.
Si insertamos el siguiente código VBA en un Módulo del Editor de Visual Basic podremos crear nuestra propia fórmula EVALUAR.
Función EvaluateString(strTextString As String)Application.VolatileEvaluateString = Application.Caller.Parent.Evaluate(strTextString)Función final
Eso es todo. Sólo 4 líneas. Aunque Excel no tiene la función EVALUAR en sí, VBA todavía la tiene.
Ahora podemos utilizar esto como si fuera una función normal.
El resultado en la celda C1 será: 2
No es necesario crear un rango con nombre cada vez y esta fórmula ahora está disponible para usar en nuestro libro de trabajo.
Nota: Si el código no se coloca en un Módulo, no funcionará.
Conclusión
Para convertir una cadena de texto en una fórmula, parece que la ruta de función definida por el usuario de VBA es la mejor opción. Si bien es posible utilizar un rango con nombre, está restringido por lo que puede lograr.
Deja una respuesta