En este artículo se va a explicar la importancia de usar las Macros en el día a día de alguien que use Excel de forma habitual, los fundamentos que las constituyen, las características y parámetros que lo configuran y se van a desarrollar varios ejercicios sencillos con los fundamentos imprescindibles para la realización de todo tratamiento de datos en Excel.
Introducción
Las macros se implementan en un lenguaje de programación llamado Visual Basic (VBA). La implementación de Macros en Excel supone las siguientes ventajas en nuestro día a día:
- Reducción de la tasa de error: Cometer menos errores al automatizar acciones que de otra forma serían manuales
- Evitar grandes cargas de trabajo manual: Posibilidad de realizar trabajos que por exceso de complejidad y de carga serían inviables
- Aumento de productividad: Creación de nuevas funciones personalizadas que en Excel no existen por defecto.
Apertura de área de trabajo
Lo primero de todo, es abrir el programador con el que vamos a implementar todos los ejercicios, para abrir el programador de Excel y acudir al apartado Visual Basic debemos habilitar el mismo, el cual no viene activado por defecto ¿como lo activamos?:
- Abrimos la hoja de Excel, vamos al apartado Archivo/Opciones/Personalizar cinta de opciones
- Activamos la opción Programador en Pestañas principales
- Ahora podemos observar como en la cinta superior de opciones aparece Programador
- Clicamos en Visual Basic
- Una vez dentro, clicamos en Insertar/Modulo y ya podemos empezar a implementar nuestro código
Almacenamiento de Macros
Una vez hemos abierto nuestro área de trabajo, podemos diferenciar dos formar de almacenar las Macros:
- La hoja de cálculo: Podrán ser usadas siempre y cuando este abierta esa hoja de cálculo. El documento debe ser guardado como “Excel habilitado para macros” en caso contrario, la programación se perderá.
- Libro de macros personal: Estarán almacenadas en tu entorno de VBA y podrán ser usadas en cualquier hoja de cálculo
También diferenciamos formas de almacenar el código:
- Módulo de hoja: Ejecución de la macro cuando ocurra un evento de hoja, por ejemplo, cuando se cierre la hoja se guarde el documento.
- Modulo de libro: Ejecución de la macro cuando ocurra un evento de libro, por ejemplo, cuando el se abra el documento Excel aparecerá un mensaje.
- Módulo estándar: Es la forma de almacenamiento de código más general, no requiere que suceda ningún evento para que se ejecute la macro, se suelen usar para tener un mayor grado de organización.
Tipos de variables
En VBA (Visual Basic) los valores se almacenan en diferentes tipos de variables:
- String: Cadenas de texto
- Integer / Long : Números enteros
- Single / Double: Números decimales
- Boolean: Valor binario (true or false)
- Variant: Cualquier tipo de dato pero dentro de ciertos rangos. Variables no declaradas adoptan este tipo.
Ejecución de Macros
Tenemos distintas formas de ejecutar las Macros desarrolladas:
- Ejecución desde el entorno de programación VBA: Las macros se pueden ejecutar línea a línea usando el F8. De esta manera podemos ver los cambios en las variables paso a paso. Efectivo cuando estamos construyendo las macros desde cero. Habilitar variables locales.
- Ejecución desde la pestaña programador: Se puede acceder a todas las macros creadas y ejecutarlas.
- Asignando la macro a una imagen importada o forma: Botón derecho en la imagen o forma insertada y seleccionamos la opción de Asignar Macro.
Una vez hemos abierto nuestro área de trabajo, comenzamos con los ejercicios:
Ejercicio 1.1
Vamos a comenzar con una macro sencilla con la cual vamos a insertar números en las primeras 10 celdas de la primera fila de la hoja de cálculo y a su vez nos iremos familiarizando con la interfaz del editor de VBA explicando cada paso que se dé.
Toda macro debe comenzar con Sub seguido del nombre de la macro que le asignemos:
Sub agregar ()
Para continuar vamos a establecer una variable para determinar el número de veces que queremos que se repita nuestra acción, es decir, en este caso queremos insertar números en las 10 primeras filas por tanto nuestra acción de insertar se repetirá 10 veces. Por tanto, estableceremos una variable llamada Contador que guarde el número 10. Por otro lado se establece una variable llamada Valor la cual se usará para insertar el valor en cada celda.
Contador = 10
Valor = 5
Posteriormente escribiremos el código correspondiente al proceso de escribir los números. Este proceso lo implementaremos con un bucle, hay distintos tipos de bucles en la programación de VBA (Visual Basic), pero el más común es el bucle for , que ejecutará un determinado proceso las veces que se establezcan, en este caso, las veces que se han establecido en el contador. También habrá que establecer un inicio que lo implementamos con la variable i.
For i = 1 To Contador
Cells(i+1, 1).Value = Valor
Por último, para que los valores que vaya insertando a lo largo de las 10 primeras celdas vayan variando, insertamos una actualización de la variable Valor que lo que hace es multiplicar el valor por 2 cada vez que se ejecuta una iteración.
Valor = Valor*2
Ejercicio 1.2
Ahora vamos a realizar el ejercicio mediante el uso de otro bucle distinto, el bucle While/Wend, este repite las instrucciones en distintas iteraciones mientras se cumple una condición. La idea es que el bucle se repita mientras la variable Valor sea inferior a 3000, de modo que como en cada iteración la variable se duplica, en el momento que supere el valor 3000 finalizará el bucle. También es necesario introducir una sentencia para que se vaya incrementando el valor de la variable i dado que para este bucle no se autoincrementa de forma automática.
While Valor < 3000
i = i + 1
Cells(i+1, 2).Value = Valor
Valor = Valor * 2
Wend
Ejercicio 2
Vamos con segundo ejercicio en el cual vamos a realizar una macro que nos genere 10 números aleatorios y nos los coloque en las 10 primeras celdas de la segunda fila. En este caso usaremos un bucle for pero sin usar ninguna variable para establecer el número de iteraciones, simplemente estableciendo el número en la sentencia del bucle.
For i = 1 To 10
Ahora vamos a implementar el código con el proceso que insertará números aleatorios en la hoja de cálculo. De manera que la función Cells, que ya usamos en el primer ejercicio, señala a una celda, estableciendo en que fila y columna esta (primer término se refiere a las filas y el segundo a las columnas). La función Rnd genera un número aleatorio, aunque en este caso usamos la función Int que nos redondea el número aleatorio al entero inferior más próximo. Finalmente multiplicamos el número aleatorio por 100.
Cells(2, i).Value = Int(Rnd*100)
Ahora volvemos a insertar los números pero esta vez con el bucle While/Wend, por tanto ahora habrá que definir la variable i para poder establecer una condición de salida del bucle y a su vez que nos sirva para ir escribiendo en las celdas sin sobrescribir.
i = 1
While i <= 10
Cells(4, i).Value = Int(Rnd * 100)
i = i + 1
Wend
Ejercicio 3
Continuamos con el tercer ejercicio, en el cual vamos a aprender a borrar el contenido de un rango determinado de celdas. Para ello aplicamos una función llamada Range con la cual podemos seleccionar un conjunto de celdas. Ahora aplicamos la función Clear que permite borrar el contenido de las mismas.
Por tanto, el código quedaría de la siguiente manera:
Sub borrarceldas ()
Range ("A1:Z100") = Clear
End Sub
El rango que aplicamos en el este ejemplo abarca desde la celda A1 hasta la celda Z100. Por tanto, abarca un área de la hoja de cálculo 100×100.
Vamos a implementar un rango que permita borrar el contenido de las 10 primeras filas tanto de la fila 2 como de la 4, es decir, vamos a borrar el contenido generado en el ejercicio 2.
Por tanto el código quedaría de la siguiente forma:
Sub borrarceldas ()
Range ("A2:J2") = Clear
Range ("A4:J4") = Clear
End Sub
Ejercicio 4
Seguimos realizando una macro con la que unimos dos cadenas de texto albergadas en diferentes variables y que posteriormente nos aparezcan por pantalla a modo de aviso.
En primer lugar tendremos que definir las variables y reservar un espacio en la memoria para ellas. Esto se realiza con la palabra reservada dim la cual permitir definir dichas variables. También estas variables se definirán como cadenas de texto con la palabra reservada String.
Dim Cadena1 As String
Dim Cadena2 As String
Una vez que hemos definido las variables vamos a darles un valor:
Cadena1 = “Hola “
Cadena2 = “mundo”
Ahora vamos a unir ambas variables usando la función MsgBox la cual permite obtener por pantalla una ventana emergente con los argumentos que se le otorguen. El símbolo & se usa para que se produzca la unión entre ambas cadenas de texto.
MsgBox Cadena1 & Cadena2
Al ejecutar la Macro se obtendrá lo siguiente:
Ejercicio 5
A continuación llevaremos a cabo una macro con un mayor grado de complejidad. Lo que se quiere explicar es el uso del condicional If/Else.
Vamos a ponernos en el caso real de que seamos profesores y se quieran evaluar 10 notas de alumnos, de manera que la celda de al lado exprese si es aprobado y a su vez se coloree de verde si el valor es igual o superior a 5 o suspenso y además se coloree de rojo si el valor de la celda es inferior 5.
En primer lugar vamos a ejecutar unas líneas de código que generen notas aleatorias en 10 celdas de una misma columna que estén comprendidos entre 1 y 10 , por ello multiplicamos la función Rnd por 10, y a su vez queremos que estas tengan solo 2 decimales por eso usamos la función WorksheetFunction.Round que me permite redondear el número a los decimales especificados en el argumento de la función, en este caso 2:
For i = 1 To 10
Cells(i+1, 5).Value = WorksheetFunction.Round(Rnd * 10, 2)
Next i
Vamos a la siguiente fase del código, en esta fase vamos a analizar el valor en cada celda para comprobar si el valor es superior o inferior a 5. Por tanto, en primer lugar vamos a realizar un bucle que vaya evaluando cada una de las celdas y guardando el valor en la variable CALIFICACION.
For j = 1 To 10
CALIFICACION = Cells(j+1, 5).Value
Y en función del valor de esta, se almacenarán en otra variable el valor aprobado o suspenso, esto último lo llevaremos a cabo con un condicional If/Else. De manera que primero se evalúa la condición del If y si se cumple el valor almacenado en la variable resultado será “aprobado” de otra manera si no se cumpliera la condición del If, el valor de la variable resultado sería “suspenso”.
If CALIFICACION >= 5 Then
resultado = "aprobado"
Else
resultado = "suspenso"
End If
Next i
Ahora insertamos el valor almacenado en la variable CALIFICACION en la celda de la derecha.
Cells(j+1, 6).Value = resultado
Por último, coloreamos la celda de verde o rojo según corresponda. Esto lo llevamos a cabo con una condición que establece que si la variable resultado tiene almacenado el valor “aprobado” entonces la celda cambiará a verde, y si no tuviera almacenado ese valor, cambiará a rojo.
If resultado = "aprobado" Then
Cells(j+1, 6).Interior.ColorIndex = 4
Else
Cells(j+1, 6).Interior.ColorIndex = 3
End If
Next j
Ejercicio 6
Seguimos con una macro que permite ver cómo funcionan los cuadros de decisión, los cuales son ventanas emergentes que permiten almacenar valores elegidos por el usuario en distintas variables.
Vamos con un ejemplo sencillo para comprobar cómo funcionan estos cuadros de decisión.
Nos va a pedir insertar dos palabras en dos ventanas emergentes y posteriormente aparecerán por pantalla ambas palabras juntas.
En primer lugar procedemos a la declaración de variables que vamos a usar:
Dim mensaje1 As String
Dim titulo1 As String
Dim Estandar1 As String
Ahora debemos definir los argumentos del cuadro de inserción de texto.
Mensaje1=”Escribe una palabra”
Titulo1=”Cuadro de texto”
Estandar1=”Hola”
La variable Mensaje1 es una cadena de texto que corresponderá al mensaje que aparezca en la ventana emergente, la variable Titulo1 corresponderá al título de la ventana emergente, y la variable Estandar1 corresponde con una respuesta predefinido que nos aparecerá de ejemplo para ingresar. Ahora vamos a escribir el código perteneciente a la función que genera la ventana emergente, esta función es InputBox.
Respuesta1 = InputBox (Mensaje1, Titulo1, Estandar1)
Respuesta2 = InputBox (Mensaje1, Titulo1, Estandar1)
Aparecerán dos ventanas emergentes pidiéndonos que ingresemos una palabra en cada uno. Cada palabra que ingresemos irá almacenada en cada variable.
Para acabar queremos unir ambas palabras, esto se realiza con la función &, finalmente para que aparezcan en una ventana emergente, esto lo llevamos a cabo con la función MsgBox.
MsgBox Respuesta1 & Respuesta2
Ejercicio 7
Ahora vamos a aprender a cambiar el formato del contenido de las hojas de cálculo. En este ejemplo vamos a cambiar a letra negrita, cursiva, a un estilo de fuente “Times New Roman” y a un tamaño de letra 17 el contenido de las 10 primeras celdas de la primera columna.
Para llevar a cabo esto en primer lugar seleccionamos las celdas que queremos modificar.
Range("A1:A10").Select
Escribimos el código que cambia a letra negrita a esas celdas.
Selection.Font.Bold = True
Escribimos el código que cambia a letra cursiva a esas celdas.
Selection.Font.Italic = True
Escribimos el código que cambia el estilo de letra a Times New Roman a esas celdas.
Selection.Font.Name = "Times New Roman"
Escribimos el código que cambia el tamaño de letra a 17 a esas celdas.
Selection.Font.Size = 17
Ahora vamos a resetear al formato de origen.
Range("A1:A10").Select
Escribimos el código que quita la letra negrita a esas celdas.
Selection.Font.Bold = False
Escribimos el código que quita la letra cursiva a esas celdas.
Selection.Font.Italic = False
Escribimos el código que cambia el estilo de letra a Calibri a esas celdas.
Selection.Font.Name = "Calibri"
Escribimos el código que cambia el tamaño de letra a 11 a esas celdas.
Selection.Font.Size = 11
Hasta aquí los ejercicios básicos con todas las funciones que se deben conocer para comenzar con el mundo de las Macros.
Ejercicios más avanzados
Si quisiéramos acceder a ejercicios más avanzados clicamos en los siguientes enlaces:
0 comentarios