You are on page 1of 31

Macros en Excel con VBA

Ing. Enrique Alfaro


Ing. Enrique Alfaro 12/08/2021
2

¿Por qué usar VBA en Excel 2010?


Microsoft Excel 2010 es una herramienta muy eficaz
que se puede usar para manipular, analizar y
presentar datos. A veces, no obstante, a pesar del
amplio conjunto de características que ofrece la
interfaz de usuario (UI) estándar de Excel, es posible
que se desee encontrar una manera más fácil de
realizar una tarea repetitiva y común, o de realizar
alguna tarea no incluida en la interfaz de usuario.
Afortunadamente, las aplicaciones de Office, como
Excel, tienen Visual Basic para Aplicaciones (VBA),
un lenguaje de programación que brinda la
posibilidad de ampliar dichas aplicaciones.
Ing. Enrique Alfaro 12/08/2021
3

¿Por qué usar VBA en Excel 2010?


VBA funciona mediante la ejecución de macros ,
procedimientos paso a paso escritos en Visual Basic.
Aprender a programar podría parecer intimidante,
pero con algo de paciencia y algunos ejemplos, como
los que se incluyen en este curso, muchos usuarios
encuentran que conocer aunque sea una pequeña
parte del código de VBA facilita su trabajo y les
brinda la posibilidad de ejecutar tareas en Office que
antes creían imposibles de realizar. Si se adquieren
algunos conocimientos sobre VBA, resultará mucho
más sencillo seguir aprendiendo, y las posibilidades
de que hacer son ilimitadas.
Ing. Enrique Alfaro 12/08/2021
4

¿Por qué usar VBA en Excel 2010?

Sin duda, la razón más frecuente por la cuál se usa


VBA en Excel es para automatizar tareas repetitivas.
Por ejemplo, suponga que tiene docenas de libros con
docenas de hojas de cálculo y necesita realizar
cambios en cada uno de ellos. Los cambios podrían
ser tan simples como aplicar formato nuevo a algún
rango fijo de celdas, o bien tan complejos como
buscar algunas características estadísticas de los
datos en cada hoja, elegir el mejor tipo de gráfico
para mostrar datos con esas características y, a
continuación, crear y dar formato al gráfico en
consecuencia.
Ing. Enrique Alfaro 12/08/2021
5

¿Por qué usar VBA en Excel 2010?


VBA no es útil solo para tareas repetitivas. También
puede usar VBA para crear nuevas funcionalidades en
Excel (por ejemplo, puede desarrollar nuevos algoritmos
para analizar datos y, a continuación, usar las
funcionalidades de gráficos de Excel para mostrar los
resultados) y realizar tareas que integren Excel con otras
aplicaciones de Office, como Microsoft Access 2010. De
hecho, de todas las aplicaciones de Office, Excel es la
más usada como algo similar a una plataforma de
desarrollo general. Además de todas las tareas obvias
que implican listas y contabilidad, los programadores
usan Excel en una amplia variedad de tareas, desde
visualización de datos hasta prototipos de software.
Ing. Enrique Alfaro 12/08/2021
6

Uso de código para hacer que las aplicaciones


realicen las tareas
Quizá crea que escribir código es algo misterioso o
complicado, pero sus principios básicos usan la
lógica diaria y son bastante accesibles. Las
aplicaciones de Office 2010 están creadas de tal
modo que exponen lo que se denomina objetos. Estos
objetos reciben instrucciones. Para interactuar con
las aplicaciones, se envían instrucciones a varios
objetos de la aplicación. Los objetos, si bien son
variados y flexibles, tienen sus límites. Solo pueden
hacer aquello para lo que fueron diseñados y solo
harán lo que se les indique que hagan.
Ing. Enrique Alfaro 12/08/2021
7

Objetos

Los objetos de programación se relacionan


entre sí sistemáticamente en una jerarquía
denominada modelo de objetos de la
aplicación. El modelo de objetos básicamente
refleja lo que se ve en la interfaz de usuario.
Por ejemplo, el modelo de objetos de Excel
contiene los objetos Application,
Workbook, Sheet y Chart, entre muchos
otros. El modelo de objetos constituye el mapa
conceptual de la aplicación y sus
funcionalidades.
Ing. Enrique Alfaro 12/08/2021
8

Propiedades y métodos

Es posible manipular objetos al establecer


