Sie sind auf Seite 1von 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

QU SON LAS MACROS?


Es un conjunto de instrucciones de cdigo
(programado) que permiten realizar una tarea
determinada como as tambin expandir e incrementar
las prestaciones de Excel.
Las macros se escriben en lenguaje de programacin
VBA (Visual Basic for Applications).
Con las macros podrs ahorrar mucho
tiempo y eliminar / automatizar trabajo Excel
manual
Programando una macro Excel, tareas que
llevaban horas o das de trabajo manual se
Pueden realizar en segundos.
Macros en Excel

COMO EMPEZAMOS?
Partes de la Ventana principal de Excel
Cinta de Opciones
Barra de Acceso rpido

Barra de Ttulo

Herramienta de la
Ci

nta de Opciones

rea de trabajo

Pestaas de Hojas
Barra de Estado

Macros en Excel

CINTA DE OPCIN 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 botn Opciones y se abre una ventana.
Paso 3: Hacemos clic sobre Personalizar cinta de opciones.
Paso 4: Ubicamos la seccin 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.

1
4
3
2
5
Macros en Excel

SEGURIDAD DE LAS MACROS


Para deshabilitar la Advertencia de seguridad seguimos los siguientes pasos.

1
Clic en
Seguridad de
Macros

2
5

6
Macros en Excel

QUE DEBEMOS CONOCER?


Cuando hablamos de macros hablamos de Objetos, Propiedades y
Mtodos (OPM). Estos son los 3 conceptos generales ms importantes que
debes conocer a la hora de programar las macros.
De momentos solo te daremos una sencilla definicin y luego iremos
profundizando ms en ellos.
Hay un ejemplo muy prctico para comprender lo que son los Objetos,
Propiedades y Mtodos (OPM). Supongamos que tenemos una canasta
con frutas.

Cuales seran los OPM de la misma?


Objetos: Los objetos de la canasta de frutas seran las mismas frutas
(manzanas, naranjas, peras).
Propiedades: Las propiedades seran las caractersticas de las frutas
(color, olor, sabor, textura).
Mtodos: Finalmente los mtodos son las acciones que podramos ejercer
sobre las frutas (comprarlas, venderlas, comerlas, almacenarlas, limpiarlas,
quitarles la piel,).
Macros en Excel

OBJETOS, PROPIEDADES Y MTODOS


Objetos: prcticamente 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 grfico, una
tabla dinmica, un cuadro de dilogo, 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 caractersticas de los objetos. Por ejemplo,
para el objeto "celda" algunas de sus propiedades seran: alto, ancho, color, bloqueada
o desbloqueada, vaca, con un nmero o con una frmula, etc. Por ejemplo para el
objeto "hoja" algunas de sus propiedades seran: visible u oculta, con o sin lneas de
divisin, con o sin barras de desplazamiento vertical y horizontal, etc.
Mtodos: un mtodo es una accin 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 tambin
conocer el nombre de algn mtodo que desees aplicarle.
Macros en Excel

EJEMPLOS DE OPM
Macros = VBA = OPM
El lenguaje VBA es muy fcil de entender y siempre gira en torno a seleccionar los
objetos, cambiar sus propiedades y/o ejecutarles distintos mtodos.
Veamos un sencillo ejemplo de algunos objetos de Excel y su denominacin en ingls,
el idioma utilizado por las macros:

Ejemplos de Objetos VBA


(En espaol)
Cell (celda)
Range (rango)
Worksheet (hoja)
Workbook (libro)

Ejemplos de Propiedades VBA


(En espaol)
Value (valor)
Color (color)
Format (formato)

Ejemplos de Mtodos VBA


(En espaol)
Copy (copiar)
Protect (proteger)
Delete (borrar)

Macros en Excel

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 Cdigo

Ventana de
Propiedades

Ventana de Inmediato

Macros en Excel

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 cuestin.
2. Formularios
1. UserForm1: Dentro de esta carpeta se disean los formularios interactivos
para el usuario llamado UserForm.
3. Mdulos
1. Modulo1: Dentro de esta carpeta se escriben o graban las macros.
Podemos insertar tantos mdulos como necesitemos. Estos mdulos operan de
forma genrica, 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 vers que se habilita la Ventana de Cdigo 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 escrbela
en los objetos de Hoja, en el nombre de Hoja correspondiente.
2.Si la macro debe afectar a todo un libro en particular escrbela 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 genrica escrbela en un Mdulo.
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
Mdulo1 que vimos en la seccin anterior, podremos ver sus propiedades:
Algunos objetos tienen muchas propiedades (por ej. los
Userforms) as que tenemos la opcin de ordenar los
mismos de forma alfabtica o por categora. El objeto
Mdulo1 solo tiene la propiedad (Name)Mdulo1. Si
quisiramos podramos reemplazar el nombre de Mdulo1
y asignar otro nombre a gusto.

Consejo! En la medida que


vamos insertando muchas
macros
en
nuestro
proyecto,
conviene
ir
creando nuevos mdulos
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 impresin de hojas

DisplayRightToleft

False

Muestras las columnas y filas desde el lado derecho.

EnableCalculation

True

Activa el calculo matemtico automtico en las celdas

EnableFormatConditionsCalculation

True

Activa el calculo lgico automtico en las celdas

EnableSelection

No habilita las restricciones

Name

-1
-1142
Hoja1

Desactiva las celdas bloqueadas


Desactiva todas las celdas
Nombre de la Hoja1 en VBA

Visible

-1

Se muestra la Hoja de Excel

0
2

Se oculta temporalmente la Hoja de Excel


Se oculta permanentemente la Hoja.

Macros en Excel

13

EDITOR DEL VBA VENTANA DE CDIGO


Lo que interesa es ms bien el cdigo que escribamos aqu. Puedes escribir todas
las macros que quieras en esta ventana. Recuerda que el mismo editor asignar
automticamente los colores al cdigo y adems separar con una lnea continua
cada macro.

En la medida que empecemos a escribir muchas macros, existe una forma rpida 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 rpidamente en la misma.

14

Macros en Excel

14

EDITOR DEL VBA VENTANA DE INMEDIATO


La ventana inmediato sirve para escribir, ejecutar y probar un cdigo macro
rpidamente, sin tener que armar toda la macro con la estructura que comentamos
en secciones anteriores.
Por ejemplo, si quisiramos averiguar la cantidad de hojas que tiene un Libro
podramos escribir la siguiente macro en un mdulo 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 nmero de hojas que posee el libro. El signo ? al comienzo significa que estamos
buscando conocer el resultado de algo. El resultado final se vera 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 mtodos.
Escribirla manualmente
Utilizar la grabadora de macros
Combinacin de los 2 mtodos anteriores (grabarla y luego retocarla
manualmente)
En cada situacin utilizars un mtodo distinto. Por ejemplo, las macros muy
sencillas las puedes escribir manualmente porque tienen pocas lneas y ya
las conoces.
En otros casos la podrs crear con la grabadora de macros y olvidarte del
cdigo VBA.
Sin embargo, en la medida que progreses con las macros vers que el
mtodo ms utilizado suele ser el nmero 3 mediante el cual primero
grabars y luego hars ajustes manuales en el cdigo para hacerlo ms
eficiente y que se ejecute ms rpido.
Macros en Excel

16

EJEMPLOS DE MACROS
Crea un nuevo libro Excel y gurdalo con el nombre Libro1.
2. Accede al Editor de visual basic con las teclas ALT+F11
3. Inserta un nuevo Mdulo desde el men Insertar > Mdulo
4. Dentro del mdulo escribe textualmente el siguiente cdigo:
Sub MostrarTexto()
' Esta macro muestra un texto en una ventana emergente
Msgbox Bienvenido"
End Sub

Esta macro utiliza la instruccin Msgbox que sirve para abrir una ventana con la
informacin que le indiquemos.
Sub OcultarLineas()
' Esta macro oculta las lneas de divisin de las celdas
ActiveWindow.DisplayGridlines = False
End Sub
Esta macro utiliza el objeto ActiveWindow (ventana activa).
Luego le asigna la propiedad DisplayGridlines=False (mostrar lneas de
divisin=falso)
Macros en Excel

17

EJECUCIN DE MACROS
Desde el Cdigo: La forma ms rpida de ejecutar una macro es desde el mismo cdigo.
Cuando terminas de escribir una macro puedes posicionarte en cualquiera de sus lneas de
cdigo y presionar la tecla F5. Recuerda que puedes acceder al cdigo 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
Vers 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 prctica de ejecutar una macro es desde el teclado.
Esto tambin se conoce como teclas de mtodo 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 botn Opciones.
Macros en Excel

18

Donde dice Tecla de mtodo abreviado presiona la


tecla MAYUSC y luego una letra. En nuestro ejemplo
la macro se ejecutar con Ctrl+Maysc+Q

Donde dice Tecla de


mtodo
abreviado
presiona
la
tecla
MAYUSC y luego una
letra.
En
nuestro
ejemplo la macro se
ejecutar
con
Ctrl+Maysc+Q
Desde Objetos
Haz clic izquierdo en la
figura para desplegar su
men de opciones.
Elige la opcin Asignar
macro
19

Macros en Excel

19

MACROS CON EVENTOS EN LIBROS


Los eventos de libros permiten disparar automticamente una macro cuando suceden determinadas
acciones a nivel del libro excel en cuestin, 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 opcin 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 opcin Activate, vers
que en la ventana de macros se escribe
automticamente el siguiente cdigo:
Private Sub Workbook_Activate()
End Sub
Luego podrs escribir tu cdigo macro entre esas lneas. En
este caso, la macro que escribas se ejecutar cada vez que
actives el libro excel en cuestin. 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 automticamente y vers 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 podrs ver en la lista del men de macros. Esto es as porque la
macro no se puede ejecutar manualmente, si no que se ejecuta automticamente cuando
ocurre el evento, en este caso cuando se activa el libro excel en cuestin.
Existen ms de 20 macros de evento a nivel libro. Puedes insertarlas siguiendo las
instrucciones dadas al comienzo. Las ms importantes son:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' El cdigo que escribas aqu se ejecutar automticamente al cerrar el libro
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' El cdigo que escribas aqu se ejecutar automticamente al imprimir el libro
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' El cdigo que escribas aqu se ejecutar automticamente al guardar el libro
End Sub
Private Sub Workbook_Open()
'El cdigo que escribas aqu se ejecutar automticamente al abrir el libro
End Sub
Macros en Excel

21

MACROS CON EVENTOS EN HOJAS


Los eventos de hojas permiten disparar automticamente 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 opcin Worksheet.

3.Finalmente, en la lista desplegable de la derecha veremos todos los eventos de hoja que
podemos utilizar para disparar nuestra macro automticamente.
4.Si haces clic en la opcin Activate,
vers que en la ventana de macros se
escribe el siguiente cdigo:
Private Sub Worksheet_Activate()
End Sub
Luego podrs escribir tu cdigo macro entre esas lneas. En este caso, la macro que escribas se
ejecutar cada vez que actives la hoja excel en cuestin. 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


automticamente y vers el saludo:
Macros en Excel

22

En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa
macro no la podrs ver en la lista del men de macros. Esto es as porque la macro no se puede
ejecutar manualmente, si no que se ejecuta automticamente cuando ocurre el evento, en este caso
cuando se activa la hoja excel en cuestin.
Existen unas 9 macros de evento a nivel hoja. Puedes insertarlas siguiendo las instrucciones dadas
al comienzo. Las ms importantes son:
Private Sub Worksheet_Activate()
'El cdigo que escribas aqu se ejecutar automticamente al activar la hoja
End Sub
Private Sub Worksheet_Calculate()
' El cdigo que escribas aqu se ejecutar automticamente al calcular la hoja
End Sub
Private Sub Worksheet_Deactivate()
'El cdigo que escribas aqu se ejecutar automticamente al desactivar la hoja
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' El cdigo que escribas aqu se ejecutar automticamente 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 cdigo que escribas aqu se ejecutar automticamente al producirse un cambio en la hoja (por ejemplo al
introducir un dato en una celda, seleccionar una opcin de una lista desplegable, etc.)
End Sub
Macros en Excel

23

FORMULARIOS
Un Formulario (o su denominacin en ingls Userform) se utiliza para crear un Cuadro de
Dilogo donde el usuario puede introducir informacin, 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 ms intuitiva.

Macros en Excel

24

1. Abrir el editor de macros (por ejemplo, con CTRL+F11).


2. Insertar un objeto Userform. Esto podemos hacerlo fcilmente:
1.Seleccionamos el Libro Excel donde trabajaremos, en nuestro caso VBAProject (Libro2).
2. Hacemos clic derecho en el mismo y elegimos la opcin Insertar > Userform
3.Como se ve en la fotografa, veremos que aparece un objeto Userform1 que cuelga de la
carpeta Formularios

La idea es que mediante estos controles podremos tanto capturar como enviar informacin o datos
desde o hacia las celdas de Excel respectivamente. Tambin 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, vers 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 seccin 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
botn, los mismos se volcarn 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 vaca 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 accin, se pueden agregar un Botn de comando.
Nuestro Userform tendr un botn para Agregar los datos a la tabla Excel y otro botn para
Cerrar el Userform.
1.En el Cuadro de Herramientas hacemos clic en Botn de comando.
2. En el Userform hacemos clic en la parte inferior izquierda para agregar el botn.
3.Con el nuevo botn seleccionado hacemos doble clic en la propiedad (Nombre) de la
Ventana de Propiedades, tipeamos UFAgregar y luego enter.
4. Con el nuevo botn seleccionado hacemos doble clic en su propiedad Caption en la Ventana
de Propiedades, tipeamos Agregar y luego enter.
5.Hacemos clic en alguna parte vaca del Userform para seleccionarlo y mostrar el Cuadro de
Herramientas.
6.Repetimos los pasos anteriores para agregar otro Botn 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 debers repetirlo para el otro
botn, tal cual se indica en el paso 7.6.

Macros en Excel

32

8. Agregamos el cdigo al botn Agregar


Private Sub UFAgregar_Click()
Dim iFila As Long
Dim ws As Worksheet
Set ws = Worksheets(1)
'encuenta la siguiente fila vaca
iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'Verifica que se ingrese un nombre
If Trim(Me.UFNombre.Value) = "" Then
Me.UFNombre.SetFocus
MsgBox "Debe ingresar un nombre"
Exit Sub
End If
'copia los datos a la base de datos
ws.Cells(iFila, 1).Value = Me.UFNombre.Value
ws.Cells(iFila, 2).Value = Me.UFEdad.Value
ws.Cells(iFila, 3).Value = Me.UFFecha.Value
'limpa el formulario
Me.UFNombre.Value = ""
Me.UFEdad.Value = ""
Me.UFFecha.Value = ""
Me.UFNombre.SetFocus

Seleccionamos nuestro botn de comando


Agregar y hacemos doble clic

9. Agregamos el cdigo al botn Cerrar


Private Sub UFCerrar_Click()
Unload Me
End Sub

10.Permitir al usuario cerrar el Userform con


la tecla ESC
1. Seleccionamos el botn de comando Cerrar
2. En la Ventana Propiedades cambiamos la
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 instruccin Private
cuando escribas tu macro. Debes utilizar dicha instruccin delante de la palabra Sub. De este modo
solo ocultars la macro en cuestin. Ejemplo:
Private Sub MiMacro()
'Esta macro no aparecer en la lista de macros
'Cdigo de tu macro aqu
End Sub
Si tienes muchas macros en el mdulo y quieres ocultarlas todas, en lugar de escribir la palabra
Private en cada una de ellas, puedes colocar la siguiente instruccin al comienzo de tu mdulo:
Option Private Module

Utilizar la instruccin With


Cuando tenemos que definir muchas propiedades de un nico
objeto, no es necesario hacer mencin al objeto cada vez,
porque esto le quita velocidad de ejecucin a la macro. Para
ganar velocidad y mantener el cdigo ms simple, conviene
hacer mencin al objeto una nica con la instruccin With y
luego definir sus propiedades, por ejemplo:
Macros en Excel

Sub CambiarFormatoRango()
With Range("A1")
.Value = 10
.Font.Bold = True
.Interior.ColorIndex = 5
End With
End Sub
34

INSERTAR FRMULAS RELATIVAS


Insertar frmulas relativas
Si queremos insertar frmulas en celdas mediante macros, existe una forma ms rpido 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 comn que se genere ms cdigo del necesario y
esto hace que funcione un poco ms 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 cdigo ser el siguiente:
Sub CopiaRango()
Range("C10:C12").Select
Selection.Copy
Range("E10").Select
ActiveSheet.Paste
End Sub

Sub CopiaRango()
Range("C10:C12").Copy Range("E10")
End Sub

Macros en Excel

35

