(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

¿Cómo crear una Macro en Excel?

¿Qué es una Macro?

Una macro es una serie de comandos o instrucciones que permanecen almacenados dentro de Excel y que podemos ejecutar cuando sea necesario y cuantas veces lo deseemos.

Se trata de un conjunto de comandos que se almacena en un lugar especial de Excel de manera que están siempre disponibles cuando los necesites ejecutar.

Las macros se escriben en un lenguaje especial que es conocido como Visual Basic for Applications (VBA). Este lenguaje permite acceder a prácticamente todas las funcionalidades de Excel y con ello también ampliar la funcionalidad del programa.

Aunque en el caso de que no queramos hacerlo por código, podemos usar una herramienta que nos ofrece el propio Excel.

Mostrar la pestaña Programador

La pestaña Programador se utiliza en la creación de macros y de controles de formulario. Sin embargo, dicha pestaña se muestra de manera predeterminada en la Cinta de opciones de Excel y por lo tanto es importante aprender a mostrarla.

Para activar la pestaña Programador, debemos acudir a la configuración de la Cinta de opciones la cual se encuentra en el cuadro de diálogo Opciones de Excel y a continuación hacer clic derecho sobre ella.

Imagen de como se activa la pestaña Programador

Se nos abrirá un recuadro como este, y debemos activar la casilla donde está la opción de programador.

Imagen de dónde debemos activar la opción Programador

Una vez hecho esto, pulsamos el botón de “Aceptar” y a continuación veremos la pestaña de Programador en la Cinta de opciones.

Imagen de la pestaña Programador en la cinta de opciones

Una vez activada la pestaña de Programador, veremos que los comandos se encuentran organizados en cuatro grupos.

  • Código: Los comandos necesarios para iniciar el Editor de Visual Basic, listar las macros disponibles para ejecutarlas o eliminarlas y crear una macro sin necesidad de saber programación VBA.
  • Complementos: Nos permite administrar y habilitar todo tipo de complementos como el caso del complemento Solver o las Herramientas para análisis.
  • Controles: Contiene comandos para agregar controles especiales a las hojas de Excel como los controles de formulario.
  • XML: Con estos comandos podremos importar datos de un archivo XML y trabajar con archivos XML.

Imagen de los comando organizados en cuatro grupos

Crear una Macro mediante la grabadora de Macros

El método más sencillo para crear una Macro es utilizar la grabadora de macros que guardará todos los pasos realizados para ejecutarlos posteriormente.

La grabadora de macros almacena cada acción que se realiza en Excel, por eso es conveniente planear con antelación los pasos a seguir de manera que no se realicen acciones innecesarias mientras se realiza la grabación. Para utilizar la grabadora de macros nos dirigimos a la pestaña Programador y seleccionamos la opción Grabar macro.

Imagen de donde podemos seleccionar la opción grabar macro en la pestaña Programador

Al pulsar el botón se mostrará el cuadro de diálogo Grabar macro.

Imagen del cuadro de diálogo grabar macro

En el cuadro de texto “Nombre de la macro” escribimos el nombre que identificará la macro. De manera opcional podemos asignar un método abreviado de teclado el cual permitirá ejecutar la macro con la combinación de teclas especificadas.

La lista de opciones “Guardar macro en” permite seleccionar la ubicación donde se almacenará la macro:

  • Este libro. Guarda la macro en el libro actual.
  • Libro nuevo. La macro se guarda en un libro nuevo y puede ser ejecutada en cualquier libro creado durante la sesión actual de Excel.
  • Libro de macros personal. Esta opción permite utilizar la macro en cualquier momento sin importar el libro de Excel que se esté utilizando.

También podemos escribir una Descripción para la macro. Finalmente pulsamos el botón “Aceptar” para iniciar con la grabación de la macro. Al terminar de ejecutar las acciones planeadas pulsaremos el botón “Detener grabación” para completar la macro.

Programando en VBA

VBA, Visual Basic for Applications, es un lenguaje de programación que permite extender las habilidades del programa para cubrir nuestros requerimientos. Utilizando VBA se pueden desarrollar nuevos algoritmos para analizar la información o para integrar a Excel con alguna otra aplicación, como Microsoft Access.

El primer concepto a entender en este lenguaje es que cada elemento de Excel es representado en VBA como un objeto. Por ejemplo, existe el objeto Workbook que representa a un libro de Excel. También existe el objeto Sheet que representa una hoja y el objeto Chart para un gráfico.

El segundo concepto importante es que cada uno de estos objetos tiene propiedades y métodos. Por ejemplo el objeto Workbook tiene propiedades como ActiveSheet (Hoja activa), Name (Nombre), ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus métodos son Save (Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger), Unprotect (Desproteger).

Editor de Visual Basic

El Editor de Visual Basic VBE, es un programa relacionado a Excel porque nos permite escribir código VBA para crear las macros.

Para abrir el editor nos situamos en la pestaña de Programador y seleccionamos la opción de Visual Basic.

Imagen de cómo abrir el editor seleccionado la opción Visual Basic

En la parte izquierda se muestra el Explorador de proyectos el cual muestra el proyecto actual y además las hojas pertenecientes a ese libro de Excel.

Imagen del Explorador de Proyectos

Dentro del Editor podemos observar una ventana llamada “Inmediato” en la parte inferior. Esta ventana permite introducir instrucciones y observar el resultado inmediato. Además, desde el código VBA podemos imprimir mensajes hacia la ventana Inmediato con el comando Debug.Print de manera que podamos depurar nuestro código.

El área más grande en blanco es donde escribiremos el código VBA. Es en esa ventana en donde escribimos y editamos las instrucciones VBA que dan forma a nuestras macros.

Crear una Macro con VBA

Para crear una macro mediante código VBA, en primer lugar abrimos el editor de Visual Basic. Una vez dentro del Editor hacemos clic derecho sobre el título del proyecto y dentro del menú seleccionamos la opción “Insertar” y posteriormente “Módulo”.

Imagen del editor, menú Insertar opción Módulo

Se creará la sección Módulos y dentro de la misma se mostrará el módulo recién creado. Podemos saber que el módulo está abierto porque su nombre se muestra en el título entre corchetes.

Nuestra primera subrutina va a consistir en copiar este código dentro del editor VBA.

Sub MiPrimeraMacro()
MsgBox "Hola mundo"
End Sub

Llegados a este punto vamos a ver las instrucciones mostradas:

Subrutinas VBA

La instrucción Sub es la abreviación de la palabra subrutina. Una subrutina es un conjunto de instrucciones que se ejecutarán una por una hasta llegar al final de la subrutina, que está especificada por la instrucción End Sub.

Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos organizar adecuadamente nuestro código. Una subrutina siempre tiene un nombre el cual debe ser especificado justo después de la instrucción Sub y seguido por paréntesis.

La función MSGBOX en VBA

Esta función nos ayuda a mostrar una ventana de mensaje de manera que podamos estar comunicados con el usuario sobre cualquier error o advertencia que necesitamos darle a conocer.

Ejecutar Macro

Para probar nuestro código bastará con pulsar el botón Ejecutar que se encuentra dentro de la barra de herramientas.

En cuanto pulsemos el botón, se ejecutará el código y veremos el resultado en pantalla.

Por último para guardar la macro debemos guardar el archivo como Libro de Excel habilitado para macros, de lo contrario perderemos el código del módulo creado.

Objetos y propiedades

Cada uno de los objetos de Excel tiene propiedades y métodos. Las propiedades son las características del objeto y los métodos son las acciones que el objeto puede realizar.

Un objeto de Excel tiene propiedades. Por ejemplo una celda (Range) tiene las propiedades valor (Value) y dirección (Address) entre muchas otras. Estas propiedades describen mejor al objeto.

Los métodos son las actividades o acciones que el objeto puede realizar. Por ejemplo una celda (Range) tiene los métodos activar (Activate), calcular (Calculate), borrar (Clear) entre muchos más.

Para acceder a las propiedades y métodos de un objeto lo hacemos a través de una nomenclatura especial. Justo después del nombre del objeto colocamos un punto seguido del nombre de la propiedad o del método.

Range("A1").Value = "Hola"

De esta manera asignamos una cadena de texto al valor de la celda A1. Ahora bien, si queremos borrar ese valor que acabamos de colocar en la celda podemos utilizar el método Clear:

Range("A1").Clear

En el caso de que queramos ver todas las propiedades y métodos de un objeto podemos usar el Editor de Visual Basic.

Imagen del Editor de Visual Basic

Cuando introducimos el punto después del nombre del objeto, nos listará las propiedades y métodos con iconos distintos. En la imagen de arriba los métodos son los que tienen el icono de color verde.

Navegando por el modelo de objetos

Excel tiene un modelo de objetos el cual es una jerarquía de todos los objetos que podemos utilizar desde el lenguaje VBA. En la parte superior de la jerarquía se encuentra el objeto Application y todos los demás objetos estarán por debajo de él.

Para tener acceso a los objetos que están por debajo del objeto Application podemos utilizar el punto. El punto nos ayuda a navegar por la jerarquía hacia un nivel inferior.

Imagen de los objetos que están por debajo del objeto Application

Por ejemplo, si deseamos poner en negritas el texto de la celda A1 debemos llegar al objeto Range el cual nos dará acceso a modificar la propiedad Bold de la siguiente manera:

Application.ActiveWorkbook.ActiveSheet.Range("A1").Font.Bold = True

Existe una funcionalidad conocida como objetos predeterminados, la cual nos permite omitir la escritura de algunos objetos y aun así tener un código funcional. Por ejemplo, en la sentencia mostrada previamente podemos omitir el objeto Application y tener nuestro código funcionando correctamente:

ActiveWorkbook.ActiveSheet.Range("A1").Font.Bold = True

Incluso podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el código se ejecutará siempre sobre el libro activo y la hoja que esté activa al momento de la ejecución:

Range("A1").Font.Bold = True

Los objetos Workbook y Worksheet

El objeto Workbook representa un libro de Excel y el objeto Worksheet representa una hoja. Como sabemos, un libro de Excel puede tener más de una hoja lo cual significa que un objeto Workbook puede contener más de un objeto Worksheet.

Para poder establecer mejor la relación entre los objetos Workbook y Worksheet usamos las colecciones de objetos. De esta manera un objeto Workbook tiene asociada una colección de objetos Worksheets la cual contiene los objetos Worksheet que representan las hojas de ese libro de Excel. De la misma manera, el objeto Application tiene una colección de objetos Workbooks la cual incluirá todos los objetos Workbook de los libros de Excel que usemos en nuestro código VBA.

Para abrir un libro de Excel en VBA podemos utilizar el método Open del objeto Workbooks de la siguiente manera:

Application.Workbooks.Open Filename:="C:Libro1.xlsx"

Esta instrucción abrirá el archivo ubicado en «C:Libro1.xlsx» y lo agregará a la colección de objetos Workbooks. De esta manera podemos abrir tantos archivos como sean necesarios y para cada uno de ellos se creará un objeto Workbook el cual será almacenado dentro de Workbooks.

Una vez que hemos abierto los archivos que necesitamos podremos hacer referencia a cada uno de ellos a través de la colección de objetos Workbooks de la siguiente manera:

Application.Workbooks(1).Activate

El número dentro de los paréntesis indica el índice del objeto Workbook dentro de la colección de objetos Workbooks. De manera predeterminada el índice 1 será para el libro de Excel que contiene el código VBA y a partir de ahí la numeración será de acuerdo al orden en que hayamos abierto otros archivos. Si conocemos el nombre del libro podemos utilizarlo en lugar del índice y tener una instrucción como la siguiente:

Application.Workbooks("Libro1.xlsx").Activate

De igual manera podemos acceder las hojas de cualquier libro a través de su colección de objetos Worksheets. Esta colección también puede ser accedida por el índice de cada una de las hojas del libro:

Application.Workbooks(1).Worksheets(1).Range("A1").Value = "Hola"

Esta instrucción accede a la hoja con el índice 1 y coloca el valor “Hola Mundo”  en la celda A1. También podemos acceder a una hoja a través de su nombre en caso de que lo conozcamos:

Application.Workbooks(1).Worksheets("Hoja1").Range("A1").Value = "Hola"

A través de la colección de objetos Worksheets podemos crear nuevas hojas en un libro con la siguiente instrucción:

Worksheets.Add

No es necesario iniciar la instrucción anterior con el objeto Application ni el objeto Workbooks. Esta sintaxis indica que se agregará una nueva hoja al libro que esté activo en ese momento. Este es un método abreviado que podemos utilizar si estamos seguros de que el libro activo es el libro al que deseamos agregar una nueva hoja. De lo contrario, podemos especificar tota la ruta completa:

Application.Workbooks("Libro1.xlsx").Worksheets.Add

El objeto Application

Es el objeto que está en el nivel más alto de la jerarquía del modelo de objetos de Excel. Además nos da acceso a opciones y configuraciones a nivel de la aplicación. Muchas de las opciones que podemos modificar con el objeto Application son las mismas que encontramos en la ficha Archivo dentro del cuadro de diálogo Opciones de Excel.

Ya que el objeto Application es el objeto principal dentro de VBA todos los demás objetos derivan de él. Es por ello que las instrucciones suelen empezar especificando el objeto Application:

Application.ActiveSheet.Name = "Reporte de Ventas"

Sin embargo en la mayoría de los casos podemos omitir la escritura del objeto Application, ya que supone que todos los demás objetos provienen de él. De esta manera la siguiente instrucción también es válida.

ActiveSheet.Name = "Reporte de Ventas"

El objeto Application tiene algunas colecciones que son de mucha utilidad como Sheets, Columns y Rows. La colección Sheets nos permite acceder a todas las hojas de un libro:

Application.Sheets.Count

Es importante mencionar que la colección Sheets se referirá al libro de Excel que se encuentre activo en el momento de ejecutar esta instrucción. Las colecciones Columns y Rows nos permitirán acceder a las columnas y filas de la hoja activa.

Application.Columns(5).Select
Application.Rows(5).Select

El objeto Application tiene muchas propiedades, pero algunas de las más importantes son las siguientes:

  • ActiveWorkbook. Devuelve un objeto Workbook que representa el libro de Excel activo.
  • ActiveSheet. Devuelve un objeto Worksheet que representa a la hoja que esté actualmente seleccionada (activa).
  • ActiveCell. Devuelve un objeto Range que representa la celda activa dentro de la hoja activa en el libro de Excel activo.
  • ThisWorkbook. Esta propiedad devolverá un objeto Workbook que representará el libro que contiene la macro que está siendo ejecutada.

Ejemplos de macros con código básico

A continuación vamos a ver unos de cómo realizar tareas básicas con macros.

1. Hoja de trabajo con fecha y hora actual:

Para escribir la fecha y la hora actual en la hoja de cálculo utilizamos el siguiente código:

Sub escribirFechaYHora ()
Range ("A1") = Now
End Sub

Imagen del resultado de aplicar macro para escribir fecha y hora actual

Esto mostrará la fecha y hora en la primera celda, pero podemos cambiar Range(“A1”) para mostrarla en cualquier otra.

2. Ejecutar una macro al abrir la hoja de cálculo:

Hay casos donde la macro debe abrirse junto con la hoja de cálculo. En este caso basta con montar una macro con el parámetro Auto_Open () Con el siguiente código:

Sub Auto_Open ()
MsgBox "Para más información sobre Excel, visite https://support.office.com/es-es/excel "
End Sub

3. Macro que habla:

Podemos crear una macro que nos lea el contenido de las celdas que le indiquemos:

Sub ExcelFalando ()
("A1: A5").
End Sub

Utilizando el siguiente código, nos leerá el contenido desde la celda A1, hasta la A5.

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies