Está en la página 1de 83

MACROS

EN EXCEL

Sub Macro1()
'Nombre de la macro
'Creado por:
'Comentario
'Acceso Directo:
Activecell.value=“Mi primera macro”
End Sub

Macros en Excel 1
QUÉ SON LAS MACROS?
Es un conjunto de instrucciones de código
(programado) que permiten realizar una tarea
determinada como así también expandir e incrementar
las prestaciones de Excel.

Las macros se escriben en lenguaje de programación


VBA (Visual Basic for Applications).

Con las macros podrás ahorrar mucho


tiempo y eliminar / automatizar trabajo Excel
manual

Programando una macro Excel, tareas que


llevaban horas o días de trabajo manual se
Pueden realizar en segundos.

Macros en Excel 2
COMO EMPEZAMOS?
Partes de la Ventana principal de Excel
Cinta de Opciones
Barra de Acceso rápido
Barra de Título

Herramienta de la nta de Opciones


Ci

Área de trabajo

Pestañas de Hojas
Barra de Estado

Macros en Excel 3
CINTA DE OPCIÓN “PROGRAMADOR”
Es posible que no veamos esta ficha, porque se encuentra oculta en forma predeterminada. Para
habilitarla en Excel 2010 - 2013 deberemos seguir los siguientes pasos.
Paso 1: Ir a menú Archivo.
Paso 2: Presionamos sobre el botón Opciones y se abre una ventana.
Paso 3: Hacemos clic sobre Personalizar cinta de opciones.
Paso 4: Ubicamos la sección denominada fichas principales, allí veremos los nombres de cada ficha
de la cinta de opciones y junto a ellos, Marcamos la casilla que corresponde a la ficha Desarrollador.
Paso 5: Presionamos Aceptar.

4
3

2
5
Macros en Excel 4
SEGURIDAD DE LAS MACROS
Para deshabilitar la Advertencia de seguridad seguimos los siguientes pasos.

1
Clic en
Seguridad de
Macros 3
2

5
4
6
Macros en Excel 5
QUE DEBEMOS CONOCER?
Cuando hablamos de macros hablamos de Objetos, Propiedades y
Métodos (OPM). Estos son los 3 conceptos generales más importantes que
debes conocer a la hora de programar las macros.
De momentos solo te daremos una sencilla definición y luego iremos
profundizando más en ellos.
Hay un ejemplo muy práctico para comprender lo que son los Objetos,
Propiedades y Métodos (OPM). Supongamos que tenemos una canasta
con frutas.

¿Cuales serían los OPM de la misma?

Objetos: Los objetos de la canasta de frutas serían las mismas frutas


(manzanas, naranjas, peras…).
Propiedades: Las propiedades serían las características de las frutas
(color, olor, sabor, textura…).
Métodos: Finalmente los métodos son las acciones que podríamos ejercer
sobre las frutas (comprarlas, venderlas, comerlas, almacenarlas, limpiarlas,
quitarles la piel,…).

Macros en Excel 6
OBJETOS, PROPIEDADES Y MÉTODOS
Objetos: prácticamente cada cosa que veas en Excel es un objeto. Ejemplos de
objetos son: un libro excel, una hoja, un rango, una celda, un menú, un gráfico, una
tabla dinámica, un cuadro de diálogo, las etiquetas de hojas, las columnas, las filas,
etc. En fin, cada partecita de Excel es un objeto. Un objeto es algo que puedes ver e
identificar con un nombre.

Propiedades: las propiedades son las características de los objetos. Por ejemplo,
para el objeto "celda" algunas de sus propiedades serían: alto, ancho, color, bloqueada
o desbloqueada, vacía, con un número o con una fórmula, etc. Por ejemplo para el
objeto "hoja" algunas de sus propiedades serían: visible u oculta, con o sin líneas de
división, con o sin barras de desplazamiento vertical y horizontal, etc.

Métodos: un método es una acción que podemos realizar sobre el objeto o una de
sus propiedades. Por ejemplo sobre el objeto "hoja" podemos: activar, mover, copiar o
borrar.

En definitiva, de eso se trata programar una macro: conocer el nombre del objeto,
conocer el nombre de alguna propiedad del mismo que quieras modificar y también
conocer el nombre de algún método que desees aplicarle.

Macros en Excel 7
EJEMPLOS DE OPM
Macros = VBA = OPM
El lenguaje VBA es muy fácil de entender y siempre gira en torno a seleccionar los
objetos, cambiar sus propiedades y/o ejecutarles distintos métodos.

Veamos un sencillo ejemplo de algunos objetos de Excel y su denominación en inglés,


el idioma utilizado por las macros:

Ejemplos de Objetos VBA Ejemplos de Propiedades VBA


(En español) (En español)
Cell (celda) Value (valor)
Range (rango) Color (color)
Worksheet (hoja) Format (formato)
Workbook (libro)

Ejemplos de Métodos VBA


(En español)
Copy (copiar)
Protect (proteger)
Delete (borrar)

Macros en Excel 8
EDITOR DE MACROS - VENTANA DE VBA
Nuestra forma preferida de acceder al editor de macros es con las teclas
ALT + F11
Barra de Menú
Barra de Herramientas

Ventana de
Proyectos o
Explorador de
proyectos

Ventana de Código

Ventana de
Propiedades

Ventana de Inmediato

Macros en Excel 9
EDITOR DEL VBA – EXPLORADOR DE PROYECTOS
Nivel 1: Proyectos
Por regla general, cada libro excel tiene asociado un proyecto.

Nivel 2: Carpetas
1. Microsoft Excel Objetos
1.ThisWorkbook: Hace referencia al Libro. Si escribimos una macro aquí la
misma afectará a todo el libro, tanto apertura y trabajo en el mismo.

2.Hoja1(Hoja1): Hace referencia las hojas de Excel (habrá 1 por cada hoja
de nuestro libro). Si escribimos una macro aquí la misma solo afectará a la hoja
en cuestión.

2. Formularios
1. UserForm1: Dentro de esta carpeta se diseñan los formularios interactivos
para el usuario llamado UserForm.

3. Módulos
1. Modulo1: Dentro de esta carpeta se escriben o graban las macros.
Podemos insertar tantos módulos como necesitemos. Estos módulos operan de
forma genérica, sin distinguir entre hojas o libros.
Macros en Excel 10
EDITOR DEL VBA – EXPLORADOR DE PROYECTOS
Haciendo doble clic izquierdo en cualquiera de estos
objetos verás que se habilita la Ventana de Código de la
izquierda (una hoja en blanco grande). En la misma es
donde se escriben las macros.

Recuerda! Antes de escribir una macro debes evaluar donde hacerlo.

1.Si es una macro que solo debe afectar una hoja en particular escríbela
en los objetos de Hoja, en el nombre de Hoja correspondiente.
2.Si la macro debe afectar a todo un libro en particular escríbela en el
objeto ThisWorkbook. Estas suelen ser macros que se ejecutan al abrir,
cerrar o guardar el libro.
3. Si la macro es de tipo genérica escríbela en un Módulo.
4. Si quieres hacer un formulario utiliza el objeto Userform.

Macros en Excel 11
EDITOR DEL VBA – VENTANA DE PROPIEDADES
Cada objeto tiene sus propiedades. Por ejemplo, si hacemos doble clic en el objeto
Módulo1 que vimos en la sección anterior, podremos ver sus propiedades:
Algunos objetos tienen muchas propiedades (por ej. los
Userforms) así que tenemos la opción de ordenar los
mismos de forma alfabética o por categoría. El objeto
Módulo1 solo tiene la propiedad (Name)Módulo1. Si
quisiéramos podríamos reemplazar el nombre de Módulo1
y asignar otro nombre a gusto.

Consejo! En la medida que


vamos insertando muchas
macros en nuestro
proyecto, conviene ir
creando nuevos módulos
con nombres apropiados
para mantener ordenadas
nuestras macros.
Macros en Excel 12
EJEMPLO DE PROPIEDADES DE HOJA

Propiedades de Hoja1
Item Valor Significado
(Name) Hoja1 Nombre de la Hoja1 del Excel

DisplayPageBreaks False Muestra el contorno de impresión de hojas

DisplayRightToleft False Muestras las columnas y filas desde el lado derecho.

EnableCalculation True Activa el calculo matemático automático en las celdas

EnableFormatConditionsCalculation True Activa el calculo lógico automático en las celdas

EnableSelection 0 No habilita las restricciones


