Informática para Economistas
Clase 1
• Reglas de juego del curso
• Introducción al VBA – MS Excel
Entorno de programación
• Definiciones previas:
Módulo de trabajo
Tipos de programas
• Grabando una macro:
Grabador de macros
Referencia Relativa
Ejercicios
Reglas de Juego
• Tres Programas Tres Evaluaciones
• Cada Evaluación tiene dos partes:
– Tarea Grupal:
• Grupos de MÁXIMO 2 personas
• 6 puntos
• Una semana de plazo
– Examen Individual:
• 14 puntos
• Durante período de exámenes o en clase (PC)
• Calendario
• Acceso a Programas
Elementos básicos de VBA
• Visual Basic es un lenguaje de programación visual.
• Visual Basic es un lenguaje basado en objetos. Esto
significa que se dispone de una biblioteca de objetos en
un orden jerárquico. Por ejemplo:
– Un carro ~> motor ~> tuerca
– Application (MS Excel) ~> Workbook ~> hojas ~>
rangos ~> celdas
• A su vez, los Objetos (libros, hojas, selecciones, rangos,
ventanas, gráficos, formularios, informes, etc.) tienen
Propiedades o atributos (formato, estado, etc.) y/o
Métodos (acciones que pueden realizarse con los
objetos).
Cómo acceder al VBA
• Acceso vía barra de menú: Desarrollador / Visual Basic.
• Acceso directo: Alt – F11 o también:
Ventana
de código
Ventana de
explorador
de proyectos
Ventana de
propiedades
Entorno de VBA
Ventanas:
• Explorador de Proyectos: Cada libro abierto en Excel se considera
un proyecto. Un proyecto es una colección de objetos
programables (es el programa que se está desarrollando). En el
nivel superior de la ventana aparece el propio proyecto. En el
siguiente nivel encontramos una carpeta con cada una de las hojas
que componen ese libro. Si además existen módulos de código y
formularios, también se muestran aquí.
• Código: Es la ventana donde editamos las macros para modificar el
código, crearlas de nuevo o borrarlas.
• Propiedades: En esta ventana vemos las propiedades del objeto
seleccionado en el explorador de proyectos.
Barras:
Situadas en la parte superior del entorno, desde ellas se puede
acceder a todas las funcionalidades y ayudas que ofrece el entorno de
desarrollo para trabajar con los proyectos. Por ejemplo, están las
barras de menú y herramientas.
Módulo de trabajo
• Un módulo sirve para agrupar procedimientos y
funciones: zona de programación de comandos.
• Para insertar un módulo active opción del menú
Insertar/ Módulo. Se activará una nueva ventana, si
aparece demasiado pequeña, maximícela.
Tipos de programas
• Programas Macroejecutores : Registra instrucciones
específicas y el orden en que deben ejecutarse. No involucra
toma de decisiones ni la repetición automática de porciones
del programa.
• Programas estructurados: Este tipo de programas introduce
estructuras funcionales, que no pueden ser interpretadas en
la zona de comandos, sino solamente dentro de un programa.
El VBA incluye dos tipos de estructuras funcionales: los bucles
(también llamados repeticiones) y las cláusulas condicionales.
• Programas Modulares: Un nivel de sofisticación adicional en
el desarrollo de programas es la división de la tarea central en
una serie de tareas más sencillas, determinadas de un modo
estratégico.
¿Qué es una macro?
• Una macro es un conjunto de comandos (en VBA)
que se encarga de realizar un serie de tareas
definidas por le usuario.
• Una macro permite acortar el tiempo tratar la
información, ya que permite automatizar:
– Tareas repetitivas
– Criterios de bifucarción
• Se puede distinguir dos formas de programar:
– Utilizando la grabadora de macros.
– Programar en código VB escribiendo instrucciones
directamente sobre el editor.
El grabador de macros
• El grabador de macros nos ayuda a descubrir y
aprender el código de algunos procedimientos cortos
que pueden formar parte de una tarea más larga.
• El grabador de macros no puede hacer tareas
repetitivas, debe listarlas una a una (programa
macroejecutor).
• Típicamente simplificaremos el código extraído a
partir de cualquier grabación que se realice.
• El uso de la grabadora de macros se enmarca
exclusivamente para conocer comandos nuevos, no
para programar de forma directa.
Grabando una macro
• Abrir el archivo: [Link]
• Generar una macro que calcule la suma de las celdas
C14 a C25 en la celda C27:
Sub Macro1()
'
' Macro recorded by ***
'
Range(“C27").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-13]C:R[-1]C)"
Range(“C28").Select
End Sub
• La macro se graba en inglés a pesar de que MS Excel
esté instalado en español.
Grabación de algunas tareas
Macro 1: Abra algún archivo de Excel, luego,
haciendo uso de Guardar Como, grábelo con otro
nombre.
Grabación de algunas tareas
Macro 1: Abra algún archivo de Excel, luego,
haciendo uso de Guardar Como, grábelo con otro
nombre. Usted visualizará algo similar a:
Sub Macro1()
‘
' Macro1 Macro
' Macro recorded by UP
‘
Sub Macro1()
[Link] Filename:="C:\[Link]", UpdateLinks:=0
[Link] Filename:="C:\Mydocuments\[Link]" _
, FileFormat:= xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False ,CreateBackup:=False
End Sub
Grabación de algunas tareas
Note que la macro guarda más comandos de lo
estrictamente necesario, ya que considera todas las
posibles opciones, aún cuando éstas no estén siendo
utilizadas en la macro.
Sin embargo, podemos aprovechar esto para armar un
código según lo que buscamos y para incrementar
nuestro conocimiento de VBA.
Ejercicio
• Sobre la base de la macro anterior cree una nueva
macro que abra la primera tabla de la nota semanal
desde la web del BCR y la guarde en el disco de su PC
con el nombre cuadro1, una contraseña de acceso y
un acceso de solo lectura.
Sub Macro2()
'
' Macro2 Macro
' Macro recorded by UP
'
[Link] Filename:= _
"[Link]
[Link] = False
[Link] Filename:= _
"C:\Documents and Settings\My Documents\[Link]", FileFormat:= _
xlNormal, Password:=“UP", WriteResPassword:="", ReadOnlyRecommended:=True _
, CreateBackup:=False
End Sub
• Pronto, mediante la programación estructurada
podremos repetir esta acción para descargar todos
los cuadros de la Nota Semanal a nuestra PC con un
solo clic.
Referencia relativa
• Existen dos tipos de referencia en la grabadora de
macros:
Absoluta: La referencia a la celda o rango que está
utilizando para la tarea que está grabando es
directa y aparece textualmente en el código VBA.
Relativa: La referencia a la celda o rango que está
utilizando para la tarea que está grabando se
genera de forma relativa al rango en donde se
inició la grabación.
• Por defecto, cuando MS Excel graba una macro, las
referencias de los rangos son absolutas.
Referencia relativa
• Por ejemplo, grabe una macro que registre el
movimiento de la celda B4 a la fila siguiente (o sea,
B5). Debería aparecer algo similar a lo siguiente:
• En este caso, no es posible utilizar esta macro en
otro rango distinto a B5; es decir, la macro siempre
va a seleccionar la celda B5.
Referencia relativa
• Active la referencia relativa y realice el mismo
ejercicio:
• En este caso, si es posible utilizar esta macro en otro
rango pues el movimiento que realiza es relativo a la
celda inicial (o celda activa, ActiveCell). Por ende, al
ejecutar la macro, siempre realiza un movimiento
hacia la fila inferior y no hacia la celda B5.
Referencia relativa
Grabe una macro en la que se listan los rubros de un estado de PyG
simplificado (Ingresos, Costos, Utilidad Bruta, Impuestos, Utilidad Neta).
Con Ref. Absolutas Con Ref. Relativas
Referencia relativa
Grabe una macro en la que se listan los rubros de un estado de PyG
simplificado (Ingresos, Costos, Utilidad Bruta, Impuestos, Utilidad Neta).
Con Ref. Absolutas Con Ref. Relativas
Sub Macro4() Sub Macro5()
Range("A1").Select ActiveCell.FormulaR1C1 = "Ingresos“
ActiveCell.FormulaR1C1 = "Ingresos" [Link](1, 0).Range("A1").Select
Range("A2").Select ActiveCell.FormulaR1C1 = "Costos"
ActiveCell.FormulaR1C1 = “Costos" [Link](1, 0).Range("A1").Select
Range("A3").Select ActiveCell.FormulaR1C1 = "utilidad bruta"
ActiveCell.FormulaR1C1 = "Utilidad bruta" [Link](1, 0).Range("A1").Select
Range("A4").Select ActiveCell.FormulaR1C1 = "impuestos"
ActiveCell.FormulaR1C1 = "Impuestos" [Link](1, 0).Range("A1").Select
Range("A5").Select ActiveCell.FormulaR1C1 = "utilidad neta"
ActiveCell.FormulaR1C1 = "Utilidad neta" [Link](1, 0).Range("A1").Select
Range("A6").Select
End Sub
End Sub
La segunda forma puede simplificarse aún más con un
mejor uso de Offset…
Simplificando el código anterior
Sub Macro5A()
[Link](0, 0) = “Ingresos”
[Link](1, 0) = “Costos”
[Link](2, 0) = “Utilidad Bruta”
[Link](3, 0) = “Impuestos”
[Link](4, 0) = “Utilidad Neta”
End Sub
O inclusive aún más utilizando la instrucción With/End With
Sub Macro5B()
With ActiveCell
.Offset(0, 0) = "Ingresos"
.Offset(0, 1) = "Costos"
.Offset(0, 2) = “Utilidad Bruta "
.Offset(0, 3) = “Impuestos"
.Offset(0, 4) = “Utilidad Neta"
End With
End Sub
Referencia relativa - Ejercicio
Copiando tablas
Grabe una macro que permita copiar las 20 tablas
de la hoja “Pregunta1a” a la hoja “Pregunta1b”,
pero de modo que se incluya de cada tabla
únicamente las filas que contienen información de
cotizaciones (es decir, que no muestran un guión "-
"). La macro debe grabarse de tal forma que pueda
replicarse con la misma combinación de teclas de
forma sucesiva e ininterrumpida.
Anexo:
Operadores Básicos
Operadores básicos (1)
Operadores básicos (2)