Sie sind auf Seite 1von 25

Gua para la elaboracin de talleres de computador Visual Basic en Microsoft Excel*

Finanzas Matemticas 2002-I


Este "manual" de Visual Basic en Excel contiene informacin muy bsica sobre la realizacin de Macros de Excel. Con esta gua, se pretende que los estudiantes se empiecen a familiarizar con la creacin de Macros en Excel para que obtengan algunas herramientas bsicas que les permitan seguir aprendiendo por si mismos, ya sea estudiando bibliografa especializada o con la utilizacin de la Ayuda que viene con Excel. La idea fundamental es aplicar los conceptos bsicos aprendidos en los cursos de programacin, para utilizar una herramienta muy til y flexible como Excel. Esto debido a que la utilizacin de un lenguaje de programacin es fundamental en estos das para automatizar tareas e implementar diferentes tipos de modelos matemticos. Aunque existen muchos otros lenguajes de programacin, se escogi Excel y su herramienta de Visual Basic debido a su enorme flexibilidad y su fcil acceso ya que es un programa que se encuentra disponible en la mayor parte de los computadores. Excel tiene grandes ventajas en la creacin de "ambientes amigables" con el usuario, por ejemplo cambiando el color de algunos rangos de celdas, creando lneas guas para tablas, cambiando el tamao y el estilo del texto o elaborando interfaces con botones de comando o mens de opciones. Adicionalmente, Excel tiene un gran numero de funciones estadsticas y de anlisis numrico ya elaboradas que facilitan la implementacin de los diferentes modelos. Los conceptos que se aprendan de Excel y Visual Basic podrn ser de ayuda en la elaboracin de programas en una gran variedad de reas. La utilizacin de Excel para Finanzas Matemticas tiene como objetivo capacitar al estudiante para que implemente algunos de los modelos estudiados en clase. Los programas que se desarrollaran en este curso sern modelos de simulacin de monte carlo y modelos de anlisis numrico.

Autor: Camilo A. Santos A.** Versin: 2.0 Ao: 2002


*

**

Esta gua y sus versiones anteriores se escribieron con el apoyo del profesor Augusto Perilla. Cualquier comentario o sugerencia puede ser enviada al e-mail: camosantos@hotmail.com

TABLA DE CONTENIDO
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. INTRODUCCIN .............................................................................................................................. 3 CREACIN DE UN MACRO............................................................................................................ 4 DECLARACIN DE VARIABLES................................................................................................... 5 INSTRUCCIN FOR...NEXT............................................................................................................ 6 INSTRUCCIN IF..THEN..ELSE..................................................................................................... 7 ASIGNACIN DE CELDAS.............................................................................................................. 9 FUNCIONES MATEMTICAS DE VISUAL BASIC ...................................................................... 9 FUNCIONES BSICAS DE "INTERACCIN" CON EL USUARIO........................................... 11 UTILIZACIN DE FUNCIONES DE EXCEL ............................................................................... 12 EJECUCIN DEL MACRO ........................................................................................................ 13 EJEMPLO 1.................................................................................................................................. 14 UTILIZACIN DEL SOLVER DE EXCEL POR MEDIO DE MACROS................................. 15 MATRICES................................................................................................................................... 17 EJEMPLO 2.................................................................................................................................. 20 COMANDOS DE FORMULARIOS DENTRO DE LA HOJA DE CALCULO ......................... 23 ELABORACIN DE FORMULARIOS PERSONALIZADOS .................................................. 23

REFERENCIAS ....................................................................................................................................... 25

Autor: Camilo Andrs Santos Ardila - 2002

1. Introduccin
Visual Basic es un lenguaje de programacin que permite ejecutar diferentes instrucciones creadas por el usuario sobre las hojas de calculo de Microsoft Excel. Las macros de Excel permiten automatizar tareas que normalmente se realizan repetidas veces. Una macro consiste en una serie de comandos e instrucciones que se agrupan en un solo comando de forma que la tarea pueda realizarse automticamente utilizando como apoyo el ambiente de Excel. En lugar de perder el tiempo realizando una serie de acciones repetitivas en Excel, puede crear y ejecutar una macro, es decir, un comando personalizado, que ejecute la tarea por usted. Tambin se puede elaborar el macro para que le construya o modifique una pagina de Excel de acuerdo a sus necesidades. Excel incluye dos mtodos para crear macros: la grabadora de macros y el Editor de Visual Basic. Excel graba la macro como una serie de comandos utilizando el lenguaje de programacin de Visual Basic. Las macros grabadas se pueden abrir en el Editor de Visual Basic para modificar las instrucciones. Para grabar y editar un macro seleccione el men Herramientas seale Macro y se desplegara el siguiente men:

La opcin que utilizaremos para crear los macros ser la del Editor de Visual Basic con la cul se desplegara una nueva ventana (llamada Microsoft Visual Basic) en donde se podr escribir el cdigo del macro en el lenguaje de Visual Basic. Para que el macro que se vaya a elaborar, se pueda utilizar sobre cualquier hoja de calculo del libro realizamos el siguiente procedimiento: Seleccionamos el men Ver y despus Explorador de Proyectos. Aparecer una ventana como la siguiente:

Despus seleccionamos el men Insertar y despus Mdulo. Ac nos aparecer una nueva ventana que tendr como titulo "[Mdulo1(Cdigo)]". En esta ventana es en donde se podr escribir el cdigo del macro en Visual Basic.

Autor: Camilo Andrs Santos Ardila - 2002

Cada vez que se desee entrar a esta ventana donde se encuentra el cdigo del macro, se realiza el siguiente procedimiento: se selecciona el modulo que se creo (por ejemplo Modulo1) en la ventana llamada "Proyecto - VBAProject", despus se selecciona el men Ver y despus Cdigo (o se oprime la tecla F7). A medida que se va realizando el macro, este se guarda con la opcin de la barra de herramientas de guardar o con el comando de Archivo y despus Guardar. As mismo, es recomendable que cuando se encuentren en la ventana de Microsoft Visual Basic, tengan la barra de herramientas estndar a la vista, ya que tiene funciones tiles que pueden estar utilizando constantemente como la de guardar o correr el macro. Para poner esta barra visible vayan al men Ver, despus Barras de Herramientas y sealen la opcin Estndar. Nota: Los comentarios del programa dentro del cdigo de Visual Basic se escriben despus de una comilla sencilla como se ilustrara mas adelante en los ejemplos. Algunas teclas importantes en la ventana de Microsoft Visual Basic Ctrl + S: Guarda el macro en el archivo que este utilizando F1: Le proporciona ayuda sobre las instrucciones que esta utilizando para elaborar el macro. Simplemente ponga el cursor sobre la instruccin sobre la que necesita ayuda, oprima F1 y una ventana de ayuda se desplegara indicndole la funcin, la sintaxis y ejemplos acerca de la instruccin. F7: Lo sita en la pagina en donde esta escribiendo el cdigo. Ctrl + R: Lo sita en la ventana del Explorador de Proyectos (Proyecto - VBAProject) Alt + F11: Lo sita en la ventana de Microsoft Excel. F8: Hace que pueda correr el programa paso a paso

2. Creacin de un Macro
El cdigo dentro de un conjunto de declaraciones o instrucciones se organiza en procedimientos. Un procedimiento comunica a la aplicacin para ejecutar una tarea especfica. Los procedimientos se pueden utilizar para dividir tareas complejas del cdigo en unidades ms manipulables. Se puede crear un procedimiento Sub, Function o Property. (Por ahora solo aprenderemos a crear procedimientos Sub). Entonces se escribe Sub, Function o Property despus se escribe el cdigo para el procedimiento, y Visual Basic finaliza el procedimiento con la instruccin End Sub, End Function o End Property apropiada. Un procedimiento Sub es una serie de instrucciones de Visual Basic, encerradas entre un par de instrucciones Sub y End Sub, que realizan acciones especficas pero no devuelven ningn valor. Un procedimiento Sub puede aceptar argumentos, como constantes, variables o expresiones que le pasa el procedimiento que ha efectuado la llamada. Si un procedimiento Sub no tiene argumentos, la instruccin Sub debe incluir un par de parntesis vaco.

Autor: Camilo Andrs Santos Ardila - 2002

Sintaxis del procedimiento Sub Sub nombre ([listaargumentos]) [instrucciones] [Exit Sub] [instrucciones] End Sub i.) ii.) iii.) nombre: Requerido. Nombre del Sub; listaargumentos: Opcional. Lista de variables que representan los argumentos que son pasados al procedimiento Sub cuando es llamado. Las variables mltiples se separan con puntos y coma. instrucciones: Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del cuerpo del procedimiento Sub.

Nota: La palabra clave Exit Sub es opcional y causa la inmediata salida de un procedimiento Sub Ejemplo:
Sub ejemplo1() 'Como no hay nada dentro de los parntesis, 'no le esta entrando ninguna variable al 'procedimiento Cells(1, 1).Value = "Ejemplo" 'Escribe en la celda A1 de la hoja 'de calculo donde se ejecuta el macro 'la palabra Ejemplo End Sub 'Indica el final del procedimiento

3. Declaracin de Variables
Para declarar variables se utiliza normalmente una instruccin Dim. La instruccin de declaracin de variables puede incluirse en un procedimiento para crear una variable de nivel de procedimiento. (es decir, para que solo "funcione" dentro del procedimiento) El siguiente ejemplo crea la variable NombreTexto y especficamente le asigna el tipo de datos String.
Dim NombreTexto As String

Si esta instruccin aparece dentro de un procedimiento, la variable NombreTexto se puede usar slo en ese procedimiento. Las variables se pueden declarar como uno de los siguientes tipos de datos: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, o Variant. Si no se especifica el tipo de datos, el tipo de datos Variant es el predefinido. Para que conozcan un poco mas sobre los tipos de datos, pueden escribir el nombre del tipo de dato (los sealados en letra cursiva anteriormente) dentro del cdigo de Visual Basic y despus presionar la tecla F1 para que les despliegue la ayuda necesaria. Por lo general, para los programas que desarrollaremos utilizaremos variables de tipo Variant.
Autor: Camilo Andrs Santos Ardila - 2002 5

4. Instruccin For...Next
Repite un grupo de instrucciones un nmero especificado de veces. Sintaxis de la instruccin For..Next For contador = principio To fin [Step incremento] [instrucciones] [Exit For] [instrucciones] Next [contador] La sintaxis de la instruccin For...Next consta de las siguientes partes: i.) contador: Requerido. Variable numrica que se utiliza como contador de bucle. La variable no puede ser de tipo Boolean, ni ningn elemento de matriz. ii) principio: Requerido. Valor inicial del contador. iii) fin: Requerido. Valor final del contador. iv) incremento: Opcional. Cantidad en la que cambia el contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de incremento es uno. v) instrucciones: Opcional. Una o ms instrucciones entre For y Next que se ejecutan un nmero especificado de veces. Se pueden colocar en el bucle cualquier nmero de instrucciones Exit For como una manera alternativa de salir del mismo. Ejemplo: En este ejemplo se utiliza la instruccin For...Next para listar los nmeros pares en el rango de celdas A1 a la A10 de los hoja de calculo en donde se ejecute el macro.
Sub ejemplo2() Dim n As Variant ' Define la variable n For n = 1 To 10 ' Establece 10 repeticiones. Cells(n, 1).Value = n * 2 'Le asigna el valor a la celda Next n ' Incrementa el contador End Sub