-1 Desactiva las celdas bloqueadas
-1142 Desactiva todas las celdas
Name Hoja1 Nombre de la Hoja1 en VBA

Visible -1 Se muestra la Hoja de Excel


0 Se oculta temporalmente la Hoja de Excel
2 Se oculta permanentemente la Hoja.

Macros en Excel 13
EDITOR DEL VBA – VENTANA DE CÓDIGO
Lo que interesa es más bien el código que escribamos aquí. Puedes escribir todas
las macros que quieras en esta ventana. Recuerda que el mismo editor asignará
automáticamente los colores al código y además separará con una línea continua
cada macro.

En la medida que empecemos a escribir muchas macros, existe una forma rápida de
movernos entre ellas. Desde la lista desplegable de la parte superior derecha
podremos ver la lista de macros escritas. Haciendo clic en cualquiera de ellas el
editor nos posicionará rápidamente en la misma.

14

Macros en Excel 14
EDITOR DEL VBA – VENTANA DE INMEDIATO
La ventana inmediato sirve para escribir, ejecutar y probar un código macro
rápidamente, sin tener que armar toda la macro con la estructura que comentamos
en secciones anteriores.

Por ejemplo, si quisiéramos averiguar la cantidad de hojas que tiene un Libro


podríamos escribir la siguiente macro en un módulo y ejecutarla presionando desde
el teclado la tecla F5:
Sub ContarHojas()
Dim N As Long
N=
thisworkbook.Sheets.Count
Msgbox N
End Sub

Entonces, en la ventana inmediato podemos escribir:


?thisworkbook.Sheets.Count y al presionar Enter en la fila siguiente nos mostrará
el número de hojas que posee el libro. El signo ? al comienzo significa que estamos
buscando conocer el resultado de algo. El resultado final se vería así, suponiendo que
el libro tiene 3 hojas:

15

Macros en Excel 15
CREAR Y/O GRABAR UNA MACRO

A la hora de crear una nueva macro existen 3 métodos.

• Escribirla manualmente
• Utilizar la grabadora de macros
• Combinación de los 2 métodos anteriores (grabarla y luego retocarla
manualmente)

En cada situación utilizarás un método distinto. Por ejemplo, las macros muy
sencillas las puedes escribir manualmente porque tienen pocas líneas y ya
las conoces.

En otros casos la podrás crear con la grabadora de macros y olvidarte del


código VBA.

Sin embargo, en la medida que progreses con las macros verás que el
método más utilizado suele ser el número 3 mediante el cual primero
grabarás y luego harás ajustes manuales en el código para hacerlo más
eficiente y que se ejecute más rápido.

Macros en Excel 16
EJEMPLOS DE MACROS
Crea un nuevo libro Excel y guárdalo con el nombre Libro1.
2. Accede al Editor de visual basic con las teclas ALT+F11
3. Inserta un nuevo Módulo desde el menú Insertar > Módulo
4. Dentro del módulo escribe textualmente el siguiente código:

Sub MostrarTexto()
' Esta macro muestra un texto en una ventana emergente
Msgbox “Bienvenido"
End Sub
Esta macro utiliza la instrucción Msgbox que sirve para abrir una ventana con la
información que le indiquemos.

Sub OcultarLineas()
' Esta macro oculta las líneas de división de las celdas
ActiveWindow.DisplayGridlines = False
End Sub

Esta macro utiliza el objeto ActiveWindow (ventana activa).


Luego le asigna la propiedad DisplayGridlines=False (mostrar líneas de
división=falso)
Macros en Excel 17
EJECUCIÓN DE MACROS
Desde el Código: La forma más rápida de ejecutar una macro es desde el mismo código.
Cuando terminas de escribir una macro puedes posicionarte en cualquiera de sus líneas de
código y presionar la tecla F5. Recuerda que puedes acceder al código de las macros
desde el editor de macros, con las teclas ALT+F11.

Desde el Menu: Otra forma de ejecutar una macro es desde el menú de macros, que lo
puedes visualizar presionando ALT+F8
Verás que se abre un cuadro como el siguiente:

Para ejecutar la macro:


1. Elige el Nombre de la macro de la lista
2. Clic en Ejecutar

Desde el Teclado: Otra forma muy práctica de ejecutar una macro es desde el teclado.
Esto también se conoce como teclas de método abreviado. Para configurar las teclas con
las cuales ejecutar debes hacer los siguiente:

1. Ir al menú de macros presionando ALT+F8


2. Elegir el nombre de la macro de la lista y luego hacer clic en el botón Opciones.

Macros en Excel 18
Donde dice Tecla de método abreviado presiona la
tecla MAYUSC y luego una letra. En nuestro ejemplo
la macro se ejecutará con Ctrl+Mayúsc+Q
Donde dice Tecla de
método abreviado
presiona la tecla
MAYUSC y luego una
letra. En nuestro
ejemplo la macro se
ejecutará con
Ctrl+Mayúsc+Q

Desde Objetos
Haz clic izquierdo en la
figura para desplegar su
menú de opciones.
Elige la opción Asignar
macro
19

Macros en Excel 19
MACROS CON EVENTOS EN LIBROS
Los eventos de libros permiten disparar automáticamente una macro cuando suceden determinadas
acciones a nivel del libro excel en cuestión, por ejemplo al abrirlo, guardarlo, cerrarlo, imprimirlo,
etc.
Instrucciones para insertar una macro de evento a nivel libro:
1. Las macros de eventos se deben escribir en la carpeta ThisWorkbook del editor de macros.
2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Workbook.

3.Finalmente, en la lista desplegable de la derecha veremos todos los eventos de libro que
podemos utilizar para disparar nuestra macro.
4.Si haces clic en la opción Activate, verás
que en la ventana de macros se escribe
automáticamente el siguiente código:
Private Sub Workbook_Activate()
End Sub
Luego podrás escribir tu código macro entre esas líneas. En
este caso, la macro que escribas se ejecutará cada vez que
actives el libro excel en cuestión. Por ejemplo, puedes hacer
una macro que muestre un mensaje de saludo cada vez
que abres el libro:
Entonces, cada vez que abras el libro, la macro se ejecutará automáticamente y verás el saludo:

Macros en Excel 20
En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa
que esa macro no la podrás ver en la lista del menú de macros. Esto es así porque la
macro no se puede ejecutar manualmente, si no que se ejecuta automáticamente cuando
ocurre el evento, en este caso cuando se activa el libro excel en cuestión.

Existen más de 20 macros de evento a nivel libro. Puedes insertarlas siguiendo las
instrucciones dadas al comienzo. Las más importantes son:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' El código que escribas aquí se ejecutará automáticamente al cerrar el libro
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' El código que escribas aquí se ejecutará automáticamente al imprimir el libro
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


' El código que escribas aquí se ejecutará automáticamente al guardar el libro
End Sub

Private Sub Workbook_Open()


'El código que escribas aquí se ejecutará automáticamente al abrir el libro
End Sub

Macros en Excel 21
MACROS CON EVENTOS EN HOJAS
Los eventos de hojas permiten disparar automáticamente una macro cuando suceden determinadas
acciones a nivel de hojas excel, por ejemplo al activarla, desactivarla, calcularla, etc.
Instrucciones para insertar una macro de evento a nivel hoja:
1.En nuestro caso tenemos Hoja1(Hoja1). Al hacer doble clic en dicha carpeta, la macro que
escribamos solo afectará a dicha hoja.
2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Worksheet.

3.Finalmente, en la lista desplegable de la derecha veremos todos los eventos de hoja que
podemos utilizar para disparar nuestra macro automáticamente.
4.Si haces clic en la opción Activate,
verás que en la ventana de macros se
escribe el siguiente código:
Private Sub Worksheet_Activate()
End Sub
Luego podrás escribir tu código macro entre esas líneas. En este caso, la macro que escribas se
ejecutará cada vez que actives la hoja excel en cuestión. Por ejemplo, puedes hacer una macro que
muestre un mensaje de saludo cada vez que activas la hoja:

Entonces, cada vez que actives la hoja, la macro se ejecutará


automáticamente y verás el saludo: 2

Macros en Excel 22
En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa
macro no la podrás ver en la lista del menú de macros. Esto es así porque la macro no se puede
ejecutar manualmente, si no que se ejecuta automáticamente cuando ocurre el evento, en este caso
cuando se activa la hoja excel en cuestión.
Existen unas 9 macros de evento a nivel hoja. Puedes insertarlas siguiendo las instrucciones dadas
al comienzo. Las más importantes son:
Private Sub Worksheet_Activate()
'El código que escribas aquí se ejecutará automáticamente al activar la hoja
End Sub
Private Sub Worksheet_Calculate()
' El código que escribas aquí se ejecutará automáticamente al calcular la hoja
End Sub
Private Sub Worksheet_Deactivate()
'El código que escribas aquí se ejecutará automáticamente al desactivar la hoja
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' El código que escribas aquí se ejecutará automáticamente al moverte entre las celdas de la hoja (cada vez
que seleccionas y te posicionas en una nueva celda)
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' El código que escribas aquí se ejecutará automáticamente al producirse un cambio en la hoja (por ejemplo al
introducir un dato en una celda, seleccionar una opción de una lista desplegable, etc.)
End Sub

Macros en Excel 23
FORMULARIOS
Un Formulario (o su denominación en inglés Userform) se utiliza para crear un Cuadro de
Diálogo donde el usuario puede introducir información, o realizar otras operaciones. Al
ejecutar muchas de las opciones del menú de Excel se abren formularios. Por ejemplo,
desde el menú Herramientas > Opciones se abre un formulario como el siguiente, desde
donde se pueden activar o desactivar distintas opciones de Excel.

Los Userforms se utilizan mucho para crear


aplicaciones Excel que luzcan de forma
profesional y permitan al usuario introducir
datos o elegir opciones de una forma
guiada y más intuitiva.

Macros en Excel 24
1. Abrir el editor de macros (por ejemplo, con CTRL+F11).
2. Insertar un objeto Userform. Esto podemos hacerlo fácilmente:
1.Seleccionamos el Libro Excel donde trabajaremos, en nuestro caso VBAProject (Libro2).
2. Hacemos clic derecho en el mismo y elegimos la opción Insertar > Userform
3.Como se ve en la fotografía, veremos que aparece un objeto Userform1 que cuelga de la
carpeta Formularios

La idea es que mediante estos controles podremos tanto capturar como enviar información o datos
desde o hacia las celdas de Excel respectivamente. También podemos asociar macros a los
controles que agreguemos al Userform (todo esto lo veremos en secciones siguientes).

Si te posicionas sobre los Controles del Cuadro de herramientas, verás que aparece su nombre.
Simplemente hacemos clic izquierdo en el control deseado y luego clic izquierdo en el Userform, en
el sitio donde queramos agregar el control. En nuestro caso hemos agregado algunos controles de
forma desordenada dentro del Userform.
Macros en Excel 25
CONTROLES DEL FORMULARIO
Ahora explicaremos brevemente la utilidad de cada
control. Los controles se explican en el mismo orden que
aparecen en el Cuadro de Herramientas y en la figura
anterior (de izquierda a derecha y de arriba hacia
abajo).

26

Macros en Excel 26
Macros en Excel 27
Haciendo doble clic en cada control se abrirá una venta donde podremos escribir y asociarle una
macro. En la sección siguiente veremos un ejemplo simple sobre como crear un Userform paso a paso.

Macros en Excel 28
EJEMPLO DE UN FORMULARIO
Objetivo
Crear un Userform para que un usuario complete unos datos personales (Nombre,
Edad y Fecha de Nacimiento). Luego que el usuario complete sus datos, al apretar un
botón, los mismos se volcarán en una tabla de Excel.

Los controles que utilizaremos son:


Textbox: para que el usuario ingrese los datos
Label: para darle el nombre e los Textbox
CommandButton: para proceder con el ingreso de datos o cancelar

1. Creamos la tabla en la hoja Excel

2. Creamos un Userform (UF) DatosUF.Show


Los UF se crean desde el editor de visual basic. Abrimos el editor con ALT+F11
Desde el menú superior elegimos Insertar > Userform
Macros en Excel 29
3. Nombramos el Userform

4. Agregamos un Cuadro de Texto

5. Agregamos un Texto

Macros en Excel 30
6. Agregamos los Cuadros de Texto restantes

Agregamos los cuadros de texto y las etiquetas restantes (ya lo hicimos para el nombre así que
repetimos para Edad y Fecha de Nacimiento).

Repetimos los pasos 4 y 5 y agregamos:

* Un TextBox cuyo (Name) sea UFEdad, con una Etiqueta llamada "Edad"
* Un TextBox cuyo (Name) sea UFFecha, con una Etiqueta llamada "Fecha Nac."

Es muy importante que no olvides asignar bien los nombres (Name) a los Textbox, si no la macro
dará error. Puedes revisar los pasos 4 y 5 para recordar como hacerlo.

Si los textbox no quedan alineados se pueden alinear de la siguiente forma:

1.Clic en el primer TextBox


2. Mantieniendo pulsada la tecla MAYUS, selecciona los otros
TextBox
3. Vamos al menú Formato > Alinear > Izquierda
4.Hacemos clic en alguna parte vacía del Userform para
seleccionarlo y mostrar el cuadro de herramientas.
31

Macros en Excel 31
7. Agregamos los Botones
Para permitir que el usuario ejecute una acción, se pueden agregar un Botón de comando.
Nuestro Userform tendrá un botón para Agregar los datos a la tabla Excel y otro botón para
Cerrar el Userform.

1.En el Cuadro de Herramientas hacemos clic en Botón de comando.


2. En el Userform hacemos clic en la parte inferior izquierda para agregar el botón.
3.Con el nuevo botón seleccionado hacemos doble clic en la propiedad (Nombre) de la
Ventana de Propiedades, tipeamos UFAgregar y luego enter.
4. Con el nuevo botón seleccionado hacemos doble clic en su propiedad Caption en la Ventana
de Propiedades, tipeamos Agregar y luego enter.
5.Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el Cuadro de
Herramientas.
6.Repetimos los pasos anteriores para agregar otro Botón de comando llamado UFCerrar y
nombre "Cerrar".
7.8 Si fuese necesario podemos reubicar los botones dentro del Userform.

Es muy importante que no olvides asignar bien los nombres (Name) a los Botones de comando, si
no la macro dará error. Esto se explica en el paso 7.3 y luego deberás repetirlo para el otro
botón, tal cual se indica en el paso 7.6.

Macros en Excel 32
8. Agregamos el código al botón Agregar
Private Sub UFAgregar_Click()
Dim iFila As Long
Dim ws As Worksheet
Set ws = Worksheets(1)

'encuenta la siguiente fila vacía


iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

'Verifica que se ingrese un nombre


If Trim(Me.UFNombre.Value) = "" Then Seleccionamos nuestro botón de comando
Me.UFNombre.SetFocus Agregar y hacemos doble clic
MsgBox "Debe ingresar un nombre"
Exit Sub 9. Agregamos el código al botón Cerrar
End If
Private Sub UFCerrar_Click()
'copia los datos a la base de datos Unload Me
ws.Cells(iFila, 1).Value = Me.UFNombre.Value
ws.Cells(iFila, 2).Value = Me.UFEdad.Value
End Sub
ws.Cells(iFila, 3).Value = Me.UFFecha.Value 10.Permitir al usuario cerrar el Userform con
'limpa el formulario la tecla ESC
Me.UFNombre.Value = ""
Me.UFEdad.Value = "" 1. Seleccionamos el botón de comando Cerrar
Me.UFFecha.Value = "" 2. En la Ventana Propiedades cambiamos la
Me.UFNombre.SetFocus propiedad Cancel a True.
End Sub
Macros en Excel 33
MACROS VARIOS
Macros privadas
Si deseas ocultar las macros del libro en dicho cuadro puedes hacerlo utilizando la instrucción Private
cuando escribas tu macro. Debes utilizar dicha instrucción delante de la palabra Sub. De este modo
solo ocultarás la macro en cuestión. Ejemplo:
Private Sub MiMacro()
'Esta macro no aparecerá en la lista de macros
'Código de tu macro aquí
End Sub
Si tienes muchas macros en el módulo y quieres ocultarlas todas, en lugar de escribir la palabra
Private en cada una de ellas, puedes colocar la siguiente instrucción al comienzo de tu módulo:

Option Private Module

Utilizar la instrucción With


Sub CambiarFormatoRango()
Cuando tenemos que definir muchas propiedades de un único
With Range("A1")
objeto, no es necesario hacer mención al objeto cada vez,
.Value = 10
porque esto le quita velocidad de ejecución a la macro. Para
.Font.Bold = True
ganar velocidad y mantener el código más simple, conviene
.Interior.ColorIndex = 5
hacer mención al objeto una única con la instrucción With y
End With
luego definir sus propiedades, por ejemplo:
End Sub
Macros en Excel 34
INSERTAR FÓRMULAS RELATIVAS
Insertar fórmulas relativas
Si queremos insertar fórmulas en celdas mediante macros, existe una forma más rápido de
hacerlo que con Copiar y pegar. Por ejemplo:
Sub CopiarFormula()
Range("A1:A10").FormulaR1C1 = "=SUM(RC[1]:RC[5])"
End Sub

