¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Macros y lenguaje VBA
  3. Manipular fórmulas
Extrait - Macros y lenguaje VBA Descubra la programación en Excel (nueva edición)
Extractos del libro
Macros y lenguaje VBA Descubra la programación en Excel (nueva edición) Volver a la página de compra del libro

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.

images/cap17_img_01.png

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:

images/cap17_img_02.png

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 constatar 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.

images/cap17_img_07.png

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_Capitulo17.

 En esta hoja, rellene el rango de celdas A1 a B6 como se muestra en la siguiente imagen: 

images/cap17_img_10.png

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 Capitulo17_Ejercicio1A.

 Esta macro escribirá en la celda B7 una fórmula SUMA de las cantidades. Deberá utilizar la fórmula en español (FormulaLocal).

 Ejecute la macro Capitulo17_Ejercicio1A. El total mostrado en la celda B7 deberá ser 370.

Cantidad máxima

 Cree la macro Capitulo17_Ejercicio1B.

 Esta macro escribirá en la celda B8 una fórmula MAX de cantidades. Volverá a utilizar la fórmula en español (FormulaLocal).

 Ejecute la macro Capitulo17_Ejercicio1B. El total mostrado en la celda B8 deberá ser 250.

Escribir fórmulas en inglés

Número total de cajas

 Cree la macro Capitulo17_Ejercicio2A.

 Esta macro escribirá en la celda B9 una fórmula que indique el número total de cajas (SUMA.SI en español, SUMIF en inglés). Utilizará esta vez una fórmula en inglés (Formula).

 Ejecute la macro Capitulo17_Ejercicio2A. El total mostrado en la celda B9 deberá ser 75.

Número total de apariciones...