Академический Документы
Профессиональный Документы
Культура Документы
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
Todos los derechos reservados. Ninguna parte de esta publicacin debe ser
reproducida, almacenada en sistema alguno o transmitido por otro medio electrnico,
mecnico, fotocopiador, registrador, etc.- sin permiso previo por escrito del autor.
CONTENIDO
Qu podemos realizar con una macro?..............................................................................................................4
Estructuracin del lenguaje de programacin......................................................................................................5
Cmo empezar a realizar una macro....................................................................................................................7
Simplificacin de tareas frecuentes: grabar una macro simple..........................................................................11
Utilizar la macro que ha creado..........................................................................................................................13
Ejecutar la macro desde el men Herramientas.................................................................................................13
Crear un botn en la barra de herramientas que ejecute la macro......................................................................13
Asignar una combinacin de teclas para ejecutar la macro................................................................................14
Ejecutar una macro.............................................................................................................................................14
Ejecutar una macro.............................................................................................................................................15
Ejecutar una macro presionando una combinacin de teclas de mtodo abreviado con CTRL.........................16
Ejecutar una macro haciendo clic en un botn de la barra de herramientas de acceso rpido...........................17
Ejecutar una macro haciendo clic en un rea de un objeto grfico....................................................................18
Ejecutar automticamente una macro al abrir un libro.......................................................................................19
Crear una macro Auto_abrir...............................................................................................................................20
Crear un procedimiento de VBA para el evento Open de un libro.....................................................................22
Entendiendo el cdigo........................................................................................................................................24
Modificando cdigos: Un ejemplo sencillo.......................................................................................................26
Ejemplo prctico No. 1: Impresin de recibos foliados.....................................................................................29
El ciclo Do While...............................................................................................................................................34
Caso prctico No. 1. Clculo de horas trabajadas a la semana...........................................................................35
Caso Prctico No. 2. Clculo de la utilidad promedio de una empresa..............................................................36
Caso prctico No. 3. Combinaciones.................................................................................................................36
Una macro la podemos definir como un programa dentro de la propia hoja de clculo que
nos automatiza una serie de trabajos: una macro nos podr, por ejemplo, hacer una
impresin de forma automtica, sin tener que definir cada vez una base de datos, si sta la
modificamos peridicamente. No deberemos definir cada vez ms rangos, ni grficos
cuando varen. La macro lo har por nosotros, y as otros trabajos o proyectos que se
abordarn a lo largo de este curso.
Como quiera que la teora de ir viendo una a una la gran cantidad de instrucciones de Visual
Basic adaptadas a la hoja de Excel puede ser pesada, la mejor forma de entenderlas es con
ejemplos prcticos como se ir desarrollando a lo largo del curso con ejemplos ilustrativos
para ver cmo funciona una determinada instruccin y cmo se debe construir para que
funcione correctamente. De esta forma, el usuario aplica los conocimientos de forma
prctica y gradual.
Todas las palabras que se van a utilizar en la programacin las podemos agrupar en los
siguientes grupos:
FUNCIONES: Al igual que las utilizadas en la hoja de clculo, nos devolvern una
serie de caractersticas de variables, datos, hora, texto, etc.
MTODOS: Palabras que utilizaremos para indicar a la hoja cmo debe realizar
determinados trabajos, como abrir hojas, clculos, etc.
OBJETOS: Sern las que utilizaremos para estructurar objetos de la hoja, como
grficos, tablas dinmicas, barras de mens, etc.
PROPIEDADES: Utilizadas para definir las de un determinado objeto, hoja, botn,
color, etc.
trabajo con Excel. Las macros son un grupo de instrucciones programadas bajo en torno
VBA (Visual Basic para Aplicaciones), cuya tarea principal es la automatizacin de tareas
repetitivas y la resolucin de clculos complejos.
Una vez realizado el cdigo VBA, podemos ejecutar el programa mediante la creacin de
botones, nuevos mens, herramientas, etc.- de tal forma que la aplicacin creada resulte
intuitiva y de fcil manejo. Las Macros en Excel se escriben siempre en Visual Basic y las
instrucciones son en ingls, no hace falta ser un experto en esta lengua, slo se requieren
algunos conocimientos bsicos.
Antes de inicializar el trabajo de construccin de una macro y grabar los pasos que se
realizan para llevar a cabo una determinada tarea, debemos primeramente instalar la Ficha
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
7
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
Una vez instalada la ficha programador en la cinta de opciones lo podemos comprobar donde est
ubicada esta pestaa:
Con todos estos pasos realizados, ya dispondr el lector de la pestaa que le permitir grabar
macros y tambin el resto de las opciones para modificarlas.
Existe en la parte inferior de la hoja un botn que permite, sin tener activada la pestaa
Programador, grabar macros. En el grfico siguiente se puede ver. Bastar con hacer clic sobre l
para que se abra tambin la ventana de grabacin de la macro donde podemos asignarle un nombre.
Para poder editar cualquier macro o simplemente ver cmo est construida o construir una
nueva directamente, se deber ir a la ventana de Visual Basic, esta se llama con el botn
que se halla en la pestaa del Programador.
La ventana de Visual Basic es la siguiente, la cual es igual en las versiones desde la97 hasta
la 2007:
Supongamos que trabaja en un grupo que utiliza Excel para realizar un seguimiento de las
cuentas por cobrar. Todas las semanas sus compaeros de trabajo y usted envan un informe
en el que el administrador espera ver las cantidades atrasadas con formatos para facilitar su
visualizacin: los nmeros estn en rojo y en negrita, y las celdas tienen bordes rojos. A
continuacin se describe cmo grabar una macro para aplicar estos formatos:
1. En el libro en el que realiza un seguimiento de las cuentas por cobrar, haga clic en una de
las celdas a la que vaya a dar formato.
2. Elija Macro en el men Herramientas y, a continuacin, haga clic en Grabar nueva
macro.
3. En el cuadro de dilogo Grabar macro, escriba un nombre para la macro en el cuadro
Nombre de la macro. Los nombres de las macros comienzan por una letra y pueden incluir
letras, nmeros y caracteres subrayados, pero no pueden incluir espacios. No necesita
cambiar el resto de los cuadros:
4. Ahora dele a la celda el formato que desee usted: haga clic en Celdas en el men
Formato, haga clic en Fuente, haga clic en Negrita bajo Estilo, haga clic en Rojo en
Color, haga clic en la ficha Bordes, haga clic en Rojo en Color, elija el grosor del borde que
desee, haga clic en Contorno y, a continuacin, haga clic en Aceptar.
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
11
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
5. Para terminar de grabar la macro haga clic en el botn Detener grabacin que aparece
en la esquina inferior izquierda de la hoja de clculo:
Ahora dispone de una macro que puede realizar, en una sola operacin, los 12 clics de
mouse necesarios para dar formato a una celda.
La prxima vez que necesite marcar una celda, puede ejecutar la macro. Si va a utilizar la
macro con frecuencia, puede crear un botn en la barra de herramientas o asignarle una
tecla, o ambas cosas.
Nota: Evite utilizar una combinacin de teclas que se use para otras operaciones de Excel,
tales como CTRL+C para copiar.
Existen varias maneras de ejecutar una macro. Siempre puede ejecutar una macro por
medio del comando de men. Dependiendo de cmo est asignada la ejecucin de la macro,
es posible que tambin pueda ejecutarla presionando una combinacin de teclas de mtodo
abreviado con CTRL o haciendo clic en un botn de la barra de herramientas o en el rea de
un objeto, grfico o control. Asimismo, puede ejecutar una macro automticamente al abrir
un libro.
Nota: Para ayudar a evitar que se ejecute cdigo potencialmente peligroso, recomendamos
que vuelva a cualquiera de las configuraciones que deshabilitan todas las macros cuando
termine de trabajar con las macros. Para obtener ms informacin acerca de cmo cambiar
la configuracin, vea el tema sobre cmo cambiar la configuracin de seguridad de macros
en Excel.
3. En el cuadro Nombre de la macro, haga clic en la macro a la que desea asignar una
combinacin de teclas con CTRL.
4. Haga clic en Opciones.
5. En el cuadro Tecla de mtodo abreviado, escriba cualquier letra minscula o mayscula
que desee utilizar.
1. En la hoja de clculo, seleccione un objeto grfico existente, como una imagen, una
imagen prediseada, una forma o un grfico SmartArt.
2. Para crear una zona activa en el objeto existente, en la ficha Insertar, en el grupo
Ilustraciones, haga clic en Formas, seleccione la forma que desea utilizar y, a
continuacin, dibuje dicha forma en el objeto existente.
3. Haga clic con el botn secundario del mouse (ratn) en la zona activa que ha creado y, a
continuacin, elija Asignar Macro en el men contextual.
4. Siga uno de los procedimientos siguientes:
Para asignar una macro al botn u objeto grfico, haga doble clic en la macro o
escriba el nombre de la misma en el cuadro Nombre de la macro.
Para grabar una nueva macro y asignarla al objeto grfico seleccionado, haga clic en
Para modificar una macro existente, haga clic en el nombre de la macro, en el cuadro
Nombre de la macro y, a continuacin, haga clic en Modificar.
Si graba una macro y la guarda con el nombre "Auto_abrir", la macro se ejecutar cada vez
que se abra el libro que contiene la macro. Otra forma de ejecutar automticamente una
macro al abrir un libro es escribir un procedimiento de Microsoft Visual Basic para
Aplicaciones (VBA) en el evento Open del libro usando el Editor de Visual Basic. El
evento Open es un evento de libro integrado que ejecuta su cdigo de macro cada vez que
se abre el libro.
Nota: Para ayudar a evitar que se ejecute cdigo potencialmente peligroso, recomendamos
que vuelva a cualquiera de las configuraciones que deshabilitan todas las macros cuando
termine de trabajar con las macros.
1. Si desea guardar la macro con un libro determinado, abra primero ese libro.
2. En la ficha Programador, en el grupo Cdigo, haga clic en Grabar macro.
3. En el cuadro Nombre de la macro, escriba Auto_abrir.
4. En la lista Guardar macro en, seleccione el libro donde desea almacenar la macro.
Sugerencia: Si desea que la macro est disponible siempre que utilice Excel, seleccione
Libro de macros personal. Cuando se selecciona Libro de macros personal, Excel crea
un libro oculto de macros personal (Personal.xlsb), si an no existe, y guarda la macro en
este libro. En Windows Vista, este libro se guarda en la carpeta C:\Usuarios\nombre de
Notas:
Si en el paso 6 eligi guardar la macro en Este libro o en Libro nuevo, guarde o
mueva el libro a una de las carpetas XLStart.
La grabacin de una macro Auto_abrir tiene las limitaciones siguientes:
Si el libro en donde se guarda la macro Auto_abrir ya contiene un procedimiento de
VBA en su evento Open, el procedimiento de VBA del evento Open reemplazar
todas las acciones contenidas en la macro Auto_abrir.
Las macros Auto_abrir se omiten cuando se abren libros mediante programacin
utilizando el mtodo Open.
Una macro Auto_abrir se ejecuta antes de que se abra cualquier otro libro. Por lo
tanto, si graba acciones que desea que realice Excel en el libro predeterminado
Libro1 o en un libro cargado desde la carpeta XLStart, la macro Auto_abrir
producir un error cuando reinicie Excel porque la macro se ejecuta antes de abrir
los libros de inicio y el predeterminado.
Si encuentra estas limitaciones, en vez de grabar una macro Auto_abrir, debe crear
un procedimiento de VBA para el evento Open como se describe en la seccin
siguiente de este artculo.
Si desea iniciar Excel sin ejecutar una macro Auto_abrir, mantenga presionada la
tecla MAYS al abrir el programa.
El ejemplo siguiente utiliza el evento Open para ejecutar una macro al abrir el libro.
Nota: Para ayudar a evitar que se ejecute cdigo potencialmente peligroso, recomendamos
que vuelva a cualquiera de las configuraciones que deshabilitan todas las macros cuando
termine de trabajar con las macros.
De esta manera se crea un procedimiento vaco para el evento Open, como el siguiente:
7. Cambie a Excel y guarde el libro como libro habilitado para macros (.xlsm).
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
23
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
8. Cierre y vuelva a abrir el libro. Al abrir de nuevo el libro, Excel ejecuta el procedimiento
Private Sub Workbook_Open, que muestra la fecha actual en un cuadro de mensaje.
9. Haga clic en Aceptar en el cuadro de mensaje.
Observe que la celda A1 de la Hoja1 tambin contiene la fecha, como resultado de ejecutar
el procedimiento Private Sub Workbook_Open.
Entendiendo el cdigo
Retomando nuestro ejemplo de los nmeros rojos en las cuentas por cobrar, parece que
nuestra macro funciona, vamos a verla por dentro:
5
1) La macro comienza con la instruccin especial Sub, seguida del nombre elegido.
2) Las lneas precedidas por un apstrofo son comentarios por el usuario y no forman parte
de la macro.
3) Esta instruccin corresponde a la operacin de seleccionar la fuente con la que se define
el color del texto en la celda elegida (que fue justamente lo que se hizo luego de encender el
grabador).
4) Finaliza la instruccin que define el tipo de fuente, color y dems propiedades que
llevar el texto en la celda seleccionada.
5) La macro termina con la instruccin End Sub.
Retomemos el ejemplo en el que cambiamos de color las letras de una celda, pero ahora nos
interesa ocultar la columna Cantidad mediante la grabadora de macros:
Sub OcultarCantidad()
'
' OcultarCantidad Macro
' Macro grabada el 20/04/2013 por Riquet Zequeira
'
' Acceso directo: CTRL+o
'
Columns("C:C").Select
Selection.EntireColumn.Hidden = True
End Sub
Podemos crear una macro que muestre la columna Cantidad a travs del cdigo sin
utilizar la grabadora de macros, basta con acceder directamente al editor de Visual Basic y
escribimos el cdigo como aparece en la figura siguiente:
Todava podemos ir un paso ms all. Sera mucha ms cmodo trabajar con nica macro.
Ocultara la columna Cantidad con una sola macro, es decir, ocultar y mostrar con la
misma instruccin, para lo cual basta realizar el siguiente cdigo:
Sub OcultarMostrar()
If Selection.EntireColumn.Hidden = False Then
Selection.EntireColumn.Hidden = True
Else
Selection.EntireColumn.Hidden = False
End If
End Sub
Una vez hecho eso podemos elegir cualquier combinacin que nos parezca adecuada (por
ejemplo CTRL + s) y veremos cmo la columna Cantidad aparece y desaparece.
Esta nueva macro usa una instruccin nueva: la condicional If, que en ingls quiere decir si.
Las instrucciones que aparecen en el cdigo anterior pueden traducirse as:
Del ejemplo anterior aprendimos que las instrucciones que forman parte de una macro
pueden ser de dos tipos:
Las que equivalen a los comandos de Excel. Por ejemplo, seleccionar un rango u
ocultar una columna.
Instrucciones especiales, para controlar la operacin de la macro. Por ejemplo, la
instruccin condicional If,,,ThenElse
Las instrucciones del segundo tipo son ms complejas porque no podemos obtenerlas
automticamente del grabador, pero nos permiten crear macros ms poderosas. Veamos
ahora un ejemplo que nos permitir comprender esto con mayor claridad.
Dado el siguiente recibo, queremos imprimir cien copias de este recibo, numeradas
consecutivamente de uno en uno, el nmero de recibo debe aparecer en la celda E4 como se
muestra en la siguiente figura:
Sub Recibos ( )
For i = 1 To 3
Range("E3").Value = i
ActiveWindow.SelectedSheets.PrintOut
Copies:=1
Next
End Sub
Las instrucciones contenidas en el ciclo se ejecutan mientras una variable auxiliar cambia
su valor desde un valor inicial hasta alcanzar un mximo. En la macro anterior, la variable
Los datos de ste recibo como nombre, importe, etc., se obtienen del listado de la siguiente
figura:
Se deber imprimir un recibo como el que mostramos al inicio del ejemplo. Para obtener
todos los recibos tenemos que recorrer el listado de la figura anterior copiando ciertos datos
en la planilla de la primera pantalla:
Y as sucesivamente con todos los datos. El nmero de recibo podra generarse en forma
automtica al imprimir, y el importe debe calcularse multiplicando el importe total de la
celda B1 por el porcentaje de la columna D.
Sub Edificio()
[H2] = [E1]
[H3] = [B2]
ActiveSheet.PageSetup.PrintArea = "$G$1:$I$6"
For fila = 5 To 10
[H1] = [H1] + 1
[H4] = Cells(fila, 1)
[H5] = Cells(fila, 5)
[H6] = [B1] * Cells(5, 4)
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Next
End Sub
Los datos e fecha (E2) y direccin (B2) van fuera del ciclo porque se mantienen constantes
para todos los recibos. Vemos tambin la instruccin que incrementa, en cada pasada, el
nmero de recibo de la celda H1.
El resto de los datos van cambiando para cada integrante de la lista, segn el valor de la
variable fila. Para completar la macro solamente se incluye la instruccin correspondiente
a la impresin.
La primera instruccin le ponemos antes del ciclo ForNext, porque es el mismo para
todos los recibos. La segunda la ponemos antes del Next, para proceder con la impresin
justo antes de pasar al siguiente registro de la lista.
El ciclo Do While
Sub Edificio()
[H2] = [E1]
[H3] = [B2]
ActiveSheet.PageSetup.PrintArea = "$G$1:$I$6"
fila = 5
Do While Cells(fila, 1) > 0
[H1] = [H1] + 1
[H4] = Cells(fila, 1)
[H5] = Cells(fila, 5)
[H6] = [B1] * Cells(5, 4)
ActiveWindow.SelectedSheets.PrintPreview
Loop
End Sub
Option Explicit
Sub HorasSemanales()
'Calcula las horas semanales trabajadas
Dim a(1 To 5, 1 To 2) As Single
Dim dia As String, jornada As String
Dim i As Byte, j As Byte 'Tipo byte entre 0 y 255
Dim horas As Single
For i = 1 To 5
Select Case i
Case 1: dia = "Lunes"
Case 2: dia = "Martes"
Case 3: dia = "Miercoles"
Case 4: dia = "Jueves"
Case 5: dia = "Viernes"
End Select
For j = 1 To 2
If j = 1 Then
jornada = "INICIO"
Else
jornada = "FINAL"
End If
a(i, j) = InputBox("Introduzca la hora de " & jornada _
& " de la jornada de " & dia & "," & vbCrLf & _
"en formato decimal. Por ejemplo 17:30 son las 17,5")
If j = 2 Then horas = horas + a(i, 2) - a(i, 1)
Next j
Next i
MsgBox "Horas semanales = " & horas
End Sub
Sub BeneficioMedio()
'Calcula el beneficio medio de un grupo de empresas
Dim a() As Double 'Define una matriz sin decir an la dimensin
Dim n As Byte
Dim i As Byte
Dim media As Double
n = InputBox("Nmero de empresas del Grupo=")
ReDim a(n) 'Redimensiona una matriz dinmica
For i = 1 To n
a(i) = InputBox("Beneficio de la Empresa " & i & " = ", "La Media hasta ahora es " &
media)
media = (media * (i - 1) + a(i)) / i
Next
MsgBox "Beneficio Medio del Grupo de Empresas= " & media
End Sub
Sub CalculaTIR()
Range("F7").Value = 0
Range("H7").Value = 1
Do While Abs(Range("G8")) > 0.00001 'error admitido
If Range("G8") < 0 Then
Range("H7") = Range("G7")
Else
Range("F7") = Range("G7")
End If
'La siguiente lnea se utiliza para retrasar la ejecucin de la macro
'de esta forma se puede ver como converge la tasa a la TIR
'Application.Wait Now + TimeValue("00:00:1")
Loop
End Sub
Sub prestamo()
Static Principal 'Variable esttica. No cambia
Static Tasa
Static Terminos
Dim Pago As Double
Principal = Application.InputBox(Prompt:="Principal (100000 por ejemplo)", _
Default:=Principal)
Tasa = Application.InputBox(Prompt:="Tipo de inters nominal anual (4,75 por
ejemplo)", _
Default:=Tasa)
Terminos = Application.InputBox(Prompt:="Nmero de aos (30 por ejemplo)", _
Default:=Terminos)
'Vea como se usa la funcin de Excel Pmt (Pago) sin necesidad de calcularla en una celda
Pago = Application.WorksheetFunction.Pmt(Tasa / 1200, Terminos * 12, Principal)
MsgBox Prompt:="La Mensualidad es " & Format(-Pago, "Currency"),
Title:="Calculadora de Prstamos"
End Sub
Option Explicit
Dim fila As Integer
Sub genera()
Dim n As Long
Dim i As Long
fila = 0
Call limpia_zona
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja1").Activate
n = CInt(InputBox("Cuantos das de cotizacin?" & Chr(10) & "Por ejemplo, 100, o
bien, 500 ", "Entrada de Datos"))
Range("K10").Value = "Capital"
Range("L10").Value = "Acciones"
Range("M10").Value = "Patrimonio"
Range("N10").Value = "Acc.Comp."
Range("O10").Value = "Acc.Vendidas"
Range("P10").Value = "Aportadas"
Range("D11").Value = 15
Range("B10").Value = "N"
Range("B11").Value = 1
Range("B11").Select
'Este es el famoso Edicin, Rellenar, Series
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=n
Randomize
Range("C12").Value = "=LogInv(RAND(), 0, 2%) - 1"
Range("D12").Formula = "=+Round(D11*(1+C12),2)"
Range("C12:D12").Select
Selection.Copy
Range("B11").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Activate
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Range("C12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Call ordenes
Call principal(n)
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja2").Activate
Range("H6").Formula = "=+E6"
Range("H7").Formula = "=+H6+E7"
Range("I6").Formula = "=+1400-E6*C6"
Range("I7").Formula = "=+if(left(D7,1)=""A"",+I6+1400-E7*C7,if(left(D7,1)=""V"",
+I6-E7*C7,+I6-E7*F7))"
Range("I7").NumberFormat = "#,##0.00"
Range("H7:I7").Select
Selection.Copy
Range("G5").Select
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
42
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Activate
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Range("A1").Select
Application.CutCopyMode = False
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja1").Activate
Range("A1").Select
Call grafica
End Sub
Sub limpia_zona()
'Range("B12:D12").Select
'Range("D12").Activate
'Range(Selection, Selection.End(xlDown)).Select
'Selection.ClearContents
'Range("B10").Select
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja2").Activate
Cells.Select
Selection.Clear
Range("B5").Value = "Dia"
Range("C5").Value = "Precio Dia"
Range("D5").Value = "Tipo"
Range("E5").Value = "N Acc."
Range("F5").Value = "Precio"
Range("G5").Value = "Pasado"
Range("H5").Value = "Acc.Acum."
Range("I5").Value = "Capital"
Range("B5.I5").Font.Bold = True
Range("B5.I5").HorizontalAlignment = xlCenter
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja1").Activate
Cells.Select
Selection.Clear
End Sub
Sub Lista(Dia As Long, Precio As Single, Tipo As String, Aportadas As Single, otroPrecio
As Single, pasado As Long)
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja2").Activate
Range("B5").Select
fila = fila + 1
Application.Workbooks("CompVtaBolsa.xls").Worksheets("Hoja1").Activate
Range("B10").Select
End Sub
Sub principal(n)
Dim Dia As Long
Dim pasado As Long
Dim Precio As Single
Dim CA As Single 'Precio Lmite de la orden de Compra A
Dim CB As Single
Dim CC As Single
Dim VA As Single
Dim VB As Single
Dim VC As Single 'Precio Lmite de la orden de Vanta C
Dim Capital As Double
Dim Acciones As Long
Dim Aportadas As Single
Dim CAn As Long 'Nmero de compras A
Dim CBn As Long 'Nmero de compras B
Dim CCn As Long 'Nmero de compras C
Dim VAn As Long 'Nmero de ventas A
Dim VBn As Long 'Nmero de ventas B
Dim VCn As Long 'Nmero de ventas C
Dim POld As Single
Dim Patrimonio As Double
Dim Compradas As Single
Dim Vendidas As Single
Dim otroPrecio As Single
Dim compradasA As Single
Dim compradasB As Single
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
45
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
Range("B10").Activate
For Dia = 1 To n
Compradas = 0
Vendidas = 0
Precio = ActiveCell.Offset(Dia, 2).Value
Aportadas = Round(100 / Precio, 0) + Round(200 / Precio, 0) + Round(400 / Precio, 0)
'Las aportadas se calcula con estos tres sumandos ya que cuando se compran con los
700 $,
'se da simultaneamente la orden de venta. Pero son tres ordenes de venta, por lo que
'por el tema de los redondeos tenemos que calcularlo as.
Acciones = Acciones + Aportadas
ActiveCell.Offset(Dia, 14).Value = Aportadas
Capital = Capital + 1400 - Aportadas * Precio
otroPrecio = Precio
CA = Range("B10").Offset(pasado, 3).Value
CB = Range("B10").Offset(pasado, 4).Value
CC = Range("B10").Offset(pasado, 5).Value
VA = Range("B10").Offset(pasado, 6).Value
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
46
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
VB = Range("B10").Offset(pasado, 7).Value
VC = Range("B10").Offset(pasado, 8).Value
compradasA = 0
compradasB = 0
compradasC = 0
End If
End If
Next pasado
Patrimonio = Capital + Acciones * Precio
ActiveCell.Offset(Dia, 9).Value = Capital
ActiveCell.Offset(Dia, 10).Value = Acciones
ActiveCell.Offset(Dia, 11).Value = Patrimonio
ActiveCell.Offset(Dia, 12).Value = Compradas
ActiveCell.Offset(Dia, 13).Value = Vendidas
Next Dia
Range("E7").Value = CAn
Range("F7").Value = CBn
Range("G7").Value = CCn
Range("H7").Value = VAn
Range("I7").Value = VBn
Range("J7").Value = VCn
End Sub
Sub ordenes()
Range("E8").Value = 5 / 100
Range("F8").Value = 10 / 100
Range("G8").Value = 20 / 100
Range("H8").Value = 5 / 100
Range("I8").Value = 10 / 100
Range("J8").Value = 20 / 100
Range("E8:J8").Select
Selection.Style = "Percent"
Selection.HorizontalAlignment = xlCenter
Range("E10:Q10").Select
Selection.Font.Bold = True
Selection.HorizontalAlignment = xlCenter
Range("E11").Formula = "=+Round($D11/(1+E$8),2)"
Range("E11").Copy
Range("D11").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 1).Activate
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Range("E11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("F11:G11").Select
ActiveSheet.Paste
Range("H11").Formula = "=+Round($D11*(1+H$8),2)"
Range("H11").Copy
Range("D11").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 4).Activate
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Range("H11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("H11:J11").Select
ActiveSheet.Paste
Range("B11").Select
Zequeira y Asociados Grupo Actuarial 2013
gactuarialmx@gmail.com
51
M. EN F. RIQUET ZEQUEIRA FERNNDEZ Macros en Excel con Aplicacin a las Finanzas 2013
Application.CutCopyMode = False
'******** Para copiar la frmula ************
End Sub
Sub grafica()
Range("D11").Select
Range(Selection, Selection.End(xlDown)).Select
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"
ActiveChart.Legend.Delete
Range("A1").Select
End Sub
'Activar casilla B5
ActiveSheet.Range("B5").Activate
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
'Mientras la variable Nombre sea diferente a cadena vaca
Do While Nombre <> ""
'La estructura repetitiva for se adapta perfectamente a aquellas situaciones en que se
sabe previamente el
'nmero de veces que se ha de repetir un proceso.
'Do While..Loop es una estructura repetitiva que se repite mientras se cumpla el
criterio
'En este caso se trata de rellenar una Base de Datos. Se piden nuevos datos mientras
que el nombre no este vacio
End With
'Hacer activa la celda de la fila siguiente a la actual
ActiveCell.Offset(1, 0).Activate
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Loop
End Sub