Evitar el uso de Copiar, Pegar y Seleccionar

Cuando se utiliza la grabadora de macros, es común que se genere más código del necesario y
esto hace que funcione un poco más lento. Las intrucciones que suelen ser redundantes son Select,
Selection.Copy y Paste. Supongamos que queremos copiar un rango en otro rango. Si utilizamos la
grabadora el código será el siguiente:
Sub CopiaRango()
Range("C10:C12").Select Sub CopiaRango()
Selection.Copy Range("C10:C12").Copy Range("E10")
Range("E10").Select End Sub
ActiveSheet.Paste
End Sub

Macros en Excel 35
MACROS
Variables: Qué son las variables
y cómo se utilizan.
Libros: Macros para manipular
libros.
Hojas: Macros para manipular
hojas.
Rangos: Macros para manipular
rangos.
Estructuras: Las estructuras
y macros más comunes.
Comandos: Diversos comandos útiles muy utilizados.

Macros en Excel 36
VARIABLES
Para definir una variable utilizamos una sintaxis del tipo:

Dim NombreVariable As TipodeDato

Dim: Indica que estamos creando una variable


NombreVariable: Escribimos el nombre de nuestra variable a gusto (sin espacios)
As: Necesario para definir el tipo de variable
TipodeDato: Debemos indicar si es una variable texto, fecha, valor, etc
Veamos un ejemplo sencillo:

Sub MiNombre ()
'Indicamos que 'Nombre' es una variable 'String' o sea de tipo (texto)
Dim Nombre As String
'Le asignamos un valor a la variable (también podríamos indicarle una celda Excel)
Nombre = "Pedro"
' Mostramos el valor de la variable en un mensaje
Msgbox Nombre
End Sub
La idea es que Excel recordará que la variable "Nombre" tiene asignado el valor
"Pedro". Podremos utilizar dicha variable más adelante en nuestro código.

Macros en Excel 37
Variables
Definición
Una variable es un lugar de almacenamiento con nombre que puede contener cierto tipo de datos
que puede ser modificado durante la ejecución del programa. Cada variable tiene un nombre
único que la identifica dentro de su nivel de ámbito. Puede especificar un tipo de datos o no. Los
nombres de variable deben comenzar con un carácter alfabético, deben ser únicos dentro del
mismo ámbito, no deben contener más de 255 caracteres y no pueden contener un punto o
carácter de declaración de tipo.

Podemos declarar todo tipo evariables, por ello conviene también adquirir la costumbre de hacer
que el propio nombre de nuestras variable resulte descriptivo de la función que cumplirá, por
ejemplo:

Sub Macro()
'Definimos una variable numérica TipoCambio, que es el factor de conversión entre el
euro y la libra
Dim TipoCambio As Double ' Variable definida como valor con 2 decimales
TipoCambio = 1.45
' Esta macro multiplica el valor de la celda activa por el valor de la variable
anterior ActiveCell.Value = TipoCambio * ActiveCell.Value
End Sub

Macros en Excel 38
Variables
Declaración
Para que siempre nos veamos en la obligación de declarar todas las variables que podamos ir
utilizando en nuestros módulos (es decir obligarnos a definir nuestras variables de entrada).

Esto lo podemos realizar desde el editor de VBA, a traves del menú Herramientas > Opciones >
pestaña Editor > y seleccionar la casilla Requerir declaración de variables
Se usa en el nivel de módulo para forzar declaraciones
explícitas de todas las variables en dicho módulo, debe
aparecer en un módulo antes de cualquier procedimiento.
Cuando Option Explicit aparece en un módulo, debemos
declarar explícitamente todas las variables mediante las
Sub MacroMensaje() instrucciones Dim, Private, Public, ReDim o Static.
' Declaramos la variable saludo como variable tipo texto
Dim saludo As String
Dim despedida As String Variante (Variable no declarada)
'Damos un valor a la variable declarada
saludo = "Hola que tal"
'Damos un valor a la variable declarada Si se intenta utilizar una
despedida = "Adios" variable no declarada se
MsgBox saludo obtiene un error en el tiempo
MsgBox despedida
End Sub
de compilación
Macros en Excel 39
Variables
Tipos de Datos
Tipo de datos Tamaño Intervalo
Byte byte 0 a 255
Boolean bytes True o False
Integer bytes -32,768 a 32,767
Long (entero largo) bytes -2,147,483,648 a 2,147,483,647
Single (coma flotante/ bytes -3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a
precisión simple) 3,402823E38 para valores positivos
Double (coma bytes -1.79769313486231E308 a -4,94065645841247E-324 para valores negativos;
flotante/ precisión 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos
doble)
Currency (entero a bytes -922.337.203.685.477,5808 a 922.337.203.685.477,5807
escala)
Decimal bytes +/-79.228.162.514.264.337.593.543.950.335 sin punto decimal; +/-
7,9228162514264337593543950335 con 28 posiciones a la derecha del signo
decimal; el número más pequeño distinto de cero es +/-
0,0000000000000000000000000001
Date bytes 1 de enero de 100 a 31 de diciembre de 9999
Object bytes Referencia a tipo Object
String (longitud bytes + longitud de la 0 a 2.000 millones
variable) cadena
String (longitud fija) longitud de la cadena 1 a 65.400 aproximadamente

Variant (con números) bytes valor numérico hasta el intervalo de un tipo Double
Variant (con bytes + longitud de la mismo intervalo que para un tipo String de longitud variable
caracteres) cadena
Definido por el número requerido por los intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.
usuario (utilizando elementos
Type)

La macro anterior utiliza bastantes menos recursos que esta Sub Macro()
For X = 1 To 25
próxima que no fuerza la declaración de la variable X (y Cells(X, 1) = X
por lo tanto es considerada como Variant): Next X
Macros en Excel
End Sub 40
Variables
Locales
Las variables locales se declaran dentro de cada macro, y solo pueden ser utilizadas dentro de la
macro en la que han sido creadas, cuando la macro termina de ejecutarse, la variable desaparece
y Excel libera la memoria que estaba utilizando recordando a qué hacían referencia.

Una variable se declara como local cuando está declarada dentro de la macro que hará uso de la
misma, por ej:
Si una variable es local todas el resto de las macros
podrán utilizar el mismo nombre de la variable tal
Sub Macro() que:
Dim X As Single
Dim Y As Single Option Explicit Option Explicit
Dim Z As Single
X=5 Sub Macro1() Sub Macro2()
Y = 10 Dim Autor As String Dim Autor As String
Z = 50 Autor = "EXCEL" Autor = "Pedro"
ActiveCell = X * Y * Z ActiveCell = Autor ActiveCell = Autor
MsgBox TypeName(Resultado) End Sub End Sub
End Sub

Macros en Excel 41
Variables
Públicas
Las variables declaradas mediante la instrucción Public están disponibles para todos los
procedimientos en todos los módulos de todas las aplicaciones, a menos que Option Private Module
esté en efecto; en este caso, las variables sólo son públicas dentro del proyecto en el que residen.

Este tipo de variables son útiles cuando empezamos a trabajar con macros pues facilitan la
comprensión, y nos ahorran el hecho de tener que declarar lo mismo una y otra vez.

Usamos la instrucción Public para declarar el tipo Option Explicit


de datos de una variable. Por ejemplo, la
instrucción siguiente declara una variable como Public X As Byte
de tipo Integer:
Sub Macro() Sub Macro2()
Public NúmeroDeEmpleados As Integer For X = 1 To 25 Cells(X, 1) = X
Call Macro2 End Sub
Usamos también la instrucción Public para Next X
declarar el tipo de objeto de una variable. End Sub

Macros en Excel 42
Variables
Estáticas
Las variables declaradas con la instrucción Static conservan su valor mientras el código se está
ejecutando.
Una vez que el código del módulo se está ejecutando, las variables declaradas con la instrucción
Static conservan su valor hasta que se reinicie o restablezca el módulo. En los módulos de clase,
las variables declaradas con la instrucción Static conservan su valor en cada instancia de clase
hasta que se destruye la instancia. En módulos de formulario, las variables estáticas conservan su
valor hasta que se cierra el formulario. Use la instrucción Static en procedimientos no estáticos
para declarar explícitamente variables que son visibles sólo dentro de un procedimiento, pero
cuya vida es la misma que la del módulo en la que se definió el procedimiento.