A la hora de repetir una serie de instrucciones tambin pueden ser tiles: Instruccin Do...Loop: Repite un bloque de instrucciones cuando una condicin es True o hasta que una condicin se convierta en True. Instruccin While...Wend: Ejecuta una serie de instrucciones mientras una condicin dada sea True. Su sintaxis se puede mirar en el Help de Visual Basic o con la utilizacin de la tecla F1 como se ha mencionado anteriormente.

Autor: Camilo Andrs Santos Ardila - 2002

5. Instruccin If..Then..Else
Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresin. Sintaxis de la instruccin If..Then..Else Sintaxis 1 If condicin Then [instrucciones]-[Else instrucciones_else] Nota: Con la sintaxis 1 es posible ejecutar mltiples instrucciones como resultado de una decisin If...Then, pero todas deben estar en la misma lnea y separadas por dos puntos, como en la instruccin siguiente:
If A > 10 Then A = A + 1 : B = B + A : C = C + B

Sintaxis 2 (en formato de bloque): If condicin Then [instrucciones] [ElseIf condicin-n Then [instrucciones_elseif] ... [Else [instrucciones_else]] End If En una instruccin con formato de bloque el If..Then debe ser la primera lnea y su bloque debe terminar con una instruccin End If. La sintaxis de la instruccin If...Then...Else consta de las siguientes partes: i.) condicin: Requerido. Uno o ms de los siguientes tipos de expresiones: Una expresin numrica o expresin de cadena que puede ser evaluada como True o False. Si condicin es Null, condicin se considera False. iii.) instrucciones: Opcional en formato de bloque; se requiere en formato de lnea sencilla que no tenga una clusula Else. Una o ms instrucciones separadas por dos puntos ejecutados si la condicin es True. iv.) Instrucciones_elseif: Opcional. Una o ms instrucciones ejecutadas si la condicin-n asociada es True. v.) condicin-n: Opcional. Igual que condicin. Se encuentra asociado con la n-esima condicin del n-esimo ElseIf que se utilice. vi.) instrucciones_else: Opcional. Una o ms instrucciones ejecutadas si ninguna de las expresiones anteriores condicin o condicin-n es True. Puede utilizar la forma de una sola lnea (Sintaxis 1) para pruebas cortas y sencillas. Sin embargo, el formato de bloque (Sintaxis 2) proporciona ms estructura y flexibilidad que la forma de lnea simple y, generalmente, es ms fcil de leer, de mantener y de depurar.

Autor: Camilo Andrs Santos Ardila - 2002

Las clusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas clusulas If como desee. Ninguna clusula If puede aparecer despus de una clusula Else. Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras. Cuando se ejecuta un bloque If (Sintaxis 2), se prueba condicin: Si condicin es True, se ejecutan las instrucciones que estn a continuacin de Then. Si condicin es False, se evalan una a una las condiciones ElseIf (si existen). Cuando se encuentra una condicin True se ejecutan las instrucciones que siguen inmediatamente a la instruccin Then asociada. Si ninguna de las condiciones ElseIf es True (o si no hay clusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Despus de la ejecucin de las instrucciones que siguen a Then o Else, la ejecucin contina con la instruccin que sigue a End If. Ejemplo: Este ejemplo muestra los dos posibles usos de If...Then...Else como bloque y en una nica lnea.
Dim Nmero, Dgitos, MiCadena as Variant Nmero = 53 ' Inicializa variable. If Nmero < 10 Then Dgitos = 1 ElseIf Nmero < 100 Then ' La condicin es True, por lo que se ejecuta la siguiente instruccin. Dgitos = 2 Else Dgitos = 3 End If ' Asigna un valor con la sintaxis de una lnea. If Dgitos = 1 Then MiCadena = "Una" Else MiCadena = "Ms de una"

Instrucciones o funciones similares que tambin podran ser tiles pueden ser: Instruccin Select Case: Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresin. Funcin Choose: Selecciona y devuelve un valor de una lista de argumentos. Funcin Switch: Evala una lista de expresiones y devuelve un valor Variant o una expresin asociada a la primera instruccin de la lista que da como resultado True. Su sintaxis o forma de utilizacin se puede mirar en el Help de Visual Basic o con la utilizacin de la tecla F1 como se ha mencionado anteriormente.

Autor: Camilo Andrs Santos Ardila - 2002

6. Asignacin de Celdas
Para asignarle valores a las celdas de la hoja de calculo donde se ejecuta el macro se ejecuta la instruccin: Cells([#de la fila],[#de la columna]).Value = "Valor que se le desea asignar" Ejemplos:
Cells(5,1).Value = 7

Esta instruccin le asigna a la celda A5 de la hoja de calculo el valor de 7


Cells(2,3).Value = "Valor"

Esta instruccin escribe dentro de la celda C2, la palabra Valor Se puede utilizar el valor de celdas ya asignadas para la realizacin de formulas Ejemplo:
Dim Var As Variant Var = Cells(5,1).Value + 1 'Le asigna a la variable Var el valor 'de la celda A5 sumado a 1 Cells(5,2).Value = Cells(5,1) + 5 'Le asigna a la celda B5 de la hoja de calculo, 'el valor de la celda A5 sumado a 5

7. Funciones Matemticas de Visual Basic


Visual Basic posee una serie de funciones matemticas que pueden ser utilizadas para la realizacin de formulas. Abs (Funcin): Devuelve un valor del mismo tipo que el que se pas como parmetro y que especifica el valor absoluto de un nmero. Sintaxis de la funcion abs Abs(nmero) El argumento nmero puede ser cualquier expresin numrica vlida. Si nmero contiene Null, la funcin devolver Null; si es una variable no inicializada, devolver cero. Ejemplo: En este ejemplo se utiliza la funcin Abs para calcular el valor absoluto de un nmero.
Dim MyNumber As Variant MyNumber = Abs(50.3) ' Devuelve 50,3. MyNumber = Abs(-50.3) ' Devuelve 50,3.

Exp (Funcin): Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia.
Autor: Camilo Andrs Santos Ardila - 2002 9

Sintaxis de la funcin exp Exp(nmero) Ejemplo:


Dim Var, Num as Variant Var = 3.5 Num = Exp(Var)

Rnd (Funcin): Devuelve un tipo Single que contiene un nmero aleatorio. Sintaxis de la funcin Rnd Rnd[(nmero)] La funcin Rnd devuelve un valor menor que 1 pero mayor o igual que cero. El argumento opcional nmero es un tipo Single o cualquier expresin numrica vlida. i.) Si nmero es menor que cero Rnd genera el mismo nmero todas las veces, utilizando nmero como valor de semilla. ii.) Si nmero es mayor que cero Rnd genera el siguiente nmero aleatorio de la secuencia. iii.) Si nmero igual a cero Rnd genera el nmero generado ms recientemente. iv.) Si nmero no se especifica Rnd genera el siguiente nmero aleatorio de la secuencia. (Igual a ii) El valor de nmero determina cmo la funcin Rnd genera un nmero aleatorio: Para cualquier valor de semilla inicial se genera la misma secuencia de nmeros. Esto se debe a que cada llamada sucesiva a la funcin Rnd usar el nmero anterior como valor de semilla para el siguiente nmero de la secuencia. Antes de llamar a la funcin Rnd, se puede utilizar la instruccin Randomize sin argumento para inicializar el generador de nmeros aleatorios con un valor de semilla basado en el reloj del sistema. (Esto es opcional) Para producir enteros aleatorios en un intervalo dado, use esta frmula:
Int((Lmite_superior - lmite_inferior + 1) * Rnd + lmite_inferior)

Aqu, lmite_superior es el nmero mayor del intervalo y lmite_inferior es el nmero menor del intervalo. Ejemplo: En este ejemplo se utiliza la funcin Rnd para generar un valor entero aleatorio del 1 al 6.
Dim MyValue As Variant MyValue = Int((6 * Rnd()) + 1)

As mismo, Visual Basic posee otras funciones matemticas que se utilizan de forma similar: Atn (Funcin): Devuelve el arcotangente de un numero Cos (Funcin), Sin(Funcin) y Tan(Funcin): Devuelve el coseno, el seno y la tangente de un angulo

Autor: Camilo Andrs Santos Ardila - 2002

10

Int, Fix (Funcin): Devuelve un valor del mismo tipo que el que se pas como parmetro y que contiene la parte entera de un nmero. Log (Funcin): Devuelve un tipo Double que especifica el logaritmo natural de un nmero. Sgn (Funcin): Devuelve un tipo Variant (Integer) que indica el signo de un nmero. Sqr (Funcin): Devuelve un tipo Double que especifica la raz cuadrada de un nmero.

La sintaxis y la forma de utilizacin de estas funciones se puede mirar en el Help de Visual Basic o con la utilizacin de la tecla F1 como se ha mencionado anteriormente.

8. Funciones bsicas de "interaccin" con el usuario


Funcin InputBox: Muestra un mensaje en un cuadro de dilogo, espera que el usuario escriba un texto o haga clic en un botn y devuelve un tipo String con el contenido del cuadro de texto. Sintaxis de la funcin InputBox: InputBox(prompt, [title], [default], [xpos], [ypos], [helpfile], [context]) La sintaxis de la funcin InputBox consta de estos argumentos con nombre: i.) prompt: Requerido. Expresin de cadena que se muestra como mensaje en el cuadro de dilogo. La longitud mxima de prompt es de aproximadamente 1024 caracteres, segn el ancho de los caracteres utilizados. Si prompt consta de ms de una lnea, puede separarlos utilizando un carcter de retorno de carro (Chr(13)), un carcter de avance de lnea (Chr(10)) o una combinacin de los caracteres de retorno de carroavance de lnea (Chr(13) y Chr(10)) entre cada lnea y la siguiente. title: Opcional. Expresin de cadena que se muestra en la barra de ttulo del cuadro de dilogo. Si omite title, en la barra de ttulo se coloca el nombre de la aplicacin. default: Opcional. Expresin de cadena que se muestra en el cuadro de texto como respuesta predeterminada cuando no se suministra una cadena. Si omite default, se muestra el cuadro de texto vaco. xpos: Opcional. Expresin numrica que especifica, en twips, la distancia en sentido horizontal entre el borde izquierdo del cuadro de dilogo y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de dilogo se centra horizontalmente. ypos: Opcional. Expresin numrica que especifica, en twips, la distancia en sentido vertical entre el borde superior del cuadro de dilogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de dilogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el borde superior de la misma. helpfile: Opcional. No ser necesario utilizarlo. context: Opcional. No ser necesario utilizarlo.

ii.) iii.) iv.) v.)

vi.) v.)

Ejemplo: En este ejemplo aparecera un cuadro de dialogo en donde el usuario tiene que digitar un valor para m.

Autor: Camilo Andrs Santos Ardila - 2002

11

Dim m As Variant m = InputBox("Introduzca M")

Esta puede ser una aplicacin importante que muestra las ventajas de la programacin en Visual Basic ya que se esta interactuando con el usuario. Hay que tener claro que esta funcin devuelve variables de tipo string. Por lo tanto si se desea obtener una variable numrica se tiene que utilizar la instruccin Val como se muestra a continuacin:
Dim p As Variant p = InputBox("Introduzca M") p = Val(m) 'Esto hace que la variable p tome su valor numrico

Funcin MsgBox: Muestra un mensaje en un cuadro de dilogo, espera a que el usuario haga clic en un botn y devuelve un tipo Integer correspondiente al botn elegido por el usuario. La sintaxis y la forma de utilizacin de esta funcin se puede mirar en el Help de Visual Basic o con la utilizacin de la tecla F1 como se ha mencionado anteriormente

