Macros en Excel

Las macros de Excel nos permiten automatizar tareas que realizamos cotidianamente de manera que podamos ser más eficientes en nuestro trabajo. Una macro no es más que una serie de comandos o instrucciones que permanecen almacenados dentro de Excel y que podemos ejecutar cuando sea necesario y cuantas veces lo deseemos.

26-Sep-2016

Cuando hablamos de una Macro en Excel nos referimos a un lenguaje de programación orientado a aplicaciones. En este caso particular, se utiliza VBA (Visual Basic for Applications) el cual es un lenguaje de programación desarrollado por Microsoft.  Excel, al igual que los otros programas de la familia de Microsoft Office incluye el lenguaje VBA.

La combinación entre la generación de un código VBA y su posterior ejecución en Excel es lo que se llama una Macro. A fin de cuentas una Macro es un programa el cual contiene un trozo de código de manera que podemos automatizar procesos que el realizarlos a mano nos pueden tomar mucho tiempo.

Otra cosa que se debe tener en cuenta es que VBA no es lo mismo que VB (Visual Basic), ya que VB es un lenguaje de programación que permite crear programas auto ejecutables (conocidos como archivos EXE). A pesar de que VBA y VB tienen mucho en común, son dos cosas distintas.

La idea de crear una Macro es la de automatizar tareas que son repetitivas o que deben ser desarrollas con frecuencia.  Por ejemplo, preparar informes mensuales de manera que todos los meses podamos crear informes con un mismo formato.

¿Para qué sirve una macro en Excel?

Una macro nos ayuda a automatizar aquellas tareas que hacemos repetidamente. Una macro es una serie de instrucciones que son guardadas dentro de un archivo de Excel para poder ser ejecutadas cuando lo necesitemos.

Automatización de tareas

Seguramente estamos más familiarizados con procesos de automatización en el ámbito industrial. Un ejemplo muy claro son las plantas ensambladoras de automóviles donde existen robots que han sustituido tareas que antes eran hechas por humanos. La automatización trajo beneficios como mayor eficiencia y productividad de las plantas y un mejor aprovechamiento del tiempo del personal al reducir la cantidad de tareas repetitivas que realizaban.

De la misma manera las macros nos ayudan a eliminar esas tareas repetitivas de nuestro trabajo cotidiano al permitirnos utilizar mejor nuestro tiempo en el análisis de los datos  y en la toma de decisiones.

¿Cómo se ve una macro en Excel?

Las macros son escritas en un lenguaje de programación conocido como VBA por sus siglas en inglés (Visual Basic for Applications). Como cualquier otro lenguaje de programación debemos aprender a utilizar los comandos que nos ayudarán a indicar a Excel lo que deseamos hacer con nuestros datos.

Código VBA de una macro

Aprender los conceptos básicos del lenguaje VBA no suele ser complicado y se puede lograr fácilmente con empeño y práctica. Lo que toma un poco más de tiempo es pulir nuestras habilidades de programación. Lo que quiero decir con esto es que para ser un buen programador de macros debemos  dedicar mucho tiempo en resolver múltiples problemas en donde podamos llevar al límite el lenguaje VBA.

Para poder crear una macro o ejecutar una macro ya creada, será necesario mostrar la ficha ‘Programador’ en la cinta de opciones de Excel.

Ficha de opciones Programador

Mostrar la ficha programador

Hacemos clic en la ficha Archivo y elegimos la sección Opciones. Se mostrará el cuadro de diálogo Opciones de Excel donde deberemos seleccionar la opción Personalizar cinta de opciones.

Archivo -> Opciones
Personalizar Cinta de Opciones

En la lista de fichas disponibles que se nos mostrará a la derecha, tendremos que marcar la casilla correspondiente a la ficha ‘Programador’.

Activar Ficha Programador

Aceptamos los cambios y la ficha se mostrará en la cinta de opciones.

Ficha Programador

Grupos de la ficha Programador

La ficha Programador está dividida en 5 grupos donde se muestran órdenes, opciones y herramientas para trabajar en el desarrollo de macros.

Grupo Código