MACROS
Variables: Qu son las variables
y
cmo
se
utilizan.
Libros: Macros para manipular
libros.
Hojas: Macros para manipular
hojas.
Rangos: Macros para manipular
rangos.
Estructuras: Las estructuras
y macros ms 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 (tambin podramos 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 ms adelante en nuestro cdigo.
Macros en Excel

37

Variables
Definicin
Una variable es un lugar de almacenamiento con nombre que puede contener cierto tipo de datos
que puede ser modificado durante la ejecucin 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 carcter alfabtico, deben ser nicos dentro del
mismo mbito, no deben contener ms de 255 caracteres y no pueden contener un punto o
carcter de declaracin de tipo.
Podemos declarar todo tipo evariables, por ello conviene tambin adquirir la costumbre de hacer
que el propio nombre de nuestras variable resulte descriptivo de la funcin que cumplir, por
ejemplo:
Sub Macro()
'Definimos una variable numrica TipoCambio, que es el factor de conversin 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
Declaracin
Para que siempre nos veamos en la obligacin de declarar todas las variables que podamos ir
utilizando en nuestros mdulos (es decir obligarnos a definir nuestras variables de entrada).
Esto lo podemos realizar desde el editor de VBA, a traves del men Herramientas > Opciones >
pestaa Editor > y seleccionar la casilla Requerir declaracin de variables
Se usa en el nivel de mdulo para forzar declaraciones
explcitas de todas las variables en dicho mdulo, debe
aparecer en un mdulo antes de cualquier procedimiento.
Cuando Option Explicit aparece en un mdulo, debemos
declarar explcitamente todas las variables mediante las
instrucciones Dim, Private, Public, ReDim o Static.

Sub MacroMensaje()
' Declaramos la variable saludo como variable tipo texto
Dim saludo As String
Variante (Variable no declarada)
Dim despedida As String
'Damos un valor a la variable declarada
saludo = "Hola que tal"
Si se intenta utilizar una
'Damos un valor a la variable declarada
despedida = "Adios"
variable no declarada se
MsgBox saludo
obtiene un error en el tiempo
MsgBox despedida
de compilacin
End Sub
Macros en Excel

39

Variables
Tipos de Datos
Tipo de datos
Byte
Boolean
Integer
Long (entero largo)
Single (coma flotante/
precisin simple)
Double (coma
flotante/ precisin
doble)
Currency (entero a
escala)
Decimal

Date
Object
String (longitud
variable)
String (longitud fija)

Tamao
byte
bytes
bytes
bytes
bytes
bytes

Intervalo
0 a 255
True o False
-32,768 a 32,767
-2,147,483,648 a 2,147,483,647
-3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a
3,402823E38 para valores positivos
-1.79769313486231E308 a -4,94065645841247E-324 para valores negativos;
4,94065645841247E-324 a 1,79769313486232E308 para valores positivos

bytes

-922.337.203.685.477,5808 a 922.337.203.685.477,5807

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 nmero ms pequeo distinto de cero es +/0,0000000000000000000000000001
1 de enero de 100 a 31 de diciembre de 9999
Referencia a tipo Object
0 a 2.000 millones

bytes
bytes
bytes + longitud de la
cadena
longitud de la cadena

Variant (con nmeros)


bytes
Variant (con
bytes + longitud de la
caracteres)
cadena
Definido por el
nmero requerido por los
usuario (utilizando
elementos
Type)

1 a 65.400 aproximadamente
valor numrico hasta el intervalo de un tipo Double
mismo intervalo que para un tipo String de longitud variable
intervalo de cada elemento es el mismo que el intervalo de su tipo de datos.

La macro anterior utiliza bastantes menos recursos que esta


prxima que no fuerza la declaracin de la variable X (y
por lo tanto es considerada como Variant):
Macros en Excel

Sub Macro()
For X = 1 To 25
Cells(X, 1) = X
Next X
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 hacan 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
podrn utilizar el mismo nombre de la variable tal
Sub Macro()
que:
Dim X As Single
Option Explicit
Dim Y As Single
Option Explicit
Dim Z As Single
Sub Macro2()
X=5
Sub Macro1()
Dim Autor As String
Y = 10
Dim Autor As String
Autor = "Pedro"
Z = 50
Autor = "EXCEL"
ActiveCell = Autor
ActiveCell = X * Y * Z
ActiveCell = Autor
End Sub
MsgBox TypeName(Resultado)
End Sub
End Sub

Macros en Excel

41

Variables
Pblicas
Las variables declaradas mediante la instruccin Public estn disponibles para todos los
procedimientos en todos los mdulos de todas las aplicaciones, a menos que Option Private Module
est en efecto; en este caso, las variables slo son pblicas dentro del proyecto en el que residen.
Este tipo de variables son tiles cuando empezamos a trabajar con macros pues facilitan la
comprensin, y nos ahorran el hecho de tener que declarar lo mismo una y otra vez.

Usamos la instruccin Public para declarar el tipo


de datos de una variable. Por ejemplo, la
instruccin siguiente declara una variable como
de tipo Integer:
Public NmeroDeEmpleados As Integer
Usamos tambin la instruccin Public para
declarar el tipo de objeto de una variable.

Macros en Excel

Option Explicit
Public X As Byte
Sub Macro()
For X = 1 To 25
Call Macro2
Next X
End Sub

Sub Macro2()
Cells(X, 1) = X
End Sub

42

Variables
Estticas
Las variables declaradas con la instruccin Static conservan su valor mientras el cdigo se est
ejecutando.
Una vez que el cdigo del mdulo se est ejecutando, las variables declaradas con la instruccin
Static conservan su valor hasta que se reinicie o restablezca el mdulo. En los mdulos de clase,
las variables declaradas con la instruccin Static conservan su valor en cada instancia de clase
hasta que se destruye la instancia. En mdulos de formulario, las variables estticas conservan su
valor hasta que se cierra el formulario. Use la instruccin Static en procedimientos no estticos
para declarar explcitamente variables que son visibles slo dentro de un procedimiento, pero
cuya vida es la misma que la del mdulo en la que se defini el procedimiento.
Option Explicit

Sub Macro2()
Static x As Byte
x=x+5
Rg.Select
Rg = x
End Sub

Public Rg As Range
Sub Macro1()
Dim x As Byte
For x = 1 To 25
Set Rg = Cells(x, 1)
Call Macro2
Next x
End Sub
Macros en Excel

43

Variables
Constantes
Por lo general las variables hacen referencia a valores que
acostumbran a cambiar tal que, por ej:
Pero a veces queremos que una variable no cambie, es decir que
siempre haga referencia al mismo valor, ejemplo: mi nombre, la
capital de Francia etc. Lgicamente carece de sentido declarar
variables como constante si stas no son pblicas.
Para declarar una variable como constante utilizamos la instruccin
Const, por ej:

Sub Macro()
Dim Rng As Range
Dim x As Byte
For x = 1 To 25
Set Rng = Cells(x, 1)
Rng.Select
Rng = x
Next x
End Sub

Option Explicit
Const nPaises As Byte = 53
Const UKrate = 1.43, USrate = 0.78
Const autorLibro As String = "TodoEXCEL"
En la 1 lnea hemos definido una variable como nPaises as byte y su valor sera siempre 53.
La 2 lnea de cdigo 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 cdigo declara autorLibro como una constante de tipo string y le da el valor
TodoEXCEL

Macros en Excel

44

Variables
Conversin
Es posible convertir variables de un tipo a otro. Existen distintas funciones que permiten hacer estas
conversiones.
Funcin
CBool
CByte
CCur
CDate
CDbl

Cdec

Cint
Clong
CSng

Cstr
CVar

Tipo devuelto
Boolean
Byte
Currency
Date
Double

Intervalo del argumento expresin


expresin de cadena o numrica vlida.
0 a 255
.337.203.685.477,5808 a 922.337.203.685.477,5807.
expresin de fecha
.79769313486231E308 a -4,94065645841247E-324 para valores
negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores
positivos.
+/-79.228.162.514.264.337.593.543.950.335 para nmeros basados en
cero, es decir, nmeros sin decimales. Para nmeros con 28 decimales, el intervalo es
+/-7,9228162514264337593543950335. La menor posicin para un nmero
que no sea cero es 0,0000000000000000000000000001.
.768 a 32.767; las fracciones se redondean.
.147.483.648 a 2.147.483.647; las fracciones se redondean.
,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a
3,402823E38 para valores positivos.
mismo intervalo que Double para valores numricos. El mismo intervalo que
String para valores no numricos.
valor de retorno de CStr depende del argumento expresin.

Si la expresin del argumento expresin que se pasa a la funcin est fuera del intervalo del
tipo de dato al que se va a convertir, se produce un error. En general, el cdigo se puede
documentar utilizando las funciones de conversin de tipos de datos para indicar que el
resultado de alguna de las operaciones se debera expresar como un tipo de datos en
particular, no como el tipo de datos predeterminado.
Macros en Excel

45

Variables
Conversin
Cuando la parte fraccionaria es exactamente 0,5, CInt y CLng siempre redondean al nmero par
ms 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 nmero.
Adems, Fix e Int siempre devuelven un valor del mismo tipo del que se le pasa.
Utilizamos la funcin IsDate para determinar si se puede convertir date a una fecha o una hora.
Si tubiramos una cadena de texto tal que:
Sub EjCdate()
Dim QAZ As String
QAZ = "5/5/2008"
If IsDate(QAZ) Then
QAZ = CDate(QAZ)
MsgBox QAZ & " SI es una Fecha
."
Else
MsgBox QAZ & " no es una Fecha"
End If
End Sub

CDate reconoce literales de fecha y literales de


hora adems de nmeros comprendidos dentro
del intervalo de fechas aceptables. Al convertir
un nmero a una fecha, la parte numrica entera
se convierte a una fecha. Cualquier parte
fraccionaria del nmero se convierte a la hora
del da, comenzando a medianoche.

CDate reconoce formatos de fecha que se ajusten a la configuracin regional de tu sistema. Es


posible que no se determine el orden correcto del da, mes y ao si se proporciona en un formato
diferente del que reconoce la configuracin de fecha. Adems, no se puede reconocer un formato
de fecha largo si contiene la cadena del da 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 captulo veremos como hacerlo.
Abrir Libros
Para abrir un libro excel utilizamos la instruccin 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 instruccin Close:
Si quisiramos cerrar Excel:

Sub Cerrar()
ActiveWorkbook.Close
End Sub

Sub CierraExcel()
Application.Quit
End Sub

Guardar Libros
Para guardar un libro utilizamos la instruccin 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 vaca
y/o con un caracter con el que excel no permite guardar un libro
ActiveWorkbook.SaveAs [A1].Value
' Tambin podramos poner
' ActiveWorkbook.SaveAs Filename:=Range('A1').Value
End Sub
Macros en Excel

48

Libros
Borrar Libros
Para borrar un libro utilizamos la instruccin Delete:
Sub BorraLibro ()
Workbooks("C:\TuLibro.xls").Delete
End Sub
Conviene recordar que excel nos pedir confirmacin antes de borrarlo.
Crear Libros
Para crear 1 nuevo libro utilizamos la instruccin Add, por ejemplo:
Sub NuevoLibro()
Workbooks.Add
End Sub

Si quisiramos 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 instruccin 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 proteccin 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 tamao 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 parntesis y es sensible a las maysculas (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 instruccin Add. Si queremos agregar
una nueva hora al libro activo utilizamos el siguiente cdigo:
Para agregar una nueva hoja al libro utilizamos la instruccin Add. Si queremos agregar
una nueva hora al libro activo utilizamos el siguiente cdigo:
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 instruccin Select o Activate.
Seleccionar una hoja utilizando su nmero de hoja contenida dentro del libro, como se ve
a continuacin:
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 continuacin:
Sub Seleccionar()
' para seleccionar la segunda hoja del libro activo
Hoja1.Activate ' tambin podra ser Hoja1.Select
End Sub
Macros en Excel

53

Hojas
Borrar Hojas
Cuando se elimina una hoja o un libro, excel siempre nos pide confirmacin, del mismo
modo que cuando eliminamos cualquier otro fichero.
En este ejemplo se elimina la hoja llamada "Hoja1" en caso de que
confirmemos la opcin que observaremos cuando se ejecute el cdigo:
Sub BorrarHoja()
Sheets("Hoja1").Delete
End Sub
En este otro ejemplo se elimina la hoja1 del libro activo sin mostrar el cuadro
de dilogo de confirmacin:
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 instruccin PrintOut, tal que:
Sub ImprimeHoja ()
ActiveSheet.PrintOut
End Sub
Si adems deseamos fijar previamente un rango de impresin 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 instruccin
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
Seleccin de celdas
Existen diversas formas de seleccionar celdas, y en todas ellas utilizamos el mtodo
Select.
Veamos 3 mtodos (equivalentes) para seleccionar una celda, por ejemplo la celda C4:
' La forma clsica de seleccionar
Sub Seleccionar ()
Range("C4").Select
End Sub
' Esta es otra terminologa vlida 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
Seleccin de rangos
Veamos ahora distintas formas equivalentes de seleccionar un rango:
' Mtodo clsico para seleccionar el rango de celdas B6:B10
Sub Seleccionar ()
Range("B6:B10").Select
End Sub

Sub Seleccionar ()
'Otro mtodo para seleccionar el rango de celdas B6:B10
[B6:B10].Select
End Sub
Supongamos que queremos seleccionar un rango, pero no conocemos su dimensin,
por ejemplo porque la misma va cambiando. Un ejemplo puede ser una tabla donde se
van agregando nuevos registros. Con la instruccin CurrentRegion Excel seleccionar
todo el rango utilizado automticamente, aunque no conozcamos su tamao de
antemano:
' Selecciona la regin actual
Sub Seleccionar ()
Selection.CurrentRegion.Select
Macros en Excel
End Sub

57

Rangos
Con la macro anterior se seleciona el cuadrante, rectngulo y/o cuadrado de celdas
adyacentes a nuestra celda activa. El rectngulo queda definido por las celdas con
informacin.
Tambin podramos modificar la macro anterior para que seleccione la regin actual
desde una celda determinada, por ejemplo:
' Selecciona el rectngulo adyacente a C2.
Sub Seleccionar ()
[C2].CurrentRegion.Select
End Sub
o tambin podemos hacer:

' Selecciona el rectngulo adyacente a C2.


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

Macros en Excel

58

Rangos
Seleccin de filas
Para seleccionar filas podemos utilizar la instruccin Rows.Select, tal como vemos en las
siguientes macros:
' Seleccionar la Fila 1.
Sub SeleccionaFila ()
Rows("1:1").Select
End Sub

' Selecciona la fila 4.


Sub SeleccionaFila ()
Rows("4:4").Select
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
Seleccin de columnas
Para seleccionar columnas podemos utilizar la instruccin 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, prcticamente siempre
utilizamos una nfima cantidad de estas filas y columnas.
Para saber el rango de celdas que utilizamos basta con utilizar el siguiente cdigo:
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 dara como resultado 5
R = Range([a1], ActiveSheet.UsedRange).Rows.Count
' Esto dara como resultado 4
C = Range([a1], ActiveSheet.UsedRange).Columns.Count
' Selecionara la celda D5
Cells(R, C).Select
End Sub
Macros en Excel

61

Rangos
Insertar rangos
Como es lgico de suponer, existen numerosas
maneras de insertar rangos, para lo cual
utilizamos la instruccin Insert:
Sub Insertar ()

Tambin podemos insertar tantas nuevas


filas o columnas como tenga el rango:
Sub Inserta ()
' Inserta 3 nuevas columnas a la izqui
erda de la columna B
Range("B1:D10").EntireColumn.Inser
t

' Inserta una nueva fila sobre la fila 1.


Rows(1).Insert
' Inserta una nueva columna a la izquierda d
e la columna A
Columns("A:A").Insert

' Tambin inserta una nueva columna a la izq


uierda de la columna A
[A1].EntireColumn.Insert

' Inserta 5 nuevas filas sobre la fila 1


0.
Rows("10:15").Insert
End Sub

' 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 instruccin Clear
seguida de lo que queremos borrar. A continuacin vemos como hacerlo:
' Limpia la celda A1 de cualquier formato que tenga,
por ej. color
Sub Borrar ()
[A1].ClearFormats
End Sub
Si queremos realizar el borrado de diferentes propiedades de un mismo rango podramos 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
' Borra los comentarios sobre la celda A1
Sub Borrar ()
Range("A1").ClearComments
End Sub

La instruccin Clear sola, como se v en la macro anterior, borra toda informacin de la celda
(formato, contenido, comentarios, etc).
Macros en Excel

63

Rangos
Combinar rangos
Para combinar celdas utilizamos la instruccin MergeCells. Solo podemos combinar celdas que estn
contiguas y siempre que formen o un cuadrado o un rectngulo, pues de lo contrario Excel no lo
permitira.
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 vacas, Excel nos pedir confirmacin, pues podramos perder informacin. Para evitar la
confirmacin deberamos modificar la macro anterior agregando una nueva lnea al comienzo:
' Combinar las celdas del rango B4:D4 y evitar confirmacin
Sub Combinar ()
Application.DisplayAlerts = False
Range("B4:D4").MergeCells = True
End Sub

Macros en Excel

64

Rangos
Transponer rangos
La operacin de transponer se realiza cuando queremos que los valores de una fila se
copien como una columna o viceversa. Para ello utilizamos la instruccin 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 instruccin For Next repite un grupo de instrucciones un nmero especificado de
veces. La sintaxis es:
For contador = principio To fin [Step incremento]
[instrucciones]
[Exit For]
[instrucciones]
Next [contador]
La sintaxis de la instruccin For...Next consta de las siguientes partes:
-Contador (requerido): variable numrica 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 ms instrucciones entre For y Next que se ejecutan un
nmero 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 tomara 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
construccin sera 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 instruccin While Wend ejecuta una serie de instrucciones mientras una condicin dada sea
True, es decir verdadera, o tenga lugar. Su sintaxis es:
While condicin
[intrucciones]
Wend

Condicin (requerido): expresin numrica o expresin de cadena cuyo valor es True o False. Si
condicin es Null, condicin se considera False.
Instrucciones (opcional): una o ms instrucciones que se ejecutan mientras la condicin es True.
Si condicin es True, todas las instrucciones se ejecutan hasta que se encuentra la instruccin
Wend. Despus, el control vuelve a la instruccin While y se comprueba de nuevo condicin. Si
condicin es an True, se repite el proceso. Si no es True, la ejecucin se reanuda con la
instruccin que sigue a la instruccin Wend.
Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While ms
reciente.

Macros en Excel

68

Estructuras
With End With
La instruccin With End With ejecuta una serie de instrucciones sobre un nico objeto o sobre un tipo
definido por el usuario. Permite realizar mltiples 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 ms 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 instruccin If Then permite escoger entre 2 o ms posibilidades, para decidir sobre que es lo que
queremos, entre una serie de alternativas.
La instruccin ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una
expresin. Su sintaxis es:
If condicin Then [instrucciones]-[Else instrucciones_else]
Tambien podemos utilizar la siguiente sintaxis en formato de bloque:
If condicin Then
[instrucciones]
[ElseIf condicin-n Then
[instrucciones_elseif] ...
[Else
[instrucciones_else]]
End If

Condicin (requerido): uno o ms de los siguientes dos tipos de expresiones: Una expresin numrica o
expresin de cadena que puede ser evaluada como True o False. Si condicin es Null, condicin se
considera False.
Una o ms instrucciones separadas por dos puntos ejecutados si la condicin es True. condicin-n
(Opcional). igual que -condicin.
instrucciones_elseif (Opcional): una o ms instrucciones ejecutadas si la condicin-n asociada es True.
instrucciones_else (opcional): una o ms instrucciones ejecutadas si ninguna de las expresiones anteriores
condicin o condicin-n es True.
Macros en Excel

70

Estructuras
If Then
Veamos algunos ejemplos de If, escritos en una sola lnea:
En esta macro si el valor de la celda A1 es > a 15, entonces la condicin es verdadera (es
decir TRUE) con lo cual se ejecuta la instruccin 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 condicin demandada
con lo cual se ejecuta la primera opcin, en caso de que no sea TRUE (es decir en caso
de que sea FALSE) ejecutamos la segunda instruccin, 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,
lanzaramos un mensaje y despus pondramos 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"
' lanzaramos un mensaje
o bien:
[A1].Interior.ColorIndex = 3
' el fondo de la celda [A1] seria rojo
[A1].Font.Bold = True
' y la celda [A1] estara en negrita
Else
' Si la condicion fuera False
[A1].Interior.ColorIndex = 10 'el fondo de la celda [A1] sera Verde
[A1].Font.Size = 50
' y la fuente tendra tamao 50
End If
End Sub
Macros en Excel

72

Estructuras
Select Case
La instruccin 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
expresin.
La sintaxis de Select Case es:
Select Case expresin_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 Nmero As Variant ' la declaramos como Variant para evitar el error de compilacin que
' obtendramos en el caso de que [A1] fuera texto
Nmero = [A1] ' Inicializa variable.
Select Case Nmero ' Evala Nmero.
Case 1 To 5: MsgBox "Entre 1 y 5" ' Para Ns entre 1 y 5, inclusive
Case 6, 7, 8: MsgBox "Entre 6 y 8" ' Para Ns entre 1 y 5, inclusive
Case 9 To 10: MsgBox "Mayor que 8" ' Para Ns entre 9 y 10, inclusive
Case Else ' Para otros valores.
MsgBox "No est entre 1 y 10"
End Select
End Sub

Si expresin prueba coincide con cualquier lista expresin asociada con una clusula Case, las
instrucciones que siguen a esa clusula Case se ejecutan hasta la siguiente clusula Case o, para la
ltima clusula, hasta la instruccin End Select. El control pasa despus a la instruccin que sigue
a End Select. Si expresin prueba coincide con una expresin de lista expresin en ms de una
clusula Case, slo 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 confirmacin. A nivel de macros, es
importante tenerlos presentes, tal como vemos a continuacin:
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 confirmacin,
' bastar con utilizar la siguiente instruccin:
Application.DisplayAlerts = False
' Con lo cual ahora s podremos borrar la hoja dada sin necesidad de confirmacin
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 accin
que requiere confirmacin. 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 continuacin 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
instruccin mostraramos un saludo:
Sub Saludo()
' Escribimos el mensaje entre comillas
Msgbox "Hola, Excel te saluda!"
End Sub

Por defecto, un Msgbox siempre incluye el botn "Aceptar", el cual hara desaparecer el mensaje y
continuara ejecutando el cdigo restante si lo hubiera. Tambin podemos configurar para que en
lugar del botn "Aceptar" aparezca un botn de "Ok" y "Cancelar" y de acuerdo al que elija el
usuario, la macro continuara con un cdigo u otro cdigo. Esto lo realizamos agregando la
instruccin vbOKCancel, tal como vemos a continuacin:
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 continuara la macro en caso de Cancelar
End If
' si se presion 'Aceptar'
If Respuesta = vbOK Then
MsgBox "Macro caso Aceptar" ' Aqu continuara 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). Bsicamente 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: ttulo del InputBox
Default: valor por defecto al abrir el InputBox (si omitimos no aparecer nada)
Type: indica el tipo de dato a introducir (1 Nmero, 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 continuara 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 instruccin
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
Bsquedas
Para hacer bsquedas (el equivalente a la funcin "buscarv" de Excel) utilizamos la
instruccin 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

Imgenes
Veamos algunas operaciones que podemos realizar con imgenes.
'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 Dinmicas
Algunas macros de inters relacionadas con tablas dinmicas (TD).
'La siguiente macro actualiza una TD automticamente 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