Manipular fórmulas
Objetivos
En este capítulo descubrirá las diferentes formas de escribir fórmulas en las celdas.
Antes de pasar a las fórmulas en VBA y a la clase WorksheetFunction, le recordaremos la pestaña Fórmulas de Excel.
Terminará este capítulo con ejercicios para validar sus nuevos conocimientos.
Fórmulas en Excel
Existen centenares de fórmulas disponibles en Excel e incluso un usuario muy avanzado solo utilizará una mínima parte de ellas. Sin necesidad de ser un experto en fórmulas y funciones de Excel, he aquí un breve recordatorio de la pestaña Fórmulas de la cinta de opciones de Excel y de algunos de los errores de salida de las fórmulas con los que tendrá que lidiar en VBA.
Pestaña Fórmulas
En la cinta de opciones de Excel, las fórmulas tienen su propia pestaña dedicada.
La cinta de opciones tiene un grupo Biblioteca de funciones en el que se agrupan las fórmulas por categorías.
Puede introducir sus propias fórmulas directamente en las celdas o en la barra de fórmulas.
Las fórmulas comienzan con el signo = y utilizan tanto funciones de Excel como celdas o valores escritos «directamente».
=A1+B2
=AÑO(C3)
=TEXTO(AHORA(); "AAAA-MM")
Ejemplo 1: diferentes tipos de fórmulas de Excel
Cada una de estas fórmulas proporciona un valor como salida, de diferentes tipos de datos, según los valores y funciones utilizadas (texto, valor numérico, fecha, booleano, etc.).
Errores en la salida de las fórmulas
Cuando se ejecutan fórmulas que devuelven errores, por ejemplo en una búsqueda que no encuentra ningún resultado (con BUSCARV), las celdas muestran...
Fórmulas en VBA
Como descubrirá en las siguientes secciones, hay varias formas de escribir fórmulas en VBA. Dependiendo de su fluidez con la lengua de Shakespeare o de sus limitaciones empresariales, tendrá que usar uno u otro método.
Usar inicialmente la grabadora de macros
Para empezar, utilice la grabadora de macros para ver qué código predefinido se genera cuando se añaden fórmulas a las celdas.
Manipulaciones por realizar
He aquí los cinco pasos que se deben realizar:
1 - Rellenar las celdas
En un libro nuevo o existente, introduzca los siguientes datos en las celdas A1 a C3:
2 - Ejecutar la grabadora de macros
Como se vio en el capítulo La grabadora de macros, inicie la grabadora de macros y nombre la macro Macro1.
3 - Agregar las fórmulas
En la celda D1, agregue la fórmula: =BUSCARV(1;A:C;3;FALSO)
En la celda E1, agregue la fórmula: =BUSCARV("Martín Juárez";B:C;2;FALSO)
4 - Detener la grabadora de macros
Detenga la grabadora de macros tal y como vio en el capítulo La grabadora de macros.
5 - Analizar el código generado automáticamente
Acceda a la interfaz VBE; este es el código que debería ver en el módulo recién creado:
Sub Macro1()
Range("D1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(1,C[-3]:C[-1],3,FALSE)"
Range("E1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(""Martín Juárez"",
C[-3]:C[-2],2,FALSE)"
End Sub
Ejemplo 2: código generado por la grabadora de macros
Análisis del código generado por la grabadora de macros
La primera línea de la macro consiste en seleccionar la celda D1, que a estas alturas ya conoce.
Range("D1").Select
La segunda línea utiliza la celda activa (D1) para asignarle una fórmula a través de la propiedad FormulaR1C1, que verá con más detalle en la siguiente sección.
ActiveCell.FormulaR1C1 = "=VLOOKUP(1,C[-3]:C[-1],3,FALSE)"
La fórmula se aplica directamente a nivel de una celda de tipo Range/Cells.
Puede ver que la fórmula se pasa como una cadena, con el signo = como primer carácter, como lo que usted introdujo manualmente....
Usar sus propias funciones en las fórmulas de Excel
Otra posibilidad muy práctica con VBA es utilizar sus propias funciones directamente en las celdas de Excel.
Hacerlo es muy sencillo. Las funciones que desee utilizar en las fórmulas tendrán que escribirse en módulos (no en ThisWorkbook, en las hojas ni en los módulos de clase). El ámbito de las funciones también debe ser Public.
He aquí un ejemplo de una fórmula que devuelve el valor 1.
Public Function Devuelve1() As Integer
Devuelve1=1
End Function
Ejemplo 17: hacer que una función personalizada esté disponible en las fórmulas
Una vez escritas estas pocas líneas, al ir a una celda de Excel y escribir el nombre de la función, esta aparecerá en la lista de funciones disponibles, respetando las mayúsculas y minúsculas del nombre.
Cuando la fórmula se valide, el valor que devuelve la función (aquí 1) se mostrará directamente en la celda.
Esto también funciona si se cuenta con una función que requiere parámetros.
'Función que devuelve el cuadrado del valor pasado como parámetro
Public Function RegresaElCuadrado(iValor As Integer) As Integer
RegresaElCuadrado = iValor * iValor
End Function
Ejemplo 18: función personalizada que requiere un parámetro
Bastará...
Usar fórmulas de Excel directamente en VBA - WorksheetFunction
Puede utilizar funciones directamente en VBA sin pasar por las fórmulas de Excel gracias a la propiedad WorksheetFunction del objeto Application.
Propiedad WorksheetFunction
La propiedad WorksheetFunction reagrupa el conjunto de funciones de Excel disponibles en la interfaz de Excel, directamente en formato VBA.
Al igual que hay cientos de funciones de Excel para las fórmulas, existen centenares de funciones miembros de la propiedad WorkSheetFunction.
A continuación, le presentamos algunas de ellas para ayudarle a entender el principio.
Miembros de la propiedad WorksheetFunction
Los puntos comunes de las funciones en Excel y VBA son sus nombres en inglés y el orden de los parámetros que las funciones esperan como entrada. También se pueden pasar celdas o valores fijos.
La sintaxis general de esta propiedad es la siguiente:
Application.WorksheetFunction.NombreDeLaFunción(Arg1, [Arg2],...)
Ejemplo 19: sintaxis general de la propiedad WorksheetFunction
El nombre de la función NombreDeLaFunción depende de la función de Excel que se vaya a utilizar; el número de parámetros es variable dependiendo de la función usada.
Estos son algunos ejemplos de funciones que puede utilizar.
Mínimo, máximo y promedio
Las funciones MIN, MAX y PROMEDIO permiten devolver, respectivamente, el valor mínimo, máximo...
Opciones de cálculo y cálculo en una hoja o libro
Opciones de cálculo en VBA: Calculation
Puede referirse a la sección dedicada del capítulo Manipular la aplicación Excel para ver las propiedades de Calculation.
Calcular una hoja, calcular todo el libro: Calculate
Puede lanzar un cálculo en una hoja o libro por medio del método Calculate.
La sintaxis será la siguiente:
Worksheets("Hoja").Calculate
Ejemplo 23: usar el método Calculate
Ejercicios
Antes de realizar los siguientes ejercicios, cree la hoja Ejercicios_ManipulacionFormulas.
En esta hoja, rellene el rango de celdas A1 a B6 como se muestra en la siguiente imagen:
El objetivo de los ejercicios es utilizar fórmulas basadas en estos datos.
Escribir fórmulas en español
Número total de elementos
Cree la macro FormulaSumaVolumenes.
Esta macro escribirá en la celda B7 una fórmula SUMA de los volumenes. Deberá utilizar la fórmula en español (FormulaLocal).
Ejecute la macro FormulaSumaVolumenes. El total mostrado en la celda B7 deberá ser 178.
Cantidad máxima
Cree la macro FormulaMaximoVolumenes.
Esta macro escribirá en la celda B8 una fórmula MAX de volumenes. Volverá a utilizar la fórmula en español (FormulaLocal).
Ejecute la macro FormulaMaximoVolumenes. El total mostrado en la celda B8 deberá ser 75.
Escribir fórmulas en inglés
Numero total de pedidos
Cree la macro FormulaTotalYODA.
Esta macro escribirá en la celda B9 una fórmula que indique el número total de pedidos (SUMA.SI en español, SUMIF en inglés). Utilizará esta vez una fórmula en inglés (Formula).
Ejecute la macro FormulaTotalYODA. El total mostrado en la celda B9 deberá ser 100.