sus Propiedades y llamar a sus métodos. Si
se establece una propiedad, se producen
algunos cambios en la calidad del objeto. Si
se llama a un método, se logra que el objeto
realice una determinada acción. Por
ejemplo, el objeto Workbook tiene un
método Close que cierra el libro y una
propiedad ActiveSheet que representa la
hoja activa del libro.
Ing. Enrique Alfaro 12/08/2021
9

Colecciones

Varios objetos vienen en las versiones


singular y plural; por ejemplo, libro y libros,
hoja de cálculo y hojas de cálculo. Las
versiones en plural se denominan
colecciones. Los objetos de una colección
se usan para realizar una acción en varios
elementos de esa colección. Más adelante, en
este artículo, se explicará cómo usar la
colección Worksheets para cambiar el
nombre de cada hoja de cálculo de un libro.
Ing. Enrique Alfaro 12/08/2021
10

Macros y el Editor de Visual Basic

Luego de conocer teóricamente en parte cómo


Microsoft Excel 2010 expone su modelo de
objetos, puede intentar llamar a los métodos
de un objeto y establecer las propiedades del
objeto. Para hacerlo, debe escribir el código en
un lugar y de una manera que Office pueda
comprender; generalmente, mediante el uso
del Editor de Visual Basic. Aunque se instala
de forma predeterminada, muchos usuarios ni
siquiera saben que está disponible hasta que
no se habilita en la cinta de opciones.
Ing. Enrique Alfaro 12/08/2021
11

Ficha Programador

 Todas las aplicaciones de Office 2010 usan la cinta de


opciones. La ficha Programador es una de las fichas
incluidas en la cinta de opciones, donde se puede tener acceso
al Editor de Visual Basic y a otras herramientas de
programador. Debido a que Office 2010 no muestra la ficha
Programador de manera predeterminada, debe habilitarla
mediante el siguiente procedimiento:
1. Ficha Archivo
2. Opciones
3. Personalizar cinta de opciones
4. Activar la casilla «Programador» y <Aceptar>
Ing. Enrique Alfaro 12/08/2021
12

Problemas de seguridad
 Haga clic en el botón de Seguridad de macros para
especificar qué macros pueden ejecutarse y en qué
condiciones. Aunque el código de macros de sistemas no
confiables puede dañar gravemente el equipo, las condiciones
de seguridad que impiden ejecutar macros útiles pueden
disminuir en gran medida la productividad. Si la barra
Advertencia de seguridad: las macros se han
deshabilitado aparece entre la cinta de opciones y el libro,
cuando abre un libro que contiene una macro, puede hacer
clic en el botón Habilitar contenido para habilitar las
macros.
 Además, como medida de seguridad, no puede guardar una
macro en el formato de archivo predeterminado de Excel
(.xlsx); debe guardar la macro en un archivo con extensión
especial (.xlsm).
Ing. Enrique Alfaro 12/08/2021
13

Problemas de Seguridad
mi primera Macro
• Editor de Visual Basic
▫ Alt+F11
▫ Barra de Herramientas: Visual Basic
▫ Herramientas, Macro, Editor de
V.B.
• Insertar Módulo

Sub Bienvenido1()
msgBox “Hola a todos"
End Sub

Sub Bienvenido2()
ActiveCell.Value = “Hola a
todos"
End Sub
Ing. Enrique Alfaro 12/08/2021
15

Uso de la grabadora de macros

A veces una simple macro grabada es todo lo que se


necesita; en estos casos, incluso, no es necesario mirar el
código. Por lo general, la grabación por sí sola no es
suficiente, pero sí, un punto de inicio en el proceso
automatizado para la solución de su problema.
Para usar la grabadora de macros como punto de
inicio de la solución
1. Grabe las acciones que desea codificar.
2. Revise el código y busque las líneas que realizan esas
acciones.
3. Elimine el resto del código.
4. Modifique el código grabado.
5. Agregue variables, estructuras de control y otro código
que la grabadora de macros no pueda grabar.
Ing. Enrique Alfaro 12/08/2021
16

OBJETO RANGE, SELECCIÓN CELDAS

SELECCIONAR UNA CELDA


Range(“B5”).select

SELECCIONAR VARIAS CELDAS


Range(“B7:C20”).select

SELECCIONAR CELDAS CONTIGUAS DE UNA LISTA


(De izquierda a derecha y hacia abajo)
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
(De abajo hacia arriba y a la izquierda)
Range(Selection, Selection.End(xlUp)).Select
Range(Selection, Selection.End(xlToLeft)).Select
Ing. Enrique Alfaro 12/08/2021
17