9. Utilizacin de Funciones de Excel


Tambin se pueden usar la mayora de las funciones de hoja de clculo de Microsoft Excel en los enunciados de Visual Basic. Si desea ver una lista de las funciones de hoja de clculo que puede usar, vea Lista de funciones para hojas de clculo en Visual Basic del Help de Visual Basic. En Visual Basic, las funciones de hoja de calculo de Microsoft Excel pueden ejecutarse mediante el objeto WorksheetFunction. Su forma de utilizacin quedara ms clara con los siguientes ejemplos. Ejemplos: El siguiente procedimiento Sub define tres variables, a una le asigna el valor de una variable entre 1 y 6 (como se vio anteriormente), a la otra le asigna el mximo entre la variable ya definida y 3 utilizando la funcin de Excel Max, y a la tercera se le asigna una variable aleatoria normal estandar.
Sub ejemplo3() Dim n, m As Variant n = Int((6 * Rnd) + 1) m=WorksheetFunction.Max(n, 3) Randomize f = WorksheetFunction.NormSInv(Rnd()) End Sub

El siguiente procedimiento Sub usa la funcin Mn para obtener el valor ms pequeo de un rango de celdas. En primer lugar, se declara la variable miRango como un objeto Range y, a continuacin, se establece como el rango A1:C10 de la Hoja1. Otra variable, respuesta,
Autor: Camilo Andrs Santos Ardila - 2002 12

se asigna al resultado de aplicar la funcin Mn a miRango. Por ltimo, el valor de respuesta se muestra en un cuadro de mensaje.
Sub UseFunction() Dim miRango As Range Set miRango = Worksheets("Hoja1").Range("A1:C10") respuesta = Application.WorksheetFunction.Min(miRango) MsgBox respuesta End Sub

A veces si usa una funcin de hoja de clculo que requiere como argumento una referencia de rango, deber especificar un objeto Range. Nota Las funciones de Visual Basic no usan el calificador WorksheetFunction. Insertar una funcin de hoja de clculo en una celda Para insertar una funcin de hoja de clculo en una celda, especifique la funcin como el valor de la propiedad Formula del objeto Range correspondiente. En el siguiente ejemplo, la funcin ALEATORIO (que genera un nmero aleatorio) se asigna a la propiedad Formula del rango A1:B3 de la Hoja1 del libro activo. Sub InsertFormula() Worksheets("Hoja1").Range("A1:B3").Formula = "=ALEATORIO()" End Sub

10.Ejecucin del Macro


Para ejecutar el macro se utilizan los comandos del men Ejecutar

Ejecutar Sub/UserForm: (o la tecla F5) Ejecuta el procedimiento actual si el cursor est situado en un procedimiento Interrumpir Restablecer

Autor: Camilo Andrs Santos Ardila - 2002

13

11.Ejemplo 1
El siguiente es un ejemplo de un procedimiento Sub que crea cinco columnas en la hoja de calculo. El numero de repeticiones que realiza es una variable de entrada. La primera columna la llama Repeticin # en ella numera las repeticiones. La segunda columna la llama Aleatorio y simplemente genera un numero aleatorio entre 0 y 1. La tercera columna la llama X y genera un numero entero entre 1 y 10. En la cuarta columna se saca el factorial correspondiente al numero de la tercera columna. Y en la quinta columna se evala una condicin.
Sub EjemploFinal() Dim i, n, z As Variant n = InputBox("Introduzca # de Repeticiones") Cells(1, Cells(1, Cells(1, Cells(1, Cells(1, 1).Value 2).Value 3).Value 4).Value 5).Value = = = = = "Repeticion #" "Aleatorio" "X" "Factorial(X)" "Comparacin"

For i = 1 To n Cells(i + 1, 1).Value = i Cells(i + 1, 2).Value = Rnd() z = Int((10 * Rnd()) + 1) Cells(i + 1, 3).Value = z Cells(i + 1, 4).Value = WorksheetFunction.Fact(z) If (Cells(i + 1, 4).Value > 50) Then Cells(i + 1, 5) = 1 Else Cells(i + 1, 5) = 0 End If Next i

End Sub

Autor: Camilo Andrs Santos Ardila - 2002

14

12.Utilizacin del Solver de Excel por medio de macros


Sintaxis Bsica de las instrucciones del SOLVER SolverReset SolverOk SetCell:="$B$73", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$59:$D$64" SolverAdd CellRef:="$B$72", Relation:=2, FormulaText:="$E$48" SolverSolve UserFinish:=True La sintaxis del SOLVER consta de las siguientes instrucciones: SolverReset: Restablece todas las restricciones y selecciones de celda del cuadro de dilogo Parmetros de Solver y restaura los valores predeterminados de todos los valores de Opciones de Solver. SolverOk(SetCell, MaxMinVal, ValueOf, ByChange) SetCell: Opcional. Hace referencia a una celda de la hoja de clculo activa. Corresponde al cuadro "Celda objetivo" del cuadro de dilogo "Parmetros de Solver". Valor de la Funcin Objetivo. MaxMinVal: Opcional. Corresponde a las opciones Mx, Mn y Valor de: del cuadro de dilogo "Parmetros de Solver".
MaxMinVal 1 2 3 Especifica Maximizar Minimizar Coincidencia con un valor especifico

ValueOf: Opcional. Si MaxMinVal tiene el valor 3, deber especificar el valor con el cual coincide la celda objetivo. ByChange: Opcional. La celda o rango de celdas que se cambiarn a fin de obtener el resultado deseado en la celda objetivo. Corresponde al cuadro "Cambiando las celdas" del cuadro de dilogo "Parmetros de Solver". Son las celdas que corresponden a las variables de decisin.

SolverAdd(CellRef, Relation, FormulaText): Agrega una restriccin al problema actual. Equivale a hacer clic en Solver del men Herramientas y, a continuacin, hacer clic en Agregar en el cuadro de dilogo Parmetros de Solver. CellRef: Requerida. Una referencia a una celda o un rango de celdas que constituye el lado izquierdo de una restriccin. Relation: Integer requerido. La relacin aritmtica entre los lados izquierdo y derecho de la restriccin. Si elige 4 o 5, CellRef debe hacer referencia a celdas ajustables (cambiantes) y no debe especificarse FormulaText. FormulaText: Variant opcional. El lado derecho de la restriccin.

Autor: Camilo Andrs Santos Ardila - 2002

15

Relacin 1 2 3 4 5

Relacin Aritmetica <= = >= Las celdas a las que hace referencia CellRef deben tener valores finales enteros Las celdas a las que hace referencia CellRef deben tener el valor final de 0 o 1.

SolverSolve: Inicia una ejecucin de Solver para buscar soluciones. Equivale a hacer clic en "Resolver" del cuadro de dilogo "Parmetros de Solver".

Autor: Camilo Andrs Santos Ardila - 2002

16

13.Matrices
Para la realizacin de algunos programas es muy til la utilizacin de matrices. Se puede declarar una matriz para trabajar con un conjunto de valores del mismo tipo de datos. Una matriz es una nica variable con muchos elementos en que se pueden almacenar valores, mientras que una variable normal tiene slo un rea de almacenamiento en el que slo se puede archivar un valor. Las matrices se declaran igual que las restantes variables, utilizando instrucciones como Dim. La diferencia entre las variables escalares (aquellas que no son matrices) y las variables matriz es que normalmente se debe especificar el tamao de la matriz. Por ejemplo, se puede declarar una variable matriz con 10 elementos en lugar de declarar 10 variables. La siguiente instruccin declara la variable matriz precios con 10 elementos. Si no se especifica lo contrario, el ndice de una matriz comienza por el cero.
Dim precios(9) As Variant

Para dar valor a un elemento individual, es preciso especificar el ndice del elemento. El siguiente ejemplo asigna un valor inicial de 20 a todos los elementos de la matriz.
Sub LlenarMatriz() Dim precios(9) As Variant 'Define la variable precios Dim i As Integer 'Define el contador For i = 0 to 9 'Establece 10 repeticiones precios(i) = 20 'Asigna 20 a cada elemento de la matriz Next i 'Incrementa el contador End Sub

Se puede usar la instruccin Option Base al principio de un mdulo para cambiar el ndice predefinido del primer elemento del 0 al 1. En el siguiente ejemplo, la instruccin Option Base cambia el ndice del primer elemento y la instruccin Dim declara la variable matriz precios con 10 elementos.
Option Base 1 Dim precios(10) As Variant

Tambin se puede fijar de forma explcita el lmite inferior de una matriz mediante el uso de la clusula To tal y como muestra el siguiente ejemplo.
Dim precios(1 To 10) As Variant

En Visual Basic se pueden declarar matrices con hasta 60 dimensiones. Por ejemplo, la siguiente instruccin declara una matriz de dos dimensiones, de 5 por 10.
Dim matrizdimensiones(1 To 5, 1 To 10) As Variant

Si considera a la matriz como una tabla de dos entradas, el primer argumento representara a las filas y el segundo a las columnas. Utilice instrucciones For...Next para operar con matrices de dimensiones mltiples. Una matriz con un tamao especificado es una matriz de tamao fijo. Una matriz cuyo tamao puede cambiar mientras el programa se est ejecutando es una matriz dinmica.

Autor: Camilo Andrs Santos Ardila - 2002

17

Declaracin de matrices dinmicas Al declarar una matriz dinmica se puede cambiar el tamao de una matriz mientras que el cdigo se est ejecutando. Para declarar una matriz dinmica se puede usar la instruccin Dim dejando los parntesis vacos, tal y como se muestra en el siguiente ejemplo.
Dim MatrizSencilla() As Variant

Se puede usar la instruccin ReDim para declarar implcitamente una matriz dentro de un procedimiento. Tenga cuidado para no cambiar el nombre de la matriz cuando use la instruccin ReDim. La instruccin ReDim se puede utilizar en un procedimiento para cambiar el nmero de dimensiones, definir el nmero de elementos y para definir los lmites superior e inferior para cada dimensin. Se puede usar la instruccin ReDim para modificar la matriz dinmica cuantas veces sea necesario. Sin embargo, cada vez que se hace, se pierden los valores almacenados en la matriz. Ejemplo:
Sub LlenarMatriz() Dim precios() As Variant 'Define la matriz dinmica precios Dim i As Integer 'Define el contador Redim precios(9) 'Define la dimensin de la matriz en 10 For i = 0 to 9 'Establece 10 repeticiones precios(i) = 20 'Asigna 20 a cada elemento de la matriz Next i 'Incrementa el contador End Sub

Algunas funciones de Excel relacionadas con matrices MMULT

Devuelve la matriz producto de dos matrices. El resultado es una matriz con el mismo nmero de filas que matriz1 y el mismo nmero de columnas que matriz2. Sintaxis de la funcin MMult
matriz3 = WorksheetFunction.MMult(matriz1,matriz2) matriz1; matriz2 son las matrices que desea multiplicar. matriz3 es la matriz a la que se le asigna el resultado de la multiplicacin. La variable matriz3 es una variable que no

ha sido declarada en ninguna parte del cdigo. Despus de la asignacin, el ndice del primer elemento de matriz3 ser 1. El nmero de columnas en matriz1 debe ser el mismo que el nmero de filas en matriz2 y ambas matrices slo pueden contener nmeros. Los argumentos matriz1 y matriz2 pueden expresarse como rangos de celdas, constantes matriciales o referencias.