En el grupo Código tenemos los comandos necesarios para iniciar el Editor de Visual Basic donde se puede escribir directamente código VBA. También nos permitirá ver la lista de macros disponibles para poder ejecutarlas o eliminarlas. Y no podríamos olvidar mencionar que en este grupo se encuentra el comando Grabar macro el cual nos permite crear una macro sin necesidad de saber sobre programación en VBA.

Grupo Complementos

El grupo Complementos nos permite administrar y habilitar complementos de Excel como las herramientas para análisis o el Solver o complementos externos de otras aplicaciones como pueda ser Acrobat PDFMaker (si tenemos instalado Adobe Acrobat) para crear archivos pdf.

Grupo Controles

El grupo Controles incluye funcionalidad para agregar controles especiales a las hojas de Excel como los controles de formulario que son botones, casillas de verificación, botones de opción entre otros más que serán de gran utilidad para ampliar la funcionalidad de Excel.

Grupo XML

El grupo XML permite importar datos de un archivo XML así como opciones útiles para codificar archivos XML.

Grupo Modificar

Finalmente el grupo Modificar solamente contiene el comando Panel de documentos que nos permite utilizar los llamados paneles de información de documentos personalizados.

Aunque pueden parecer muchos y complicados los comandos de la ficha Programador los grupos código y controles son los más importantes que deberemos conocer para crear macros sencillas o complejas según el caso que deseemos abordar.

Creación de una macro

A la hora de crear macros, tenemos las opciones:

  • Visual Basic: donde se nos mostrará el editor de Visual Basic el cual nos permitirá escribir directamente el código con las instrucciones que serán ejecutadas por la macro.
  • Grabar macro: este otro método utiliza la llamada Grabadora de macros, la cual irá grabando todas las acciones que realicemos en Excel hasta que detengamos la grabación. Una vez grabada la macro podremos ‘reproducir’ de nuevo las acciones desde la opción ‘Macros’ seleccionándola con tan solo un clic o modificar el código generado en VBA para adaptarlo mejor a nuestras necesidades.

La grabadora de macros

Podemos crear una macro utilizando el lenguaje de programación VBA, pero el método más sencillo 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 debemos ir a la ficha Programador y seleccionar el comando Grabar macro.

Comando Grabar Macro

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

Opciones Grabar Macro

En el cuadro de texto Nombre de la macro deberemos colocar el nombre que identificará de manera única a la macro que estamos por crear. 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 que pueden ser ejecutadas 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 colocar una ‘Descripción’ para la macro que vamos a crear. Finalmente debemos pulsar el botón Aceptar para iniciar con la grabación de la macro.

Para finalizar la grabación de las acciones que estemos realizando, deberemos pulsar el botón Detener grabación para completar la macro. También podemos pulsar el botón desde la barra de estado de Excel.

Botón Detener Grabación

Ejemplo básico de grabadora de macros.

Deseamos automatizar la simple tarea de escribir nuestro nombre y el nombre de la empresa en dos celdas con un formato de letra concreto y la fecha actual en otra celda en un formato de fecha larga.

Para el planteamiento de esta macro los pasos a seguir serían:

  • Introducir nuestro nombre en una celda
  • En la celda de abajo escribir el nombre de la empresa
  • Seleccionar ambas celdas y aplicarles un formato de fuente
  • Desplazarnos una celda más abajo del nombre de la empresa y escribir la fórmula =HOY()
  • Seleccionar la celda de la fecha y ejecutar la orden de Copiar (CTRL+C), sobre la misma celda ejecutar la orden Pegar valores para que la fórmula se convierta en un valor y no se actualice la próxima vez que abramos el libro.
  • Aplicarle el formato de fecha larga de la lista de formatos
  • Detener la grabación

Manos a la obra:

Activamos el botón grabar macro del grupo Código. Asignamos un nombre a la macro ‘MiNombre’ y una combinación de teclas ‘CTRL+Mayus+M’ y pulsamos el botón Aceptar para iniciar la grabación.

Opciones Grabar Macro
  • Introducimos nuestro nombre en la celda actual.
  • Pulsamos en la celda inferior y escribimos el nombre de la empresa
  • Seleccionamos las dos celdas y les aplicamos el formato de fuente deseado