OBJETO RANGE, SELECCIÓN CELDAS

IR AL FINAL DE CELDAS SELECCIONADAS O


DETENERSE EN UNA CELDA CON DATOS
Selection.End(xlDown).Select

IR A UNA CELDA DEBAJO DE LA ACTIVA


 ActiveCell.Offset(1, 0). Select

ESCRIBIR EN UNA CELDA


 Range(“A5").Value = "SENATI pni"
Ing. Enrique Alfaro 12/08/2021
18

OBJETO RANGE, SELECCIÓN CELDAS

ESCRIBIR EN UNA CELDA A UNA DISTANCIA


RELATIVA A LA CELDA ACTIVA
Range(“A5").Select
ActiveCell.Range(“A1").Value = "Trujillo"
ActiveCell.Range(“B2").Value = "La Libertad"
Ing. Enrique Alfaro 12/08/2021
19

OBJETO RANGE, SELECCIÓN CELDAS

ESCRIBIR EL MISMO DATO EN UN RANGO


DE CELDAS
Range("A1:B10").Value="Perú"

ESCRIBIR EN LA CELDA TRES ABAJO Y UNA


A LA DERECHA DE LA CELDA ACTIVA
ActiveCell.Cells(4,2).Value="Excel"
recuerde que lo anterior es lo mismo que:
ActiveCell.Range("B4").Value = "Excel"
y lo mismo que:
ActiveCell.Offset(3, 1).Value = "Excel"
Ing. Enrique Alfaro 12/08/2021
20

OBJETO RANGE, SELECCIÓN CELDAS

ESCRIBIR UN DATO EN UNA CELDA


ABSOLUTA UTILIZANDO CELLS(N)
Cells(32769).Value = "Fácil"
Nota: CELLS Cuenta desde la celda A1 como 1, B1 como 2, C1 como 3….
XFD1 como 16384. Es decir de izquierda a derecha a partir de la celda A1 sin
importar la celda activa.

ESCRIBIR EN UNA CELDA RELATIVA A UN


RANGO SELECCIONADO
Range("A1:D5").Select
Selection.Interior.Color = RGB(200, 200, 200)
Selection.Cells(6) = "123"
Cells(1).Select
Ing. Enrique Alfaro 12/08/2021
21

Cells(1) Cells(2)

Cells(5) Cells(6)
Ing. Enrique Alfaro 12/08/2021
22

TRATAMIENTO DE HOJAS

NOMBRAR HOJA
Sheets(1).Name = “BaseDatos“
Sheets(2).Name = “Consolidados“
Sheets(3).Name = “Gráficos“

AGREGAR HOJA (siempre se agrega antes de la hoja


activa en Excel 2010)
Sheets.Add

ACTIVAR UNA HOJA


Sheets(n).Activate o Sheets(n).Select
Sheets("Peru").Select 'activa Peru si existe
Ing. Enrique Alfaro 12/08/2021
23

TRATAMIENTO DE HOJAS

MOVER LA HOJA ACTIVA AL FINAL


ActiveSheet.Move after:=Sheets(Sheets.Count)

Nota: Sheets.Count devuelve un valor entero que es


igual al total de hojas.

NOMBRAR LA PENULTIMA HOJA


Sheets(Sheets.Count-1).Name=“etiqueta”

ELIMINAR LA ULTIMA HOJA


Sheets(Sheets.Count).Delete
Ing. Enrique Alfaro 12/08/2021
24

TRATAMIENTO DE HOJAS

Pregunta  ¿Que realiza la siguiente línea de


código?:
MsgBox (“La ultima hoja se llama" & chr(13) _
&Sheets(Sheets.Count).Name)

COPIAR UNA HOJA EN EL LIBRO ACTIVO


Ejemplo: Reemplazar la Hoja1 con el nombre de la
hoja a ser copiada (Uso de After o Before)
'Duplicar la hoja2 a la derecha
Sheets(2).Copy After:=Sheets(2)
Sheets(2).Name=“Copia”
Ing. Enrique Alfaro 12/08/2021
25

TRATAMIENTO DE HOJAS

COPIA LA HOJA ACTIVA ANTES DE LA HOJA1


ActiveSheet.Copy Before:=Sheets(1)

COPIA LA PRIMERA HOJA AL FINAL


Sheets(1).Copy After:=Sheets(Sheets.Count)

COPIA LA PRIMERA HOJA DE UN LIBRO


ABIERTO A OTRO LIBRO ABIERTO
Workbooks("Libro1.xlsm").Sheets(1).Copy _
After:=Workbooks("Libro2.xlsx").Sheets(1)
Ing. Enrique Alfaro 12/08/2021
26

TRATAMIENTO DE HOJAS

INSERTAR UNA HOJA AL FINAL


Sheets.Add After:=Sheets(Sheets.Count)

VISTA PRELIMINAR DE LAS HOJAS


SELECCIONADAS
ActiveWindow.SelectedSheets.PrintPreview

SELECCIONAR 3 HOJAS
Sheets(Array("Hoja1", "Hoja2", "Hoja3")).Select
Tambien puede ser lo mismo:
Sheets(Array(Sheets(1).Name, Sheets(2).Name,
Sheets(3).Name)).Select
Ing. Enrique Alfaro 12/08/2021
27

APLICAR BORDES A UNA LISTA COMPLETA


Ojo: Partir ubicándose en la celda superior izquierda de la lista

Sub Seleccionarlista()
 Range(Selection, Selection.End(xlToRight)).Select
 Range(Selection, Selection.End(xlDown)).Select
 Call aplicarbordes
End Sub
______________________________________________
Sub aplicarbordes()
 Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous
 Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
 Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous
 Selection.Borders(xlEdgeRight).LineStyle = xlContinuous
 Selection.Borders(xlInsideVertical).LineStyle = xlContinuous
 Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous
 'Selection.Borders(xlDiagonalUp).LineStyle = xlNone
 'Selection.Borders(xlDiagonalDown).LineStyle = xlNone
 ActiveCell.Offset(0, -1).Range("B1").Select
End Sub
Ing. Enrique Alfaro 12/08/2021
28

Ejercicio propuesto
 Crear una lista de 12 Celdas
 En la hoja 3 de un nuevo libro
 La celda esquina superior izquierda es B4
 La lista tendrá 4 columnas
 Los titulos serán: "Items","Enero","Febrero" y "Marzo"
 Los títulos tendran relleno Celeste, letras azules
 Toda la lista tendrá borde delgado de color Rojo.
 La 1ra columna de Items tendrá los datos: "Trujillo" y "Virú"
 Repetir el dato "100" en las otras celdas de la lista.
Ing. Enrique Alfaro 12/08/2021
29

Un posible ejemplo de solución del ejercicio (1/2)


Sub ejercicioDomingo14112010()
 Range("B4").Select
 ActiveCell.Value = "Items"
 ActiveCell.Offset(0, 1).Value = "Enero"
 ActiveCell.Offset(0, 2).Value = "Febrero"
 ActiveCell.Offset(0, 3).Value = "Marzo"
 ActiveCell.Offset(1, 0).Value = "Trujillo"
 ActiveCell.Offset(2, 0).Value = "Virú"
 ActiveCell.Offset(1, 1).Select
 ActiveCell.Range("A1:C2").Select
 Selection.Value = "100"
 Range("B4").Select
 Call aplicarformato
 Range("B4:E4").Select
 Selection.Interior.Color = RGB(0, 0, 255)
 Selection.Font.Color = RGB(0, 255, 255)
 Cells(1).Select
End Sub
……………..continúa
Ing. Enrique Alfaro 12/08/2021
30

Un posible ejemplo de solución del ejercicio (2/2)


Sub aplicarformato()
‘Seleccionar rango a la derecha (Ctrl+Shift+Dcha.)
 Range(Selection, Selection.End(xlToRight)).Select
‘Seleccionar rango abajo (Ctrl+Shift+ABAJO.)
 Range(Selection, Selection.End(xlDown)).Select
 ‘Aplicar borde y color simple a todas las celdas seleccionadas
 Selection.Borders.LineStyle = xlContinuous
 Selection.Borders.Color = RGB(255, 0, 0)
End Sub
Ing. Enrique Alfaro 12/08/2021
31

Ahorrando código con With … End With

Sub ej2()
 'a partir de la activación de la celda superior
izquierda
 Range(Selection, Selection.End(xlToRight)).Select
 Range(Selection, Selection.End(xlDown)).Select
 'Aplicar bordes a todas las celdas interior y exterior
 With Selection.Borders
 .LineStyle = xlDash
 .Weight = xlMedium
 .Color = RGB(255, 50, 10)
 End With
End Sub

You might also like