Autor: Camilo Andrs Santos Ardila - 2002

18

MINVERSE

Devuelve la matriz inversa de la matriz almacenada en una matriz. Sintaxis de la funcin Minverse
Matrizinversa = WorksheetFunction.MInverse(Matriz) Matriz es una matriz numrica con el mismo nmero de filas y de columnas. Matrizinversa es la matriz a la que se le asigna el resultado de la operacin. La variable Matrizinversa es una variable que no ha sido declarada en ninguna parte del cdigo. Despus de la asignacin, el ndice del primer elemento de Matrizinversa ser 1.

TRANSPOSE

Se utiliza para cambiar la orientacin vertical y horizontal de una matriz en una hoja de clculo. Sintaxis de la funcin Transpose
Matrizt = WorksheetFunction.Transpose(Matriz)

La transposicin de una matriz se crea utilizando la primera fila de la matriz como primera columna de la nueva matriz, la segunda fila de la matriz como segunda columna de la nueva matriz y as sucesivamente. Matrizt es la matriz a la que se le asigna el resultado de la operacin. La variable Matrizt es una variable que no ha sido declarada en ninguna parte del cdigo. Despus de la asignacin, el ndice del primer elemento de Matrizt ser 1. ESTIMACIN LINEAL

Calcula las estadsticas de una regresin lineal utilizando el mtodo de "mnimos de cuadrados" para calcular la funcin que mejor se ajuste a los datos y devuelve una matriz que describe los parmetros de la funcin. La ecuacin para la lnea es: Y = m1 X 1 + m2 X 2 + ...... + b (*)

donde el valor Y dependiente es funcin de los valores X independientes. Los valores m son coeficientes que corresponden a cada valor X, y b es un valor constante. Observe que Y, X y m pueden ser vectores. La matriz que devuelve ESTIMACION.LINEAL es [mn mn 1 mn 2 ...... m1 b] . ESTIMACION.LINEAL tambin puede devolver estadsticas de regresin adicionales. Sintaxis de la funcin EstimacionLineal
Coef = Application.WorksheetFunction.LinEst(CY,CX,Constante,Est)

Autor: Camilo Andrs Santos Ardila - 2002

19

CY es el conjunto de valores Y que se conocen en la relacin (*). Si la matriz CY est en una sola columna, cada columna de CX se interpreta como variable independiente. Si la matriz CY est en una sola fila, cada fila de CX se interpreta como variable independiente. CX es el conjunto de valores X que pueden conocerse en la relacin (*). La matriz CX puede incluir uno o varios conjuntos de variables. Si slo se utiliza una variable, CY y CX pueden ser matrices de cualquier forma, siempre que tengan las mismas dimensiones. Si se utiliza ms de una variable, CY debe ser un vector (es decir, una matriz con el alto de una fila o con el ancho de una columna). Constante es un valor lgico que especifica si debe forzarse la constante b para que sea igual a 0. Si Constante es True o se omite, b se calcula normalmente. Si Constante es False, b se establece como igual a 0 y los valores m se ajustan para encajar en y = mx. Est es un valor lgico que especifica si deben devolverse estadsticas de regresin adicionales. Si Est es True, ESTIMACION.LINEAL devuelve las estadsticas de regresin adicionales, de forma que la matriz devuelta es [mn,mn-1,...,m1,b;sen,senFalse o se omite, 1,...,se1,seb;r2,sey;F,df;ssreg,ssresid]. Si Est es ESTIMACION.LINEAL slo devuelve los coeficientes m y la constante b. Las estadsticas de regresin adicional se pueden consultar en la ayuda de Visual Basic. Coef es la matriz a la que se le asigna el resultado de la operacin. La variable Coef es una variable que no ha sido declarada en ninguna parte del cdigo. Despus de la asignacin, el ndice del primer elemento de Coef ser 1.

14.Ejemplo 2
En este ejemplo se definen las siguientes variables y se realizan varias operaciones.

matriz X=

10 4 6 8 10

1 4 5 2 25

matrizA =

1 0 0 0 0 1

1 1 0 0 0 2

1 1 1 0 0 3

1 1 1 1 0 4

1 1 1 1 1 5

matrizY =

Para seguir las diferentes variables durante la ejecucin del programa puede incluir la ventana de Locales (En el men Ver de la ventana de Visual Basic y despus seleccionando Ventana Locales) y despus puede ejecutar el programa paso a paso por instrucciones con F8.

Autor: Camilo Andrs Santos Ardila - 2002

20

'Estas variables estan en un modulo y fuera del codigo de algun 'sub, por lo tanto son variables globales que pueden ser 'utilizadas en cualquier sub o function Dim matrizA(), matrizX(), matrizY() As Variant

Sub EjemploMatrices() 'Con la funcion InicializarMatrices definida despues del Sub 'se inicializan las matrices InicializarMatrices 'A la variable Yt que no fue definida anteriormente le asigna 'una matriz de 5 filas y 1 columna, la transpuesta de Y Yt = WorksheetFunction.Transpose(matrizY) 'A inversaA que no fue definida anteriormente le asigna 'una matriz de 5 filas y 5 columnas, la inversa de matrizA inversaA = WorksheetFunction.MInverse(matrizA) 'A vector que no fue definida anteriormente le asigna 'una matriz de 5 filas y 1 columna, la multiplicacion de matrizA 'y Yt vector = WorksheetFunction.MMult(matrizA, Yt) 'A coeficientes que no fue definida anteriormente le asigna 'una matriz con los coeficientes de la regresion coeficientes = WorksheetFunction.LinEst(matrizY, matrizX, False) End Sub 'Funcion definida para inicializar las variables Function InicializarMatrices() ReDim matrizA(4, 4) '5 filas 5 columnas ReDim matrizX(1, 4) '2 filas 5 columnas ReDim matrizY(4) '1 fila 5 columnas 'Procedimiento para llenar el vector Y For i = 0 To 4 matrizY(i) = i + 1 Next i 'Procedimiento For i = 0 To 4 For j = 0 To matrizA(i, Next j Next i For i = 0 To 4 For j = i To matrizA(i, Next j para llenar la matriz A 4 j) = 0