Option Explicit

Public Rg As Range Sub Macro2()


Sub Macro1() Static x As Byte
Dim x As Byte x=x+5
For x = 1 To 25 Rg.Select
Set Rg = Cells(x, 1) Rg = x
Call Macro2 End Sub
Next x
End Sub

Macros en Excel 43
Variables
Constantes Sub Macro()
Por lo general las variables hacen referencia a valores que Dim Rng As Range
acostumbran a cambiar tal que, por ej: Dim x As Byte
For x = 1 To 25
Pero a veces queremos que una variable no cambie, es decir que Set Rng = Cells(x, 1)
siempre haga referencia al mismo valor, ejemplo: mi nombre, la Rng.Select
capital de Francia etc. Lógicamente carece de sentido declarar Rng = x
variables como constante si éstas no son públicas. Next x
Para declarar una variable como constante utilizamos la instrucción End Sub
Const, por ej:

Option Explicit
Const nPaises As Byte = 53
Const UKrate = 1.43, USrate = 0.78
Const autorLibro As String = "TodoEXCEL"

En la 1º línea hemos definido una variable como nPaises as byte y su valor sera siempre 53.
La 2º línea de código declara dos variables como constantes pero no especifica si son as double
o as, con lo cual se consideraran as variant.
La 3º linea de código declara autorLibro como una constante de tipo string y le da el valor
TodoEXCEL

Macros en Excel 44
Variables
Conversión
Es posible convertir variables de un tipo a otro. Existen distintas funciones que permiten hacer estas
conversiones.
Función Tipo devuelto Intervalo del argumento expresión
CBool Boolean expresión de cadena o numérica válida.
CByte Byte 0 a 255
CCur Currency .337.203.685.477,5808 a 922.337.203.685.477,5807.
CDate Date expresión de fecha
CDbl Double .79769313486231E308 a -4,94065645841247E-324 para valores
negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores
positivos.
Cdec +/-79.228.162.514.264.337.593.543.950.335 para números basados en
cero, es decir, números sin decimales. Para números con 28 decimales, el intervalo es
+/-7,9228162514264337593543950335. La menor posición para un número
que no sea cero es 0,0000000000000000000000000001.
Cint .768 a 32.767; las fracciones se redondean.
Clong .147.483.648 a 2.147.483.647; las fracciones se redondean.
CSng ,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a
3,402823E38 para valores positivos.
Cstr mismo intervalo que Double para valores numéricos. El mismo intervalo que
String para valores no numéricos.
CVar valor de retorno de CStr depende del argumento expresión.
Si la expresión del argumento expresión que se pasa a la función está fuera del intervalo del
tipo de dato al que se va a convertir, se produce un error. En general, el código se puede
documentar utilizando las funciones de conversión de tipos de datos para indicar que el
resultado de alguna de las operaciones se debería expresar como un tipo de datos en
particular, no como el tipo de datos predeterminado.
Macros en Excel 45
Variables
Conversión
Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al número par
más cercano. Por ejemplo, 0,5 redondea a 0, y 1,5 redondea a 2. CInt y CLng se diferencian de
las funciones Fix e Int en que truncan, en lugar de redondear, la parte fraccionaria de un número.
Además, Fix e Int siempre devuelven un valor del mismo tipo del que se le pasa.
Utilizamos la función IsDate para determinar si se puede convertir date a una fecha o una hora.
Si tubiéramos una cadena de texto tal que:
Sub EjCdate() CDate reconoce literales de fecha y literales de
Dim QAZ As String
hora además de números comprendidos dentro
QAZ = "5/5/2008"
If IsDate(QAZ) Then del intervalo de fechas aceptables. Al convertir
QAZ = CDate(QAZ) un número a una fecha, la parte numérica entera
MsgBox QAZ & " SI es una Fecha se convierte a una fecha. Cualquier parte
." fraccionaria del número se convierte a la hora
Else del día, comenzando a medianoche.
MsgBox QAZ & " no es una Fecha"
End If
End Sub
CDate reconoce formatos de fecha que se ajusten a la configuración regional de tu sistema. Es
posible que no se determine el orden correcto del día, mes y año si se proporciona en un formato
diferente del que reconoce la configuración de fecha. Además, no se puede reconocer un formato
de fecha largo si contiene la cadena del día de la semana.

Macros en Excel 46
LIBROS
Mediante macros VBA podemos manipular de distintas formas tanto libros Excel como
archivos con otras extensiones. En este capítulo veremos como hacerlo.

Abrir Libros
Para abrir un libro excel utilizamos la instrucción Open. Si queremos abrir un libro
determinado podemos utilizar la siguiente macro:

Sub AbrirLibro()
Dim Nombre As String
Nombre = "C:\MiLibro.xls"
' Si no se encuentra el libro hacemos que salga un mensaje de aviso
If Dir(Nombre) = "" Then
MsgBox Nombre & " no se encuentra"
Else
Workbooks.Open FileName:=Nombre, updateLinks:=False
End If
End Sub

Macros en Excel 47
Libros
Cerrar Libros
Para cerrar un libro utilizamos la instrucción Close: Sub Cerrar()
ActiveWorkbook.Close
End Sub
Si quisiéramos cerrar Excel:
Sub CierraExcel()
Application.Quit
End Sub
Guardar Libros
Para guardar un libro utilizamos la instrucción SaveAs. Si queremos guardarlo con un
nombre que figura en una celda (por ej. si en la celda A1 está el nombre "QAZ"):
Sub Macro()
On Error Resume Next
' Ponemos On Error Resume Next, para evitar el error derivado de una celda vacía
y/o con un caracter con el que excel no permite guardar un libro
ActiveWorkbook.SaveAs [A1].Value
' También podríamos poner
' ActiveWorkbook.SaveAs Filename:=Range('A1').Value

End Sub
Macros en Excel 48
Libros
Borrar Libros
Para borrar un libro utilizamos la instrucción Delete:
Sub BorraLibro ()
Workbooks("C:\TuLibro.xls").Delete
End Sub

Conviene recordar que excel nos pedirá confirmación antes de borrarlo.


Crear Libros
Para crear 1 nuevo libro utilizamos la instrucción Add, por ejemplo:
Sub NuevoLibro()
Workbooks.Add
End Sub
Si quisiéramos crear 2 nuevos libros:

Sub NuevoLibro()
Workbooks.Add
Workbooks.Add
End Sub
Macros en Excel 49
Libros
Imprimir Libros
Para imprimir libros u hojas utilizamos la instrucción PrintOut, por ejemplo:
Sub Imprimir ()
' Imprime el libro activo
ActiveWorkbook.Printout
End Sub
Si queremos imprimir un libro y hoja determinada:

Sub Imprimir ()
' Imprime el libro y hoja indicados
Workbooks("MiLibro.Xls").Sheets("Hoja1").Printout
End Sub

Si queremos imprimir un rango determinado, por ejemplo A4:H100

Sub ImprimirRango ()
' Imprime el rango indicado
Sheets("Hoja1").PageSetup.PrintArea = "$A$4:$H$100"
Workbooks("MiLibro.Xls").Sheets("Hoja1").Printout
End Sub
Macros en Excel 50
Libros
Proteger/Desproteger Libros
La protección de libros se hace con las instrucciones Protect y Unprotect, por ejemplo:
Sub ProtegeLibro()
With ActiveWorkbook
' Primero protegemos esctuctura (mover, copiar, insertar hojas) y ventana (cambiar tamaño o mover ven
tana)
.Protect Structure:=True, Windows:=True
' Desprotegemos con clave 'Excel'
.Unprotect ("Excel")
' Protegemos con clave 'Excel'
.Protect ("Excel")
End With
End Sub

Para proteger un libro primero se debe desproteger con Unprotect y luego protegemos
con Protect. La clave se pone entre comillas y paréntesis y es sensible a las mayúsculas (si
protejo con "Excel" la clave "excel" no funcionará).

Para desproteger el libro hacemos:

Sub DesprotegeLibro ()
ActiveWorkbook.Unprotect ("Excel")
End Sub
Macros en Excel 51
HOJAS
Agregar
Para agregar una nueva hoja al libro utilizamos la instrucción Add. Si queremos agregar
una nueva hora al libro activo utilizamos el siguiente código:
Para agregar una nueva hoja al libro utilizamos la instrucción Add. Si queremos agregar
una nueva hora al libro activo utilizamos el siguiente código:

