Documente Academic
Documente Profesional
Documente Cultură
ISSN 2312-4776
Documento de Trabajo
N 19-2015
por
Alfonso Ayala
El principal objetivo de la Serie de Documentos de Trabajo OMEGA BETA GAMMA es difundir los avances
de investigaciones conducentes a futuras publicaciones de artculos cientficos, as como de textos
resultantes del proceso de enseanza de los profesores del Departamento de Economa de la Facultad
de Ciencias Econmicas de la Universidad Nacional Mayor de San Marcos; incluyendo publicaciones de
investigadores nacionales e internacionales de otras instituciones de educacin superior.
La Serie de Documentos de Trabajo OMEGA BETA GAMMA es promovida y desarrollada por un
colectivo de profesores del Departamento de Economa de la Universidad Nacional Mayor de San
Marcos.
COMIT EVALUADOR
Alfonso Ayala
Universidad Nacional Mayor de San Marcos
Resumen
B. Sc. Economa, Universidad Nacional Mayor de San Marcos. Maestra en Finanzas, Universidad del
Pacfico. Profesor Auxiliar del Departamento de Economa de la UNMSM. Investigador asociado al Instituto
de Investigaciones FCE UNMSM y al Instituto de Estudios Sociales del Rmac. Contacto:
aayalal1@unmsm.edu.pe
1. Introduccin.
Pseudocdigo
Antes de escribir un programa en un lenguaje de programacin especfico, por lo
general es necesario expresarlo en un lenguaje natural, usando ciertos verbos o
expresiones simples, a este conjunto de instrucciones simplificadas se le denomina
1Por ejemplo, una computadora puede tener 32 GB de RAM y otra 8GB, el lenguaje de bajo nivel
puede manejar en el primer caso ms espacio de memoria o "direcciones" donde almacenar datos.
El lenguaje de alto nivel opera de cierta manera independientemente de cuanto espacio de memoria
pueda manejar la computadora.
1
pseudocdigo. El pseudocdigo nos describe de manera general2 las tareas que
esperamos que realice el programa propuesto, tiene la ventaja que puede ser
entendido por otras personas (por ejemplo, un cliente, un colega que desea resolver el
mismo problema o el conjunto de programadores encargado de implementar la
solucin), y se puede escribir e implementar en varios lenguajes de programacin.
Adems, es importante crear un pseudocdigo para poder hacer una simulacin
simplificada del camino que seguir el programa ante diferentes eventos o
circunstancias que se presentarn durante la ejecucin del mismo.
Por ejemplo un pseudocdigo simplificado para hacer un pastel sera:
Segn Robertson (2004), una computadora puede realizar seis operaciones bsicas: 1)
recibir informacin, sea de un usuario, de otra computadora o de otro proceso en
ejecucin, usualmente se usa el verbo leer u obtener para escribir el pseudocdigo
asociado; 2) mostrar informacin, tambin al usuario o enviarla a un dispositivo (una
impresora, el monitor, etc.), se usa el verbo Mostrar o Imprimir en el pseudocdigo; 3)
2
El pseudocdigo est escrito en lenguaje simple, con verbos en infinitivo y tareas expresadas en trminos
descriptivos.
2
realizar operaciones matemticas, sobre diferentes elementos: nmeros, vectores,
matrices, etc., aqu incluimos: suma, resta, multiplicacin, divisin, pero tambin otras
operaciones complejas como optimizacin, integracin, etc.; 4) asignar un valor a una
variable o a una direccin en memoria, aqu se pueden dar tres opciones: inicializar
una variable es decir darle un valor inicial determinado, asignar un valor como
resultado de algn proceso, o mantenerla para un uso posterior3, se utiliza los verbos
Inicializar para el primer caso, el cdigo variable x = z para el segundo caso, y Grabar
para el tercero, 5) Comparar dos variables (o situaciones) y seleccionar una de dos
acciones alternativas, para representar esta operacin se usa la estructura If Then
Else, en este caso solo una de las acciones se ejecutar, y 6) repetir un grupo de
acciones, siempre y cuando se cumplan ciertas condiciones, se utiliza la estructura
While Wend, la accin se repetir hasta que la condicin deje de cumplirse.
Diagramas de flujo
Un diagrama de flujo es una representacin de los procesos que el ejecutante del
programa llevar a cabo y de las decisiones que se tomarn en el momento de ejecutar
un programa. Un diagrama utiliza bloques (generalmente representado por un
rectngulo), nodos (puntos) y caminos (flechas) conectados. Un nodo es un punto
donde se encuentran tres caminos.
Un diagrama de flujo simple puede ser como el siguiente:
N=0
Nulo -1^A =1
Par Impar
3
Un archivo guardado en la computadora es un ejemplo tpico de esta operacin.
3
2.2. Principales estructuras
Estructura Decisin
Un tipo especial de nodo, de mucho uso en programacin, es el nodo decisin,
representado por un rombo que incluye el texto de la condicin (o formulada como
una pregunta) que se quiere determinar si es verdadera o falsa4.
Por ejemplo, si en invierno el da es fro y con vientos, convendr llevar puesta
una chompa gruesa, en caso el da no sea tan severo, una ligera. Podemos representar
esa situacin mediante el siguiente diagrama de flujo.
Hace mucho
fro? No
Si
<!> Una regla cuando se grafican diagramas de flujo, es que un nodo recibe dos o ms caminos
y de l sale un solo camino.
Estructura secuencia
Est constituida por dos o ms bloques, uno despus del otro unidos por flechas, cada
bloque incluye un proceso o tarea a ejecutar.
4 El programador ha previsto que se puede presentar el caso de que se tenga que decidir si se
ejecuta o no un determinado proceso, pero para ello debe construir una estructura lgica que
permita que el proceso se ejecuta bajos determinadas condiciones.
4
Figura 03: La estructura secuencia.
Proceso A
Proceso B
Proceso C
Proceso A
Proceso B
Proceso C
Definir objetivos
Conseguir la data
Procesar la data
Analizar la data
5
A veces se suele simplificar la estructura secuencia agrupando en un solo bloque varias secuencias, para
fines de su representacin grfica, esto se produce cuando cada proceso cabe en una sola lnea de
pseudocdigo o cdigo.
5
Figura 05: La estructura mientras, decisin de revisar un algoritmo.
No se
entendi el Si
algoritmo?
No Seguir revisando el
algoritmo
Contador = Inicio
While Condicin
Sentencia 1
Sentencia 2
Sentencia N
Contador = Inicio + 1
Wend
Para el caso del grfico anterior, no se puede entender un algoritmo sin revisar por lo
menos una vez el mismo, por lo que el bucle while sera como sigue:
<!> Es importante sealar que en la estructura WhileWend, se debe incluir una lnea de
instruccin que realice el conteo de las operaciones a realizar con el bucle, por ello se aade
siempre la instruccin Contador = Inicio + 1.
Por ejemplo, el siguiente cdigo escribe el nmero de fila desde la fila 2 hasta la fila
10, en la columna 1 de una hoja de clculo:
6
i = 2
While i <= 10
Cells(i, 1).Value = i
i = i + 1
Wend
Estructura ForNext
Una estructura derivada de la estructura mientras, tambin de mucho uso en
programacin es la estructura For Next, esta se utiliza cuando se desea realizar
un proceso un determinado nmero de veces o para un conjunto establecido de
casos, el diagrama de flujo de la estructura For...Next se puede ver en el siguiente
grfico:
7
Figura 06: La estructura For, Comprar hasta agotar el dinero.
Si
Hacer una compra
Hay dinero?
No
Hay dinero? Si
Figura 08: Diagrama de flujo de for: se muestra el valor de contador en el bucle for.
Proceso
8
Sentencia 2
Sentencia N
Next Contador
Donde Contador denota la variable que itera cada caso, es decir la que indica cuantas
veces se realizar el proceso Hacer una compra, contador en este caso puede ser el
dinero que lleva una persona al mercado, por ejemplo si tiene inicialmente Dinero =
N.S/. 1,000 y realiza compras hasta agotar el dinero:
<!> Cabe mencionar que en la estructura ForNext, para VBA no es necesario que se incluya
en el cdigo de la aplicacin una lnea que haga que el contador se incremente (o vare).
8
En programacin se conoce a las sentencias incluidas en otras sentencias bsicas, como anidadas o nested.
9
Figura 09: La estructura While e If.
10
Dim Ultima_Fila As Integer
Dim Columna_Totales As Integer
Dim Condicin_Pobre As Boolean
EJERCICIOS #2
Construya un diagrama de flujo de los siguientes casos:
a. Un mosquito se acerca a picar si la temperatura de su vctima es superior a la suya, que es
igual a la temperatura ambiente. Es posible determinar la temperatura de una persona
usando un mosquito como termmetro. El sensor infrarrojo del mosquito transforma la
frecuencia de emisin del cuerpo humano detectada, en temperatura, mediante T =
frecuencia/10,000 + 12.5. El mosquito tambin verifica si la temperatura de la vctima es
superior a la suya para picar, es decir el mosquito se acerca a picar si temperatura_humano
> temperatura_mosquito9.
b. En una tienda por departamentos se efecta un descuento a los clientes dependiendo del
monto de la compra. El descuento se efecta de la siguiente manera: Si el monto es menor a
N.S/. 500 no hay descuento, si el monto es igual o mayor a N.S/. 500 pero menor a N.S/.
1,500 se otorga un 4% de descuento, si es mayor a N.S/. 1,500 se otorga un 5% de
descuento, determinar el pago a realizar por el cliente.
c. Los trabajadores de una empresa pueden trabajar 40 horas o ms a la semana, si eso
sucede se le paga un 40% ms por cada hora trabajada por encima de ese lmite,
determinar el costo semanal de la planilla por empleado sabiendo que el costo por hora es
S.
d. Se desea aplicar un descuento a una venta de artculos dirigidos al pblico masculino y
menor de 17 aos, siempre y cuando este producto est en campaa (C), determinar si se
aplica o no este descuento a la compra de un artculo cuando se tienen los datos de la edad
del cliente y el artculo en venta (en promocin o no).
e. Construya un diagrama de flujo que dado como datos de entrada 3 nmeros enteros,
determine si estn en orden creciente.
f. Construya un diagrama de flujo que tiene como datos tres nmeros, identifique cul es el
mayor. Considere que los nmeros pueden ser iguales.
g. Un cliente necesita adquirir una cantidad especfica de hojas bond en la conocida librera
TayYol, que tiene un programa de ventas exclusivas. Este programa otorga descuentos
en las compras de acuerdo a lo siguiente: por hojas simples el costo es de N.S/. 0.10; por
mltiplos de 100 hojas el costo es de N.S/. 0.055 / hoja, por mltiplos de 500 hojas el costo
es de N.S/. 0.04 / hoja, y por mltiplos de 1,000 hojas el costo es de N.S/. 0.03 / hoja. Es
decir a un cliente le convendra adquirir un lote de 1000 hojas en lugar de dos pedidos de
500. (Por ejemplo si un cliente necesita 380 hojas, el monto que pagara en mltiplos de
100 sera N.S/. 24.5, sin embargo si compra 400, el costo sera N.S/.22). Cul sera el
pseudocdigo o el diagrama de flujo para determinar el pago a realizar ante el pedido de
un cliente, de un nmero finito de hojas?
9Habra una limitante para el uso de este mtodo, en tanto la temperatura del humano sea inferior
a la del medio ambiente.
11
h. Construya un diagrama de flujo que tiene como datos tres nmeros enteros, identifique
cul es el nmero central.
i. Escriba un diagrama de flujo del juego papel, tijera, piedra.
3. Programacin en VBA
VBA es un lenguaje de programacin orientado a objetos, que nos permite
automatizar las acciones a realizar sobre una hoja de clculo Microsoft Excel. Un
objeto corresponde a uno de los elementos de la aplicacin Excel10, es decir un archivo
Excel (Workbook), una hoja del libro (Worksheet), una celda (Cells), un grfico
(Chart), etc.
El lenguaje VBA nos permite escribir de manera eficiente macros, que son "una
herramienta que permite automatizar operaciones mediante la programacin
personalizada de funciones o procedimientos que el usuario realiza de manera
repetitiva"11, esta macro corresponde a la solucin de un problema analizado y cuya
formulacin en algoritmos y su implementacin en un lenguaje especfico
corresponde al programador.
Application
Workbook
Worksheets
Range
12
Las propiedades de los objetos que manejamos en Excel se cambian mediante
asignacin directa, es decir declarando en una lnea del programa el valor de la
propiedad; o alternativamente mediante mtodos ejecutados sobre estos objetos, por
ejemplo al aplicar el mtodo Delete a una hoja del archivo activo, la propiedad nmero
de hojas del archivo activo disminuye en una unidad.
Las propiedades de un objeto son las caractersticas del mismo, o incluso pueden ser
otros objetos de menor jerarqua. De manera similar a un objeto de la vida real que
tiene por lo menos un espacio, un volumen, un peso, una composicin, un color, una
frecuencia de emisin, etc., los objetos de Excel tienen ciertas propiedades que se van
modificando conforme se va actualizando un archivo de Excel.
Las lneas de cdigo en VBA se escriben asociando el objeto que se quiere cambiar12,
bien sea a una propiedad o a un mtodo, uniendo estos elementos mediante un punto.
La forma general es:
Objeto.Mtodo
Objeto.Propiedad
12
O cuya propiedad se quiere leer.
13
En el primer caso se aplicar cierta accin al objeto, por ejemplo pegar el valor de otra
celda, borrar los valores de un rango, etc. En el segundo caso se modifica una
determinada propiedad mediante una asignacin directa, tambin puede ser el
resultado de ciertas operaciones que necesitan almacenarse en la hoja de clculo,
luego de un proceso.
Nos referiremos a objetos como Cells o Range, para realizar operaciones matemticas
sobre las propiedades Value, estos se encuentran en otros objetos de mayor jerarqua
(las hojas), de ah la importancia del modelo de objetos en VBA, se hace necesario
asociar los objetos de menor nivel a los objetos que los incluyen, esto se realiza
asocindolos, mediante puntos:
ObjetoSuperior.ObjetoInferior.Propiedad
ObjetoSuperior.ObjetoInferior.Mtodo
Para acceder o modificar un objeto a veces es necesario "cruzar" por varios objetos de
arriba hacia abajo, por ejemplo si se necesitara cambiar el valor de una celda en otro
archivo llamado Modelo1 en la segunda hoja para la fila 3 columnas 4 a 16, sera:
Application.Workbooks("Modelo1").Worksheets(2).Range(Cells(3, 4),Cells(3,
16)).Value = 2
Por ejemplo, para asignar el valor 50 a la celda B3, de la hoja Parametros13, en este
caso la hoja Parametros debe estar en el archivo activo14:
Sheets(Parametros).Cells(3, 2).Value = 50
Sheets(Parametros).Cells(3, 2).CurrentRegion.Rows.Count
x = Sheets("Parametros").Cells(3, 2).CurrentRegion.Rows.Count
Sheets("Parametros").Cells(10, 2).Value = x
13 Se omiten las tildes en los nombres de hojas o variables que se utilizan en el cdigo en VBA.
14 Ntese que en este caso no necesit mencionar al principio del cdigo el objeto mayor.
15 En la lnea de cdigo x = , estamos haciendo una asignacin de valor, en este caso el nmero de
14
Ejemplos de Propiedades
For m = 2 To 4
Cells(6, m).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
UltimaFila = Selection.Rows.Count
Cells(33, m).Value = UltimaFila
Next m
15
Basados en lo anterior podemos extraer informacin de los datos de varias columnas,
por ejemplo si quisiramos determinar el mximo valor de un rango de datos, se
puede usar la funcin Application., complementada con el tipo de estadstico que se
desea calcular, en el caso del mximo del rango de datos tenemos:
For m = 2 To 4
Cells(6, m).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
UltimaFila = Selection.Rows.Count
Maximo = Application.Max(Selection)
Cells(33, m).Value = UltimaFila
Cells(34, m).Value = Maximo
Next m
Cells(33, 1).Value = "Nmero de observaciones"
Cells(34, 1).Value = "Promedio"
16
For j = 0 To n_obs_mensuales - 1
DataMensual(j) = Cells(j * 12 + 6, 2).Value
SumMes = Application.Sum(DataMensual())
PromMensual = SumMes / n_obs_mensuales
Next j
Cells(39, 1).Value = "Promedio de Enero"
Cells(39, 2).Value = PromMensual
Ejemplos de Mtodos
Range("Vector_Observaciones").Select
Application.Calculate
Selection.Copy
3.4. Subrutinas
Los programas en VBA se escriben en mdulos, los mdulos pueden incluir varias
subrutinas. La subrutina se declara con la sentencia Sub y se termina con la
sentencia End Sub. Es importante sealar que cuando se hace click sobre el botn
Ejecutar Sub/UserForm ( ), se ejecutan todas las sentencias entre Sub y End Sub.
Sub Procedimiento()
Sentencia 1
Sentencia 2
Sentencia N
End Sub
Arrays
Un array o arreglo es una tabla de datos de una o varias dimensiones 17, por ejemplo
una tabla de 16 valores se inicializa con la sentencia:
16 Esta lnea de cdigo se agrega usualmente cuando se ha fijado la propiedad de clculo de la hoja a
Manual mediante: Application.Calculation = xlManual, esto se da en aplicaciones que tienen
muchos datos u operaciones, donde recalcular la hoja luego de cada Enter, puede hacer que la
aplicacin Excel se torne muy lenta.
17 Es decir, un vector fila o una matriz de 2 o ms dimensiones.
18
Dim MiArray2(9,19) As Double
El Objeto Range
Es uno de los objetos que ms usaremos, el objeto Range es una propiedad del objeto
Worksheets, esto significa que el cdigo que creemos se referir a la hoja activa (la
que se muestra en pantalla) o a otra hoja en el mismo archivo Excel que se encuentre
activo. El primer y el segundo caso se pueden referir como:
Si se desea hacer referencia al valor de una celda que se ubique g filas hacia abajo y h
columnas hacia la derecha de la celda de referencia o inicial, se puede usar la
propiedad Offset del objeto Range, mediante Range(.).Offset(g,h)20, por
ejemplo si queremos leer el valor de la celda D5 tomando como punto de referencia
A1, asignando ese valor a la variable x:
x = Range(Cells(1, 1)).Offset(4,3)
Por ejemplo a partir de A5 se desea seleccionar todo el rango desde A5 hasta D9, se
escribira un cdigo como:
18 Siempre y cuando no se haya declarado la parte inicial de la subrutina la sentencia Option Base
1, en cuyo caso la sentencia anterior se debe escribir como Dim MiArray2(10,20) As Double.
19 Esta se habilita en el men Ver / Ventana Inspeccin.
19
Figura 13: Mtodo Select en un rango de celdas.
CurrentRegion
Range(Cells(2, 2)).CurrentRegion.Select
4. Aplicaciones a Economa.
Desarrollaremos un conjunto de funciones y modelos utilizando los conceptos
desarrollados hasta el momento, principalmente introduciremos el planteamiento de
funciones personalizadas por el usuario, aplicadas al clculo financiero y en la
segunda subseccin realizaremos una aplicacin para el anlisis de modelos de
evaluacin de inversiones.
20
4.1. Funciones definidas por el usuario
21
MiVNA = 0
For n_per = 1 To Application.Count(Vector_FlujosCaja)
MiVNA = MiVNA + Vector_FlujosCaja(n_per) / (1 + tasa) ^ (n_per - 1)
Next n_per
MiVNA = MiVNA
End Function
22
Figura 17: Obtencin del VPN en un modelo simplificado.
Sub Simulacion1()
Dim n As Integer
Dim n_iteraciones As Integer
Dim Resultados() As Double
n_iteraciones = 10
ReDim Resultados(n_iteraciones - 1) As Double
For n = 0 To n_iteraciones
Range("t_crec") = Application.WorksheetFunction.NormInv(Rnd, tasa_crec, 0.01)
Resultados(n) = Range("Result_VNA")
Next
End Sub
23
Figura 18: Ventana Inspecciones.
El cdigo anterior escribe las n_iteraciones resultado de las simulaciones del valor
presente neto del proyecto en un array dinmico, pero estos datos se pierden cuando
se ejecuta el Sub, por ello necesitamos ahora escribir esos valores en un rango de
datos de la hoja de clculo. Para ello simplemente transponemos el array, ya que un
array de 1 dimensin es por defecto un vector fila, y lo asignamos a un rango dinmico
en la hoja, el cdigo a aadir sera el siguiente:
VectCol_Resultados = Application.Transpose(Resultados)
Range(Cells(5, 9), Cells(5 + n_iteracion - 1, 9)).Value = VectCol_Resultados
24
Figura 19: Simulaciones de VPN.
EJERCICIOS #4
Funciones personalizadas
a. Plantear una funcin personalizada que calcule la tasa nominal equivalente de una tasa
efectiva dada, conociendo el periodo de capitalizacin de la operacin.
b. Plantear una funcin personalizada que calcule el periodo de repago, dado un flujo de caja
estimado del proyecto. Considere los casos de periodo de repago y periodo de repago
descontado21.
Simulacin
a. Ahora se desea observar cual sera el resultado de variaciones tanto en la demanda como
en el costo unitario del proyecto a evaluar, considere que los costos unitarios tienen una
varianza de 0,02 y se distribuyen normalmente con media igual a 0.10, escriba el cdigo
necesario para obtener 200 simulaciones del VAN del proyecto.
21La teora sobre indicadores de rentabilidad de la inversin se puede consultar en Tong (2006), captulo VII,
pginas 218 a 219.
25
SOLUCIONES A EJERCICIOS SELECCIONADOS
Ejercicios #2
b. Diagrama de flujo
Forma 1: Forma 2:
Monto Monto
Si
Monto < 1,500 No
D = 0.05*M
Monto > 500
Monto = M D
Si
Si Si
D = 0.04*M D = 0.05*M
D = 0.04*M
Monto = M D Monto = M D No
Monto = M D
Monto Monto
26
e. Diagrama de flujo
A, B, C
A<B No
B<C No
f. Diagrama de flujo:
A, B, C
A>B No
A>C No A=B No
Si Si
A y B y C son B y C son los
C es el mayor C es el mayor
iguales mayores
27
Cdigo en VBA:
28
g. Diagrama de flujo
N_hojas
N_hojas_simples = residuo_cientos
Residuo_millar=Residuo_quinientos=Residuo_cie
No
ntos
Costo = 0.03*1000*N_millares +
Costo = 0.03*1000*N_millares +
0.04*500*N_quinientos + 0.055*100*N_cientos +
0.04*500*N_quinientos + 0.10*N_hojas_simples
0.10*N_hojas_simples
Costo
29
i. Diagrama de flujo
J1, J2,
Pa, Ti, Pi
J1=Pa, J2=Pa
(Ji=Pi,J2=Ti)
Gana J2 Gana J1
30
REFERENCIAS.
Alemn, M. C., Gonzlez Z., E. (2003). Modelos financieros en Excel. Mxico: Compaa
Editorial Continental.
Jelen, B. y Syrstad, T. (2013). Excel 2013 Macros y VBA. 1 edicin. Madrid: Anaya
Multimedia.
Walkenbach, J. (2013). Microsoft Excel 2013 Power Programming with VBA. New
Jersey: John Wiley & Sons, Inc.
31