4 j) = 1

Autor: Camilo Andrs Santos Ardila - 2002

21

Next i 'Procedimiento para llenar la matriz X matrizX(0, 0) = 10 matrizX(0, 1) = 4 matrizX(0, 2) = 6 matrizX(0, 3) = 8 matrizX(0, 4) = 10 matrizX(1, 0) = 1 matrizX(1, 1) = 4 matrizX(1, 2) = 5 matrizX(1, 3) = 2 matrizX(1, 4) = 25 End Function

Autor: Camilo Andrs Santos Ardila - 2002

22

15.Comandos de formularios dentro de la hoja de calculo


En la hoja de calculo se pueden dibujar comandos de formularios para hacer una interfaz ms amigable con el usuario. Para esto, se utiliza la barra de herramientas de formularios. Para mostrar esta barra de herramientas se selecciona del men de la hoja de calculo la opcin Ver, despus Barras de Herramientas y despus Formularios. De inmediato debe aparecer una ventana con varios comandos como se ilustra en la figura de la derecha. Con el comando "botn" se puede dibujar un botn de comando en el lugar que se desee de la hoja de clculo. Y este botn se puede referenciar para la ejecucin del macro que se desee. Para asignar alguna macro se oprime con el botn derecho del mouse el botn, cuando se despliegue el men se selecciona la opcin "Asignar macro..." y se selecciona el macro que se desee asignar.

Otras comandos muy tiles son "Casilla de verificacin", "Botn de Opcin" y "Cuadro Combinado". Por lo general, estos comandos tienen referencias con celdas de la hoja de clculo.

16.Elaboracin de formularios personalizados


Para crear un formulario de usuario, haga clic en UserForm en el men Insertar del Editor de Visual Basic. Entonces aparecer una nueva ventana que tendr como titulo "[UserForm1 (UserForm)]". Esta ventana estar acompaada de una pequea ventana con el titulo "Cuadro de Herramientas" en donde se encuentran todos los controles que pueden ser incluidos dentro del formulario. Un objeto UserForm es una ventana o cuadro de dilogo que conforma una parte del interfaz de usuario de una aplicacin. Utilice la ventana Propiedades para cambiar el nombre, comportamiento y aspecto del formulario. Por ejemplo, para cambiar el ttulo de un formulario, cambie la propiedad Caption.

Autor: Camilo Andrs Santos Ardila - 2002

23

Con la elaboracin de formularios personalizados se pretende establecer una interfaz mucho ms amigable con el usuario del programa. Los formularios son muy tiles en reemplazo de la funcin InputBox cuando se desea recibir varias variables en un mismo formulario por parte del usuario. Aprenderemos como realizar un formulario por medio de un ejemplo en donde se reciben dos variables. De esta forma los controles que utilizaremos del cuadro de herramientas sern los siguientes: Seleccionar Objetos: permite seleccionar objetos del formulario Etiqueta (Label) Cuadro de Texto (TextBox) Botn de Comando (CommandButton) Utilizando estos controles, con el mouse se puede dibujar el siguiente formulario:

Autor: Camilo Andrs Santos Ardila - 2002

24

Cuando el formulario ya esta diseado hay que establecer el cdigo adecuado para utilizarlo correctamente. De esta forma, los pasos para la utilizacin del formulario de este ejemplo van a ser los siguientes: 1.) Llamar el formulario: El formulario se puede llamar a travs de la instruccin UserForm1.Show. Esta se instruccin se puede incluir dentro del cdigo de algn botn de comando que se dibuje dentro de la misma hoja de calculo. 2.) Utilizacin del formulario: El usuario utiliza el formulario para incluir los datos que le estn solicitando. 3.) Ejecucin de la macro: En el cdigo del botn de comando del formulario se utiliza el nombre del macro que se desee ejecutar. Para ingresar al cdigo del botn del formulario se hace dobleclick con el mouse sobre el botn. Debe aparecer una ventana con el siguiente titulo: "UserForm1(Cdigo)" Por ejemplo
Private Sub CommandButton1_Click() Macroejemplo End Sub 'Nombre del macro

4.) Lectura de las variables dentro del macro: Dentro del cdigo del macro el valor de los cuadros de texto se pueden asignar a variables por medio de un conjunto de instrucciones de la siguiente forma:
variable1 variable1 variable2 variable2 = = = = UserForm1.TextBox1 Val(variable1) UserForm1.TextBox2 Val(variable2)

5.) Esconder el formulario: Dentro del cdigo del macro despus de la lectura delos datos el formulario se oculta por medio de la instruccin UserForm1.Hide.

Referencias
Ayuda de Microsoft Excel 2000

Para aplicaciones de finanzas con Visual Basic de Excel ver: Simon Benninga. "Financial Modeling". The MIT Press. Algunas referencias sobre Excel y su aplicacin de Visual Basic que no he podido observar: Reed Jacobson, "Microsoft Excel 2000 VBA Fundamentals", Microsoft Press, 1999 John Walkenbach, "Microsoft Excel 2000 Power Programming with VBA," IDG Books, 1999. Peter Aitken, "Developing Solutions with Office 2000 Components and VBA," Prentice-Hall, 2000. "Microsoft Office Programmer's Guide," (http://www.microsoft.com/officedev/articles/Opg/toc/PGTOC.htm)

Autor: Camilo Andrs Santos Ardila - 2002

25

Das könnte Ihnen auch gefallen