Aplicando Formato a las celdas
  • Hacemos click en la celda de debajo de la empresa y escribimos la fórmula =HOY() para obtener la fecha actual del sistema.
  • Seleccionamos la celda que contiene la fórmula y ejecutamos la orden Copiar (CTRL+C)
Copiando contenido de celda
  • Desplegamos las órdenes especiales de pegado y seleccionamos ‘Pegar Valores’
Pegado Especial (Pegar Valores)
Fórmula sustituida por su valor
  • Esta acción nos convertirá la fórmula en su valor correspondiente
  • Para finalizar regresamos a la ficha ‘Programador’ y pulsamos el botón de detener grabación.

Ahora sólo nos queda probar la macro para comprobar que repite de forma correcta las órdenes grabadas.

Nos situamos en la celda A1 de una nueva hoja. Nos dirigimos a la ficha ‘Programador’ y pulsamos sobre el botón Macros, con lo que se nos abre la ventana de administración de macros.

Administrador de Macros. Ejecutar macro

Seleccionamos nuestra macro y pulsamos el botón Ejecutar o directamente sin abrir el administrador de macros, pulsamos la combinación Ctrl+Mayus+M.

Como podréis observar la macro ha reproducido las órdenes de forma correcta y tenemos nuestro nombre, el nombre de la empresa y la fecha actual.

¡PERO OJO! Si intentáis ejecutar la macro en cualquier otra celda de la hoja, observareis que los datos siempre se muestran en la posición A1 de la hoja activa. Este comportamiento es debido a que las macros siempre graban por defecto las referencias de las celdas en absoluto.

Para indicar que la macro grabe los pasos con referencias relativas hay que pulsar el botón 'Usar referencias relativas' antes de comenzar la grabación de la macro.

Usar referencias relativas

Si durante la grabación deseamos realizar alguna operación con una referencia absoluta, volveremos a pulsar sobre el mismo botón ‘Usar referencias relativas’.

Analizar el código que se ha grabado.

Para visualizar el código generado y analizar sus instrucciones, podemos pulsar sobre el botón ‘Visual Basic’ de la ficha programador o pulsar la combinación de teclas ALT+F11.

Con ello se nos abrirá el editor de VBA, donde tendremos que pulsar sobre la carpeta ‘Módulos’ para poder mostrar el ‘Módulo1’ que es donde se encuentra el código generado por la macro. Veremos el código VBA que reproduce los pasos que hemos ido realizando durante la grabación de la macro. Si deseamos incluir comentarios al contenido de la macro, escribiremos el texto anteponiendo una comilla simple.

Código VBA de la macro

Veamos el código con los comentarios para explicar las órdenes que se han grabado.

Sub MiNombre()
'
' MiNombre Macro
' Escribe mi nombre y el de la empresa y la fecha actual en formato largo
'
' Acceso directo: Ctrl+Mayús+M
'
  ' En la celda activa graba el nombre
  ActiveCell.FormulaR1C1 = "Luis"
  ' Selecciona la celda A2 (aunque la referencia se muestre como relativa,
  ' el posicionamiento es absoluto)
  Range("A2").Select
  ' Escribe en la celda que hemos activado el nombre de la empresa
  ActiveCell.FormulaR1C1 = "PeAM"
  ' Selecciona el rango A1:A2
  Range("A1:A2").Select
  ' Sobre el rango seleccionado modifica las características de la fuente: tipo, tamaño,
  ' color, negrita, cursiva, etc..
  With Selection.Font
    .Name = "Aharoni"
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontNone
    .Italic = True
    .Size = 18
    .ThemeColor = xlThemeColorAccent1
    .TintAndShade = 0
  End With
  ' Selecciona la celda A3
  Range("A3").Select
  ' Escribe la fórmula =HOY() en la celda activa
  ActiveCell.FormulaR1C1 = "=TODAY()"
  ' Vuelve a seleccionar la celda A3
  Range("A3").Select
  ' Ejecuta la orden de copiar
  Selection.Copy
  ' Ejecuta la orden de pegado especial, sólo valores
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  ' Finaliza el modo de trabajo de Copia/Pega
  Application.CutCopyMode = False
End Sub