Sub AgregarHoja()
ActiveWorkbook.Worksheets.Add
End Sub

Otra forma de hacerlo es:

Sub AgregarHoja()
Dim Hoja As Worksheet
Set Hoja = Worksheets.Add
End Sub

Macros en Excel 52
Hojas
Seleccionar
Para referirnos a una hoja dentro de un podemos utilizar la instrucción Select o Activate.
Seleccionar una hoja utilizando su número de hoja contenida dentro del libro, como se ve
a continuación:

Sub Seleccionar()
' para seleccionar la primera hoja del libro activo
ActiveWorkbook.Sheets(1).Select
' para seleccionar la segunda hoja del libro activo
ActiveWorkbook.Sheets(2).Select
' para seleccionar y /o activar la hoja con nombre “Hoja3” del libro activo
ActiveWorkbook.Sheets(“Hoja3”).Activate
End Sub

Utilizando el nombre de la hoja en VBA Hoja1(PrimeraHoja) contenida dentro del libro,


como se ve a continuación:

Sub Seleccionar()
' para seleccionar la segunda hoja del libro activo
Hoja1.Activate ' también podría ser Hoja1.Select
End Sub
Macros en Excel 53
Hojas
Borrar Hojas
Cuando se elimina una hoja o un libro, excel siempre nos pide confirmación, del mismo
modo que cuando eliminamos cualquier otro fichero.

En este ejemplo se elimina la hoja llamada "Hoja1" en caso de que


confirmemos la opción que observaremos cuando se ejecute el código:

Sub BorrarHoja()
Sheets("Hoja1").Delete
End Sub

En este otro ejemplo se elimina la hoja1 del libro activo sin mostrar el cuadro
de diálogo de confirmación:

Sub borrarHoja()
Application.DisplayAlerts = False
Sheets("Hoja1").Delete
Application.DisplayAlerts = True
End Sub

Macros en Excel 54
Hojas
Imprimir Hojas
Para imprimir la hoja actual hacemos la instrucción PrintOut, tal que:
Sub ImprimeHoja ()
ActiveSheet.PrintOut
End Sub
Si además deseamos fijar previamente un rango de impresión hacemos:
Sub ImprimeRango ()
ActiveSheet.PageSetup.PrintArea = Range("$A$1:$C$10").Address
ActiveSheet.PrintOut
End Sub
En la macro anterior, cuando queremos imprimir un rango, es necesario agregar la instrucción
Address, caso contrario no funcionará.

Si deseamos poner un encabezado a la izquierda de cada hoja, con la frase "Reporte Trimestral" (o
cualquier otro mensaje):
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Sht As Worksheet
For Each Sht In ThisWorkbook.Sheets
With Sht.PageSetup
.LeftHeader = "Reporte Trimestral" ' O cualquier otro mensaje...
End With
Next Sht
End Sub
Macros en Excel 55
RANGOS
Selección de celdas
Existen diversas formas de seleccionar celdas, y en todas ellas utilizamos el método
Select.
Veamos 3 métodos (equivalentes) para seleccionar una celda, por ejemplo la celda C4:

' La forma clásica de seleccionar


Sub Seleccionar ()
Range("C4").Select
End Sub

' Esta es otra terminología válida para seleccionar


Sub Seleccionar ()
[C4].Select
End Sub

' Finalmente podemos seleccionar de esta otra forma


' El primer Nº equivale a fila y el segundo a columna.
Sub Seleccionar ()
Cells(4, 3).Select
End Sub
Macros en Excel 56
Rangos
Selección de rangos
Veamos ahora distintas formas equivalentes de seleccionar un rango:
' Método clásico para seleccionar el rango de celdas B6:B10
Sub Seleccionar ()
Range("B6:B10").Select
End Sub

Sub Seleccionar ()
'Otro método para seleccionar el rango de celdas B6:B10
[B6:B10].Select
End Sub
Supongamos que queremos seleccionar un rango, pero no conocemos su dimensión,
por ejemplo porque la misma va cambiando. Un ejemplo puede ser una tabla donde se
van agregando nuevos registros. Con la instrucción CurrentRegion Excel seleccionará
todo el rango utilizado automáticamente, aunque no conozcamos su tamaño de
antemano:

' Selecciona la región actual


Sub Seleccionar ()
Selection.CurrentRegion.Select
End Sub Macros en Excel 57
Rangos
Con la macro anterior se seleciona el cuadrante, rectángulo y/o cuadrado de celdas
adyacentes a nuestra celda activa. El rectángulo queda definido por las celdas con
información.

También podríamos modificar la macro anterior para que seleccione la región actual
desde una celda determinada, por ejemplo:

' Selecciona el rectángulo adyacente a C2.


Sub Seleccionar ()
[C2].CurrentRegion.Select
End Sub

o también podemos hacer:

' Selecciona el rectángulo adyacente a C2.


Sub Seleccionar ()
Range("C2").CurrentRegion.Select
End Sub

Macros en Excel 58
Rangos
Selección de filas
Para seleccionar filas podemos utilizar la instrucción Rows.Select, tal como vemos en las
siguientes macros:

' Seleccionar la Fila 1. ' Selecciona la fila 4.


Sub SeleccionaFila () Sub SeleccionaFila ()
Rows("1:1").Select Rows("4:4").Select
End Sub End Sub

' Selecciona desde la fila 4 hasta la 11, ambas inclusive


Sub SeleccionaFilas ()
Rows("4:11").Select
End Sub

' Selecciona las siguientes filas a la vez: 4,8,15 y 22.


Sub SeleccionaFilas ()
Range("4:4,8:8,15:15,22:22").Select
End Sub

Macros en Excel 59
Rangos
Selección de columnas
Para seleccionar columnas podemos utilizar la instrucción Columns.Select, tal
como vemos en las siguientes macros:

Sub SeleccionaColumna ()
' Selecciona la Columna B
Columns("B:B").Select

' Selecciona la Columna H


Columns("H:H").Select

' Selecciona des de la Columna C hasta la F


Columns("C:F").Select

' Selecciona las siguientes Columnas: A,C,E,G, I y K.


Range("A:A,C:C,E:E,G:G,I:K").Select
End Sub

Macros en Excel 60
Rangos
Otras selecciones
Excel considera que pese a que tengamos 65.536 filas y 256 columnas, prácticamente siempre
utilizamos una ínfima cantidad de estas filas y columnas.
Para saber el rango de celdas que utilizamos basta con utilizar el siguiente código:
Sub Rango()
ActiveSheet.UsedRange.Select
End Sub
Para seleccionar desde la celda A1 hasta la última celda del rango utilizado:
Sub Rango()
Range([a1], ActiveSheet.UsedRange).Select
End Sub
Para selecionar la última celda con datos del rango utilizado (suponemos que tenemos
seleccionado B4:D4):

Sub Seleccion ()
' Esto daría como resultado 5
R = Range([a1], ActiveSheet.UsedRange).Rows.Count
' Esto daría como resultado 4
C = Range([a1], ActiveSheet.UsedRange).Columns.Count
' Selecionaría la celda D5
Cells(R, C).Select
End Sub
Macros en Excel 61
Rangos
Insertar rangos
Como es lógico de suponer, existen numerosas También podemos insertar tantas nuevas
maneras de insertar rangos, para lo cual filas o columnas como tenga el rango:
utilizamos la instrucción Insert:
Sub Inserta ()
Sub Insertar ()
' Inserta 3 nuevas columnas a la izqui
' Inserta una nueva fila sobre la fila 1. erda de la columna B
Rows(1).Insert Range("B1:D10").EntireColumn.Inser
t
' Inserta una nueva columna a la izquierda d
e la columna A ' Inserta 5 nuevas filas sobre la fila 1
Columns("A:A").Insert 0.
Rows("10:15").Insert
' También inserta una nueva columna a la izq
uierda de la columna A End Sub
[A1].EntireColumn.Insert

' Inserta una nueva fila sobre la fila 1


[A1].EntireRow.Insert

End Sub

Macros en Excel 62
Rangos
Borrar rangos
Podemos borrar comentarios, contenidos, formatos, etc. En general utilizamos la instrucción Clear
seguida de lo que queremos borrar. A continuación vemos como hacerlo:

