1. Visual Basic para Aplicaciones (VBA) en
Excel: aspectos elementales
Franco Guidi Polanco
Escuela de Ingeniería Industrial
Pontificia Universidad Católica de Valparaíso, Chile
fguidi@ucv.cl
Introducción
Una “macro” es una secuencia de instrucciones
que automatiza alguna tarea.
Una macro puede ser ejecutada repetidas veces.
Las macros pueden ser creadas de dos formas:p
Automáticamente, “grabando” una secuencia de
operaciones (más fácil, pero más limitado).
Manualmente, escribiendo una a una las instrucciones
(más complejo, pero más flexible).
17/11/10Franco Guidi Polanco 2
Para iniciar (Office 2007)
Desplegar “ficha de
programador” en cinta de
iopciones
17/11/10Franco Guidi Polanco 3
Barra de herramientas (Office 2007)
Ficha del programador
17/11/10Franco Guidi Polanco 4
2. Seguridad de macros (Office 2007)
17/11/10Franco Guidi Polanco 5
Guardado de archivos en Office 2007
El guardado de planillas que contienen macros
debe hacerse en archivos “con macros
habilitadas”, de extensión XLSM.
17/11/10Franco Guidi Polanco 6
Tipos de macros en VBA
Subrutinas (“VBA sub procedures”): comandos que
realizan tareas.
Funciones (“VBA functions”): retornan un valor,
como las funciones integradas de Excel. Pueden
ser utilizadas por otras funciones o subrutinas, o
directamente desde una celda de una planilla.
17/11/10Franco Guidi Polanco 7
Escritura de código en VBA
Se debe ingresar a la “ventana del editor de VBA”
(oprimir botón Visual Basic en ficha del
programador, o ALT-F11).
El editor de VBA es otra aplicación, pero opera
integradamente con Excel.
17/11/10Franco Guidi Polanco 8
3. Vista del Editor VBA
17/11/10Franco Guidi Polanco 9
Inserción de un módulo
Oprimir botón derecho sobre ventana de proyecto
y seleccionar Insertar - Módulo
17/11/10Franco Guidi Polanco 10
Código en un módulo
17/11/10Franco Guidi Polanco 11
Sub proceduresSub procedures
17/11/10Franco Guidi Polanco 12
4. Identificación de Sub procedures
Comienzan con la palabra Sub y terminan con
End Sub .
Se identifican por un nombre (seguido de
paréntesis)
Ejemplo:
Paréntesis
(siempre van)
Nombre
Sub
procedure (siempre van)
Inicio Sub
procedure
procedure
Fin Sub
17/11/10Franco Guidi Polanco 13
Fin Sub
procedure Instrucciones
de Sub procedure
Ejecución de Sub procedures
Botón ejecutar en editor de VBA
En Excel: Herramientas – Macro - EjecutarEn Excel: Herramientas Macro Ejecutar
Elementos básicos de cualquier programa
(incluyendo Sub procedures)
Tipos de
datos Estructurasdatos,
variables y
operadores
de control
Sub procedure
p
Instrucciones
Expresiones
Instrucciones
elementales
17/11/10Franco Guidi Polanco 15
Variables
Cada variable se identifica por su nombre (recomendable
que sea significativo).
El nombre de una variable puede contener casi cualquier
letra o símbolo, pero debe comenzar siempre por una letra.
No se deben usar espacios ni comas como parte de unNo se deben usar espacios ni comas como parte de un
nombre de variable, como tampoco los símbolos: #, $, %,
& o !, ni operadores aritméticos.
Por ejemplo:
edad, cantidad_asistentes, NivelLiquido, GASTOS
No hay distinción entre mayúsculas y minúsculas, por lo
tanto los identificadores: balanceFinal, BalanceFinal y
BALANCEFINAL hacen referencia a la misma variable.
17/11/10Franco Guidi Polanco 16
5. Variables y el operador de asignación
VBA, por omisión, crea automáticamente
variables cuando encuentra en el código un
identificador válido.
Para asignar un valor a una variable se debe
utilizar el operador de asignación.
Operador
asignación
Lado izquierdo Lado derecho
identificador_variable = valor
17/11/10Franco Guidi Polanco 17
(receptor) (valor a asignar)
Variables y tipos de datos
Si las variables son creadas automáticamente, el
tipo de dato que almacenan depende del valor
asignado:
Si se asigna un número la variable será numérica y se
d á li ll i it étipodrán realizar con ella operaciones aritméticas.
dato = 100
Si se asigna un texto (que no represente un número) no
se podrán realizar operaciones numéricas Los textosse podrán realizar operaciones numéricas. Los textos
deben escribirse siempre entre comillas dobles (“”).
d “ l ”
17/11/10Franco Guidi Polanco 18
dato = “Hola”
Variables y tipos de datos
Caso particular:
Si una variable recibe como valor un texto queq
representa a un número, entonces con esa variable sí se
pueden realizar operaciones aritméticas.
dato = “100”
17/11/10Franco Guidi Polanco 19
Operadores aritméticos
Los argumentos de los operadores aritméticos son
valores numéricos (números o variables
numéricas) y generan como resultado un número.
Operadores:
Suma: +
Resta: -
l l ó *Multiplicación: *
División: /
División entera: División entera:
Elevación a potencia: ^
17/11/10Franco Guidi Polanco 20
6. Operadores relacionales
Los operadores relacionales permiten comparar
valores en expresiones. Generan como resultado
un valor lógico (verdadero o falso).
Operadores relacionales:
Mayor: >
Menor: <
lMayor o igual: >=
Menor o igual: <=
Igual: =Igual: =
17/11/10Franco Guidi Polanco 21
Operadores lógicos
Los argumentos de operadores lógicos son valores
lógicos y generan como resultado otro valor lógico.
Operadores lógicos (existen otros):p g ( )
And: conjunción
Or: disyunción
Not: negación
17/11/10Franco Guidi Polanco 22
Operador de concatenación
Se utiliza para concatenar dos cadenas de
caracteres:
& (ampersand)
Ejemplo:
“Hola” & “Mundo” “HolaMundo”
nombre = “Hola”
nombre & “Mundo” “HolaMundo”
17/11/10Franco Guidi Polanco 23
Expresiones
Aritméticas: generan como resultado un número.
Ejemplo:
(3 * 4) / 5
Lógicas: generan como resultado un valor lógico
(se utilizan generalmente como condiciones).
Ejemplo:
Edad > 18
(Edad > 18) And (Edad < 25)
(Valor <> 8) Or (Numero = 3) Or (Numero < 0)( ) ( ) ( )
7. Instrucciones elementales
Para ingreso de datos mediante un cuadro de
diálogo:
InputBox( texto a desplegar )
Para despliegue de resultados mediante cuadro de
diálogo:
MsgBox texto a desplegar
17/11/10Franco Guidi Polanco 25
Instrucciones elementales
Pedro
Instrucciones elementales
Para convertir valor a entero (importante en el
ingreso de datos):
CInt( valor )
Importante: Toda vez que el usuario ingresep q g
valores que se suponen enteros, utilizaremos CInt
para convertir el valor leído a entero, a fin de
d ó devitar errores de precisión, propios de otros tipos
de valores.
Ej lEjemplo:
edad = InputBox( “Ingrese edad” )
edad = CInt(edad)
17/11/10Franco Guidi Polanco 27
Instrucciones elementales
Para redondear valores:
Round( valor, decimales)ou d( valo , decimales)
Ejemplo:Ejemplo:
Round( 1234.567 , 1) 1234.6
8. Estructuras de control: Secuencia
Las instrucciones se escriben línea por línea.
Si se desea escribir una instrucción en más de unaSi se desea escribir una instrucción en más de una
línea, se debe utilizar el guión bajo ( _ ) que indica
la continuación en la línea siguiente.
17/11/10Franco Guidi Polanco 29
Estructuras de control: Decisión
Determina el curso de acción a seguir dependiendo
del valor de verdad de una condición.
If condición Then
acciones si condición es verdaderaacciones si condición es verdadera
Else
acciones si condición es falsaacciones si condición es falsa
Endif
17/11/10Franco Guidi Polanco 30
Estructuras de control: Decisión
Ejemplo: programa que pide al usuario una nota. Si la nota
es igual o superior a cuatro, escribe APROBADO, en caso
t i ib REPROBADOcontrario escribe REPROBADO.
17/11/10Franco Guidi Polanco 31
Ejemplo
Determinar si un número ingresado es o no par:
9. Estructuras de control: Iteración
Realiza iteraciones mientras una condición es
verdadera.
Do While condición
instrucción 1instrucción 1
instrucción 2
…
Loop
17/11/10Franco Guidi Polanco 33
Estructuras de control: Iteración
Construir un procedimiento que calcule la suma de
los N primeros enteros, con N proporcionado por
el usuario.
17/11/10Franco Guidi Polanco 34
Interacción entre VBA y hojas de cálculoInteracción entre VBA y hojas de cálculo
17/11/10Franco Guidi Polanco 35
Objetos en VBA para Excel
Representan documentos o partes de un
documento de Excel, para acceder y/o modificarlos
desde VBA.
Por ejemplo, un objeto de tipo Range representa
celdas de un documento y permite leer y alterar
los valores guardados en ellas.
17/11/10Franco Guidi Polanco 36
10. Principales objetos de VBA en Excel
Applicationpp
(Excel)
Workbooks
(Libro)
Worksheets
(Hoja)
Range
(Hoja)
17/11/10Franco Guidi Polanco 37
(Celdas)
Uso de referencias a objetos
Usando referencias a objetos se pueden acceder a datos en
planillas de Excel.
A l bj tAcceso a los objetos:
a) Acceso a un Libro:
Application.Workbooks(“Ejemplo.xlsm”)Application.Workbooks( Ejemplo.xlsm )
b) Acceso a una Hoja de un Libro:
Application.Workbooks(“Ejemplo.xlsm”).Worksheets(“Ingresos”)pp ( j p ) ( g )
c) Acceso a un Rango (celda) dentro de una Hoja de un Libro:
Application.Workbooks(“Ejemplo.xlsm”).Worksheets(“Ingresos”).Range(“C2”)pp ( j p ) ( g ) g ( )
d) Acceso a un Valor de un Rango (celda) dentro de una Hoja
de un Libro:
Application.Workbooks(“Ejemplo.xlsm”).Worksheets(“Ingresos”).
Range(“C2”).Value
17/11/10Franco Guidi Polanco 38
Uso de referencias a objetos (por omisión)
Se puede omitir la referencia Application:
Workbooks(“Ejemplo.xlsm”).Worksheets(“Ingresos”).Range(“C2”)( j p ) ( g ) g ( )
.Value
l f kb k bSi se omite la referencia Workbooks se asume Libro
actual:
Wo ksheets(“Ing esos”) Range(“C2”) Val eWorksheets(“Ingresos”).Range(“C2”).Value
Si se omite la referencia Worksheets se asume HojaSi se omite la referencia Worksheets se asume Hoja
de trabajo actual:
Range(“C2”).ValueRange( C2 ).Value
17/11/10Franco Guidi Polanco 39
Acceso a celdas mediante Range
Range permite acceder a celdas en planillas,
mediante el ingreso de las coordenadas de las
celdas. Ejemplo:
17/11/10Franco Guidi Polanco 40
11. Acceso mediante Cells
Cells permite el acceso a celdas de planillas
mediante la especificación de sus coordenadas.
Ejemplo:
Uso combinado de Range y Cells para acceder a
celdas de planillas
Ejemplo
Un Sub Procedure que escribe en una planilla la
tabla del 2:
Ejemplo (cont.)
Código:
12. Ejemplo 2
Un programa que escribe la tabla de multiplicar
correspondiente al número ingresado en la celda
A1 (la tabla empieza a desplegarse desde la línea
3 en adelante)
Ejemplo 2 (cont.)
Código:
Cells y Value
Para acceder a un valor en una celda o modificar
el valor existente, se puede omitir la especificación
de la propiedad Value al utilizar Cells:
Es lo mismo:
Cells(i,j).Value = 10
Cells(i,j) = 10
Como también:
x = Cells(i,j).Value
x = Cells(i,j)x Cells(i,j)
17/11/10Franco Guidi Polanco 47