' Borra los comentarios sobre la celda A1 ' Limpia la celda A1 de cualquier formato que tenga,
Sub Borrar () por ej. color
Range("A1").ClearComments Sub Borrar ()
End Sub [A1].ClearFormats
End Sub
Si queremos realizar el borrado de diferentes propiedades de un mismo rango podríamos hacer:
Sub Borrar ()
With Range("A1") ' Borra el contenido de la celda A1, no el formato
.ClearComments 'Borra comentarios Sub Borrar ()
.ClearContents 'Borra contenidos Cells(1,1)..ClearContents
.ClearFormats 'Borra formatos End Sub
.ClearNotes 'Borra notas
.Clear 'Borra todo lo anterior
End With
End Sub

La instrucción Clear sola, como se vé en la macro anterior, borra toda información de la celda
(formato, contenido, comentarios, etc).

Macros en Excel 63
Rangos
Combinar rangos
Para combinar celdas utilizamos la instrucción MergeCells. Solo podemos combinar celdas que estén
contiguas y siempre que formen o un cuadrado o un rectángulo, pues de lo contrario Excel no lo
permitiría.
Para combinar un rango de celda hacemos:

' Combinar las celdas del rango B4:D4


Sub Combinar ()
Application.DisplayAlerts = False
Range("B4:D4").MergeCells = True
End Sub

Conviene recordar que si combinamos desde una macro, y las celdas que queremos combinar no
estan vacías, Excel nos pedirá confirmación, pues podríamos perder información. Para evitar la
confirmación deberíamos modificar la macro anterior agregando una nueva línea al comienzo:

' Combinar las celdas del rango B4:D4 y evitar confirmación


Sub Combinar ()
Application.DisplayAlerts = False
Range("B4:D4").MergeCells = True
End Sub

Macros en Excel 64
Rangos
Transponer rangos

La operación de transponer se realiza cuando queremos que los valores de una fila se
copien como una columna o viceversa. Para ello utilizamos la instrucción Transpose.

Dicho de otra forma es una manera particular de pegar los datos copiados previamente
con lo cual:

Sub Seleccion ()

' Convertir fila en columna


Range("A1:A15").Copy
Range("D4").PasteSpecial Paste:=xlPasteAll, Transpose:=True

' Convertir columna en fila


Range("A1:B10").Copy
Range("D4").PasteSpecial Paste:=xlPasteAll, Transpose:=True

End Sub

Macros en Excel 65
ESTRUCTURAS
Las estructuras son conjuntos de instrucciones VBA que deben respetar una sintaxis
determinada y que nos permiten realizar diversas operaciones
For Next
La instrucción For Next repite un grupo de instrucciones un número especificado de
veces. La sintaxis es:
For contador = principio To fin [Step incremento]
[instrucciones]
[Exit For]
[instrucciones]
Next [contador]
La sintaxis de la instrucción For...Next consta de las siguientes partes:

-Contador (requerido): variable numérica que se utiliza como contador de bucle. La


variable no puede ser Booleana ni un elemento de matriz.
-Principio (requerido): valor inicial del contador.
-Fin (requerido): valor final del contador.
-Incremento (opcional): cantidad en la que cambia el contador cada vez que se ejecuta
el bucle. Si no se especifica, el valor predeterminado de incremento es uno.
-Instrucciones (opcional): una o más instrucciones entre For y Next que se ejecutan un
número especificado de veces.
Macros en Excel 66
Estructuras
For Next
Cuando el incremento es negativo es necesario especificar el incremento que va a tener
lugar en el bucle mediante la palabra Step tal que:
Sub For_Next()
Dim X As Integer
' Establece 10 repeticiones, con incremento negativo de 1
For X = 10 To 1 Step -1
Cells(X, 1) = X
Next X
End Sub

En el caso anterior X tomaría los valores 10,9,8,7,6,5,4,3,2,1 sucesivamente.


Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello,
proporcionamos a cada bucle un nombre de variable único como su contador. La siguiente
construcción sería la correcta:

For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I Macros en Excel 67
Estructuras
While Wend
La instrucción While Wend ejecuta una serie de instrucciones mientras una condición dada sea
True, es decir verdadera, o tenga lugar. Su sintaxis es:

While condición
[intrucciones]
Wend

Condición (requerido): expresión numérica o expresión de cadena cuyo valor es True o False. Si
condición es Null, condición se considera False.

Instrucciones (opcional): una o más instrucciones que se ejecutan mientras la condición es True.

Si condición es True, todas las instrucciones se ejecutan hasta que se encuentra la instrucción
Wend. Después, el control vuelve a la instrucción While y se comprueba de nuevo condición. Si
condición es aún True, se repite el proceso. Si no es True, la ejecución se reanuda con la
instrucción que sigue a la instrucción Wend.

Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más
reciente.

Macros en Excel 68
Estructuras
With End With
La instrucción With End With ejecuta una serie de instrucciones sobre un único objeto o sobre un tipo
definido por el usuario. Permite realizar múltiples operaciones sobre el mismo objeto. La sintaxis que
emplea es:

With objeto
[instrucciones]
End With

Objeto (requerido): nombre de un objeto o de un tipo definido por el usuario.


Instrucciones (opcional): una o más instrucciones que se van a ejecutar sobre objeto.

Veamos un ejemplo sencillo con el cual asignamos un formato a la celda A1:

' Repetimos lo anterior pero con With


Sub Macro()
With Range("A1")
.Font.Bold = True
.Font.Size = 50
.Font.ColorIndex = 3
End With
End Sub

Macros en Excel 69
Estructuras
If Then
La instrucción If Then permite escoger entre 2 o más posibilidades, para decidir sobre que es lo que
queremos, entre una serie de alternativas.
La instrucción ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una
expresión. Su sintaxis es:
If condición Then [instrucciones]-[Else instrucciones_else]
Tambien podemos utilizar la siguiente sintaxis en formato de bloque:

If condición Then
[instrucciones]
[ElseIf condición-n Then
[instrucciones_elseif] ...
[Else
[instrucciones_else]]
End If

Condición (requerido): uno o más de los siguientes dos tipos de expresiones: Una expresión numérica o
expresión de cadena que puede ser evaluada como True o False. Si condición es Null, condición se
considera False.
Una o más instrucciones separadas por dos puntos ejecutados si la condición es True. condición-n
(Opcional). igual que -condición.
instrucciones_elseif (Opcional): una o más instrucciones ejecutadas si la condición-n asociada es True.
instrucciones_else (opcional): una o más instrucciones ejecutadas si ninguna de las expresiones anteriores
condición o condición-n es True.
Macros en Excel 70
Estructuras
If Then
Veamos algunos ejemplos de If, escritos en una sola línea:

En esta macro si el valor de la celda A1 es > a 15, entonces la condición es verdadera (es
decir TRUE) con lo cual se ejecuta la instrucción definida para tal caso, en este ejemplo
lanzamos un mensaje, que dice: "La celda A1> 15"

Sub If_Then()
If [A1] > 15 Then Msgbox "La celda A1> 15"
End Sub

En esta otra macro si el valor de la celda es >15 se cumple con la condición demandada
con lo cual se ejecuta la primera opción, en caso de que no sea TRUE (es decir en caso
de que sea FALSE) ejecutamos la segunda instrucción, en nuestro ejemplo, el mensaje:
"La celda A1< 15"

Sub If_Then()
If [A1] > 15 Then Msgbox "La celda A1> 15" Else MsgBox "La celda A1< 15"
End Sub

Macros en Excel 71
Estructuras
If Then
Veamos algunos ejemplos de If, escritos en bloque:
En caso de que el valor de la celda A1>15 entonces la condicion es True, y siendo True,
lanzaríamos un mensaje y después pondríamos la celda A1 en negrita y con fondo Rojo.

Sub If_Then()
If [A1] > 15 Then
Msgbox "La celda A1> 15"
With [A1]
.Interior.ColorIndex = 3
.Font.Bold = True
End With
End If
Sub If_Then()
End Sub
If [A1] > 15 Then ' si la condicion es TRUE
MsgBox "La celda A1> 15" ' lanzaríamos un mensaje
o bien:
[A1].Interior.ColorIndex = 3 ' el fondo de la celda [A1] seria rojo
[A1].Font.Bold = True ' y la celda [A1] estaría en negrita
Else ' Si la condicion fuera False
[A1].Interior.ColorIndex = 10 'el fondo de la celda [A1] sería Verde
[A1].Font.Size = 50 ' y la fuente tendría tamaño 50
End If
End Sub
Macros en Excel 72
Estructuras
Select Case
La instrucción Select Case se utiliza cuando las alternativas en una estructura de If Then
son muchas. En tal caso conviene evitar el If Then y hacer uso de Select Case, que
permite ejecutar uno de varios grupos de instrucciones, dependiendo del valor de una
expresión.

La sintaxis de Select Case es:

Select Case expresión_prueba


[Case lista_expresion-n
[instrucciones-n]] ...
[Case Else
[instrucciones_else]]
End Select

Macros en Excel 73
Estructuras
Select Case
Veamos un ejemplo:

Sub Select_Case()
Dim Número As Variant ' la declaramos como Variant para evitar el error de compilación que
' obtendríamos en el caso de que [A1] fuera texto
Número = [A1] ' Inicializa variable.
Select Case Número ' Evalúa Número.
Case 1 To 5: MsgBox "Entre 1 y 5" ' Para Nºs entre 1 y 5, inclusive
Case 6, 7, 8: MsgBox "Entre 6 y 8" ' Para Nºs entre 1 y 5, inclusive
Case 9 To 10: MsgBox "Mayor que 8" ' Para Nºs entre 9 y 10, inclusive
Case Else ' Para otros valores.
MsgBox "No está entre 1 y 10"
End Select
End Sub

Si expresión prueba coincide con cualquier lista expresión asociada con una cláusula Case, las
instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la
última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue
a End Select. Si expresión prueba coincide con una expresión de lista expresión en más de una
cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia.

Macros en Excel 74
COMANDOS
Mensajes de alerta
Los mensajes de alerta son avisos que dispara Excel antes de realizar determinadas acciones. Por
ejemplo, al intentar borrar una Hoja, nos aparece una aviso de confirmación. A nivel de macros, es
importante tenerlos presentes, tal como vemos a continuación:

Sub BorrarHoja()

' Borramos una hoja


ActiveSheet.Delete
' Pero esto requiere la confirmacion por parte del usuario...
' Para evitar el mensaje de alerta, ya que Excel siempre nos pedirá confirmación,
' bastará con utilizar la siguiente instrucción:
Application.DisplayAlerts = False
' Con lo cual ahora sí podremos borrar la hoja dada sin necesidad de confirmación
ActiveSheet.Delete
' Finalmente dejamos a Excel en su estado original de mostrar los mensajes
Application.DisplayAlerts = True
End Sub

Es importante recordar que el Application.DisplayAlerts=False siempre debe ir antes de la acción


que requiere confirmación. Al final de la macro conviene volver a asignarle la propiedad True.

Macros en Excel 75
COMANDOS
Barra de estado
La barra de estado de Excel es la que figura en la parte inferior y suele mostrar distintos
mensajes. Esta barra se puede mostrar u ocultar desde el menú Ver > Barra de estado.
A continuación se exponen algunas instrucciones para saber como manipularla y modificarla:

Sub BarraEstado()

' Si queremos ver la barra de estado original


Application.DisplayStatusBar = True

' Si NO queremos verla bastará con:


Application.DisplayStatusBar = False

' Por defecto la Barra de estado siempre estará Visible, es decir:


Application.DisplayStatusBar = True

' Si queremos que la barra de estado muestre un mensage diferente bastará con:
Application.DisplayStatusBar = "Procesando mi reporte..."

' Si queremos que la Barra de Estado este limpia, es decir sin mensaje alguno:
Application.DisplayStatusBar = ""

End Sub

Macros en Excel 76
COMANDOS
Msgbox
Un Msgbox es simplemente una ventana que muestra un mensaje. Por ej., con la siguiente
instrucción mostraríamos un saludo:
Sub Saludo()
' Escribimos el mensaje entre comillas
Msgbox "Hola, Excel te saluda!"
End Sub
Por defecto, un Msgbox siempre incluye el botón "Aceptar", el cual haría desaparecer el mensaje y
continuaría ejecutando el código restante si lo hubiera. También podemos configurar para que en
lugar del botón "Aceptar" aparezca un botón de "Ok" y "Cancelar" y de acuerdo al que elija el
usuario, la macro continuaría con un código u otro código. Esto lo realizamos agregando la
instrucción vbOKCancel, tal como vemos a continuación:
Sub Mensaje()
Dim Respuesta As Integer
Respuesta = MsgBox("Seleccione Aceptar o Cancelar", vbOKCancel)
' verificamos si se presionó 'Cancelar'
If Respuesta = vbCancel Then
MsgBox "Macro caso Cancelar" ' Aquí continuaría la macro en caso de Cancelar
End If
' si se presionó 'Aceptar'
If Respuesta = vbOK Then
MsgBox "Macro caso Aceptar" ' Aquí continuaría la macro en caso de Aceptar
End If
End Sub
Macros en Excel 77
COMANDOS
InputBox
Un InputBox se utiliza cuando requerimos un input del Usuario (es decir, cuando esperamos que el
usuario introduzca un dato). Básicamente lo que hacemos es asignarle un valor a una variable, pero
le damos el control al usuario para que asigne dicho valor o dato a gusto.

Dentro del InputBox utilizamos las siguientes instrucciones:


Prompt: mensaje del InputBox
Title: título del InputBox
Default: valor por defecto al abrir el InputBox (si omitimos no aparecerá nada)
Type: indica el tipo de dato a introducir (1 Número, 2 Texto, 4 True o False, 5 Rangos)

Vamos ahora como queda el InputBox:

Sub Nombre()
' el dato que proporcionará el usuario quedará registrado por la Variable Respuesta. Como no sabem
os que tipo de dato es lo definimos como una variable de tipo Variant.
Dim Nombre As Variant
Nombre = Application.InputBox(prompt:="Escriba su nombre", Title:="Colegio de Abogados", _
Default:="Pedro", Type:=2)
Msgbox Nombre ' En lugar de este Msgbox continuaría el resto de la macro...
End Sub

Macros en Excel 78
LIBRERIAS
Borrar Filas

Para borrar filas debemos posicionarnos en una celda y utilizar la instrucción


EntireRow.Delete
Veamos un ejemplo:

'En esta macro recorremos la columna 2 (la B) desde la fila 2000 hasta la 1
'Si la celda tiene el valor "q" entonces borramos la fila

Sub BorrarFilas()
Dim r As Long
For r = 2000 To 1 Step -1 'Debemos ir desde abajo hacia arriba
If Cells(r, 2).Value = "q" Then Cells(r, 2).EntireRow.Delete
Next r
End Sub

Macros en Excel 79
LIBRERIAS
Búsquedas
Para hacer búsquedas (el equivalente a la función "buscarv" de Excel) utilizamos la
instrucción lookupvalue.
Veamos un ejemplo:
Sub BuscarCodigo()
'Definimos variables
Dim lookupvalue As Variant, value As Variant, lookupRange As Range

value = Range("A1").value 'celda con el valor buscado

Set lookupRange = Range("A10:A100") 'rango donde buscar

lookupvalue = Application.VLookup(value, lookupRange, 3, False) 'Queremos la columna 3

'Si no encuentra valor terminamos la macro


If IsError(lookupvalue) Then exit sub

'Si lo encuentra lo devuelve


Else
Msgbox lookupvalue
End If
End Sub
Macros en Excel 80
LIBRERIAS
Copiar Pegar
Un ejemplo sencillito sobre copiar una celda y pegarla como valor.

Sub CopiarPegar()
Range("A104").Copy
Range("A105").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Imágenes
Veamos algunas operaciones que podemos realizar con imágenes.

'INSERTAR UNA IMAGEN


Public Sub InsertaLogo()

Dim vFullName As Variant


vFullName = Application.GetOpenFilename("Image Files,*.jpg;*.gif")
If vFullName <> False Then
Hoja6.Pictures.Insert CStr(vFullName)
End If

End Sub
Macros en Excel 81
LIBRERIAS
Ordenar

Macros utilizadas para ordenar

'Con esto ordeno una columna ascendentemente

Range("A38:G65536").Sort Key1:=Range("F39"), Order1:=xlDescending, Header:=xlYes, _


OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'En A38:G38 esta el encabezado. El Key1 es F39 (una fila mas abajo, osea el primer registro)

Macros en Excel 82
LIBRERIAS
Tablas Dinámicas

Algunas macros de interés relacionadas con tablas dinámicas (TD).

'La siguiente macro actualiza una TD automáticamente al entrar a la hoja


'Esta macro debe estar colocada en la misma hoja que contiene la TD
Private Sub Worksheet_Activate()
ActiveSheet.PivotTables(1).PivotCache.Refresh
End Sub

Macros en Excel 83

También podría gustarte