visualbasic para excel

25
Guía para la elaboración de talleres de computador Visual Basic en Microsoft Excel * Finanzas Matemáticas 2002-I Este "manual" de Visual Basic en Excel contiene información muy básica sobre la realización de Macros de Excel. Con esta guía, se pretende que los estudiantes se empiecen a familiarizar con la creación de Macros en Excel para que obtengan algunas herramientas básicas que les permitan seguir aprendiendo por si mismos, ya sea estudiando bibliografía especializada o con la utilización de la Ayuda que viene con Excel. La idea fundamental es aplicar los conceptos básicos aprendidos en los cursos de programación, para utilizar una herramienta muy útil y flexible como Excel. Esto debido a que la utilización de un lenguaje de programación es fundamental en estos días para automatizar tareas e implementar diferentes tipos de modelos matemáticos. Aunque existen muchos otros lenguajes de programación, se escogió Excel y su herramienta de Visual Basic debido a su enorme flexibilidad y su fácil acceso ya que es un programa que se encuentra disponible en la mayor parte de los computadores. Excel tiene grandes ventajas en la creación de "ambientes amigables" con el usuario, por ejemplo cambiando el color de algunos rangos de celdas, creando líneas guías para tablas, cambiando el tamaño y el estilo del texto o elaborando interfaces con botones de comando o menús de opciones. Adicionalmente, Excel tiene un gran numero de funciones estadísticas y de análisis numérico ya elaboradas que facilitan la implementación de los diferentes modelos. Los conceptos que se aprendan de Excel y Visual Basic podrán ser de ayuda en la elaboración de programas en una gran variedad de áreas. La utilización de Excel para Finanzas Matemáticas tiene como objetivo capacitar al estudiante para que implemente algunos de los modelos estudiados en clase. Los programas que se desarrollaran en este curso serán modelos de simulación de monte carlo y modelos de análisis numérico. Autor: Camilo A. Santos A. ** Versión: 2.0 Año: 2002 * Esta guía y sus versiones anteriores se escribieron con el apoyo del profesor Augusto Perilla. ** Cualquier comentario o sugerencia puede ser enviada al e-mail: [email protected]

Upload: gerardo-ayala

Post on 14-Aug-2015

250 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: VisualBasic Para Excel

Guía para la elaboración de talleres de computador

Visual Basic en Microsoft Excel*

Finanzas Matemáticas 2002-I Este "manual" de Visual Basic en Excel contiene información muy básica sobre la realización de Macros de Excel. Con esta guía, se pretende que los estudiantes se empiecen a familiarizar con la creación de Macros en Excel para que obtengan algunas herramientas básicas que les permitan seguir aprendiendo por si mismos, ya sea estudiando bibliografía especializada o con la utilización de la Ayuda que viene con Excel. La idea fundamental es aplicar los conceptos básicos aprendidos en los cursos de programación, para utilizar una herramienta muy útil y flexible como Excel. Esto debido a que la utilización de un lenguaje de programación es fundamental en estos días para automatizar tareas e implementar diferentes tipos de modelos matemáticos. Aunque existen muchos otros lenguajes de programación, se escogió Excel y su herramienta de Visual Basic debido a su enorme flexibilidad y su fácil acceso ya que es un programa que se encuentra disponible en la mayor parte de los computadores. Excel tiene grandes ventajas en la creación de "ambientes amigables" con el usuario, por ejemplo cambiando el color de algunos rangos de celdas, creando líneas guías para tablas, cambiando el tamaño y el estilo del texto o elaborando interfaces con botones de comando o menús de opciones. Adicionalmente, Excel tiene un gran numero de funciones estadísticas y de análisis numérico ya elaboradas que facilitan la implementación de los diferentes modelos. Los conceptos que se aprendan de Excel y Visual Basic podrán ser de ayuda en la elaboración de programas en una gran variedad de áreas. La utilización de Excel para Finanzas Matemáticas tiene como objetivo capacitar al estudiante para que implemente algunos de los modelos estudiados en clase. Los programas que se desarrollaran en este curso serán modelos de simulación de monte carlo y modelos de análisis numérico. Autor: Camilo A. Santos A.** Versión: 2.0 Año: 2002

* Esta guía y sus versiones anteriores se escribieron con el apoyo del profesor Augusto Perilla. ** Cualquier comentario o sugerencia puede ser enviada al e-mail: [email protected]

Page 2: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 2

TABLA DE CONTENIDO 1. INTRODUCCIÓN .............................................................................................................................. 3

2. CREACIÓN DE UN MACRO............................................................................................................ 4

3. DECLARACIÓN DE VARIABLES................................................................................................... 5

4. INSTRUCCIÓN FOR...NEXT............................................................................................................ 6

5. INSTRUCCIÓN IF..THEN..ELSE..................................................................................................... 7

6. ASIGNACIÓN DE CELDAS.............................................................................................................. 9

7. FUNCIONES MATEMÁTICAS DE VISUAL BASIC ...................................................................... 9

8. FUNCIONES BÁSICAS DE "INTERACCIÓN" CON EL USUARIO........................................... 11

9. UTILIZACIÓN DE FUNCIONES DE EXCEL ............................................................................... 12

10. EJECUCIÓN DEL MACRO ........................................................................................................ 13

11. EJEMPLO 1.................................................................................................................................. 14

12. UTILIZACIÓN DEL SOLVER DE EXCEL POR MEDIO DE MACROS................................. 15

13. MATRICES................................................................................................................................... 17

14. EJEMPLO 2.................................................................................................................................. 20

15. COMANDOS DE FORMULARIOS DENTRO DE LA HOJA DE CALCULO ......................... 23

16. ELABORACIÓN DE FORMULARIOS PERSONALIZADOS .................................................. 23

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

Page 3: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 3

1. Introducción Visual Basic es un lenguaje de programación 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 automáticamente 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. También se puede elaborar el macro para que le construya o modifique una pagina de Excel de acuerdo a sus necesidades. Excel incluye dos métodos 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 programación 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 señale Macro y se desplegara el siguiente menú:

La opción que utilizaremos para crear los macros será la del Editor de Visual Basic con la cuál se desplegara una nueva ventana (llamada Microsoft Visual Basic) en donde se podrá escribir el código 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 después Explorador de Proyectos. Aparecerá una ventana como la siguiente:

Después seleccionamos el menú Insertar y después Módulo. Acá nos aparecerá una nueva ventana que tendrá como titulo "[Módulo1(Código)]". En esta ventana es en donde se podrá escribir el código del macro en Visual Basic.

Page 4: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 4

Cada vez que se desee entrar a esta ventana donde se encuentra el código del macro, se realiza el siguiente procedimiento: se selecciona el modulo que se creo (por ejemplo Modulo1) en la ventana llamada "Proyecto - VBAProject", después se selecciona el menú Ver y después Código (o se oprime la tecla F7). A medida que se va realizando el macro, este se guarda con la opción de la barra de herramientas de guardar o con el comando de Archivo y después Guardar. Así mismo, es recomendable que cuando se encuentren en la ventana de Microsoft Visual Basic, tengan la barra de herramientas estándar 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, después Barras de Herramientas y señalen la opción Estándar. Nota: Los comentarios del programa dentro del código de Visual Basic se escriben después 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 instrucción sobre la que necesita ayuda, oprima F1 y una ventana de ayuda se desplegara indicándole la función, la sintaxis y ejemplos acerca de la instrucción.

• F7: Lo sitúa en la pagina en donde esta escribiendo el código. • Ctrl + R: Lo sitúa en la ventana del Explorador de Proyectos (Proyecto - VBAProject) • Alt + F11: Lo sitúa en la ventana de Microsoft Excel. • F8: Hace que pueda correr el programa paso a paso

2. Creación de un Macro El código dentro de un conjunto de declaraciones o instrucciones se organiza en procedimientos. Un procedimiento comunica a la aplicación para ejecutar una tarea específica. Los procedimientos se pueden utilizar para dividir tareas complejas del código en unidades más 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 después se escribe el código para el procedimiento, y Visual Basic finaliza el procedimiento con la instrucción 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 específicas pero no devuelven ningún 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 instrucción Sub debe incluir un par de paréntesis vacío.

Page 5: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 5

Sintaxis del procedimiento Sub Sub nombre ([listaargumentos]) [instrucciones] [Exit Sub] [instrucciones] End Sub i.) nombre: Requerido. Nombre del Sub; ii.) listaargumentos: Opcional. Lista de variables que representan los argumentos que

son pasados al procedimiento Sub cuando es llamado. Las variables múltiples se separan con puntos y coma.

iii.) 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 paréntesis, '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. Declaración de Variables Para declarar variables se utiliza normalmente una instrucción Dim. La instrucción de declaración 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 específicamente le asigna el tipo de datos String.

Dim NombreTexto As String

Si esta instrucción aparece dentro de un procedimiento, la variable NombreTexto se puede usar sólo 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 señalados en letra cursiva anteriormente) dentro del código de Visual Basic y después presionar la tecla F1 para que les despliegue la ayuda necesaria. Por lo general, para los programas que desarrollaremos utilizaremos variables de tipo Variant.

Page 6: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 6

4. Instrucción For...Next Repite un grupo de instrucciones un número especificado de veces. Sintaxis de la instrucción For..Next For contador = principio To fin [Step incremento] [instrucciones] [Exit For] [instrucciones] Next [contador] La sintaxis de la instrucción For...Next consta de las siguientes partes: i.) contador: Requerido. Variable numérica que se utiliza como contador de bucle. La variable no puede ser de tipo Boolean, ni ningún 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 más instrucciones entre For y Next que se ejecutan un número especificado de veces. Se pueden colocar en el bucle cualquier número de instrucciones Exit For como una manera alternativa de salir del mismo. Ejemplo: En este ejemplo se utiliza la instrucción For...Next para listar los números 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 también pueden ser útiles: • Instrucción Do...Loop: Repite un bloque de instrucciones cuando una condición es

True o hasta que una condición se convierta en True. • Instrucción While...Wend: Ejecuta una serie de instrucciones mientras una condición

dada sea True. Su sintaxis se puede mirar en el Help de Visual Basic o con la utilización de la tecla F1 como se ha mencionado anteriormente.

Page 7: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 7

5. Instrucción If..Then..Else Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión. Sintaxis de la instrucción If..Then..Else Sintaxis 1 If condición Then [instrucciones]-[Else instrucciones_else] Nota: Con la sintaxis 1 es posible ejecutar múltiples instrucciones como resultado de una decisión If...Then, pero todas deben estar en la misma línea y separadas por dos puntos, como en la instrucción siguiente: If A > 10 Then A = A + 1 : B = B + A : C = C + B

Sintaxis 2 (en formato de bloque): If condición Then [instrucciones] [ElseIf condición-n Then [instrucciones_elseif] ... [Else [instrucciones_else]] End If En una instrucción con formato de bloque el If..Then debe ser la primera línea y su bloque debe terminar con una instrucción End If. La sintaxis de la instrucción If...Then...Else consta de las siguientes partes: i.) condición: Requerido. Uno o más de los siguientes tipos de expresiones: • Una expresión numérica o expresión de cadena que puede ser evaluada como True o

False. Si condición es Null, condición se considera False. iii.) instrucciones: Opcional en formato de bloque; se requiere en formato de línea sencilla que no tenga una cláusula Else. Una o más instrucciones separadas por dos puntos ejecutados si la condición es True. iv.) Instrucciones_elseif: Opcional. Una o más instrucciones ejecutadas si la condición-n asociada es True. v.) condición-n: Opcional. Igual que condición. Se encuentra asociado con la n-esima condición del n-esimo ElseIf que se utilice. vi.) instrucciones_else: Opcional. Una o más instrucciones ejecutadas si ninguna de las expresiones anteriores condición o condición-n es True. Puede utilizar la forma de una sola línea (Sintaxis 1) para pruebas cortas y sencillas. Sin embargo, el formato de bloque (Sintaxis 2) proporciona más estructura y flexibilidad que la forma de línea simple y, generalmente, es más fácil de leer, de mantener y de depurar.

Page 8: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 8

Las cláusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas cláusulas If como desee. Ninguna cláusula If puede aparecer después de una cláusula 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 condición: • Si condición es True, se ejecutan las instrucciones que están a continuación de Then. • Si condición es False, se evalúan una a una las condiciones ElseIf (si existen). Cuando

se encuentra una condición True se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si ninguna de las condiciones ElseIf es True (o si no hay cláusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Después de la ejecución de las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción que sigue a End If.

Ejemplo: Este ejemplo muestra los dos posibles usos de If...Then...Else como bloque y en una única línea. Dim Número, Dígitos, MiCadena as Variant Número = 53 ' Inicializa variable. If Número < 10 Then Dígitos = 1 ElseIf Número < 100 Then ' La condición es True, por lo que se ejecuta la siguiente instrucción. Dígitos = 2 Else Dígitos = 3 End If ' Asigna un valor con la sintaxis de una línea. If Dígitos = 1 Then MiCadena = "Una" Else MiCadena = "Más de una"

Instrucciones o funciones similares que también podrían ser útiles pueden ser: • Instrucción Select Case: Ejecuta uno de varios grupos de instrucciones, dependiendo

del valor de una expresión. • Función Choose: Selecciona y devuelve un valor de una lista de argumentos. • Función Switch: Evalúa una lista de expresiones y devuelve un valor Variant o una

expresión asociada a la primera instrucción de la lista que da como resultado True. Su sintaxis o forma de utilización se puede mirar en el Help de Visual Basic o con la utilización de la tecla F1 como se ha mencionado anteriormente.

Page 9: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 9

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

Esta instrucción le asigna a la celda A5 de la hoja de calculo el valor de 7 • Cells(2,3).Value = "Valor"

Esta instrucción escribe dentro de la celda C2, la palabra Valor Se puede utilizar el valor de celdas ya asignadas para la realización 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 Matemáticas de Visual Basic Visual Basic posee una serie de funciones matemáticas que pueden ser utilizadas para la realización de formulas. • Abs (Función): Devuelve un valor del mismo tipo que el que se pasó como parámetro y que especifica el valor absoluto de un número. Sintaxis de la funcion abs Abs(número) El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, la función devolverá Null; si es una variable no inicializada, devolverá cero. Ejemplo: En este ejemplo se utiliza la función Abs para calcular el valor absoluto de un número. Dim MyNumber As Variant MyNumber = Abs(50.3) ' Devuelve 50,3. MyNumber = Abs(-50.3) ' Devuelve 50,3.

• Exp (Función): Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia.

Page 10: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 10

Sintaxis de la función exp Exp(número) Ejemplo: Dim Var, Num as Variant Var = 3.5 Num = Exp(Var)

• Rnd (Función): Devuelve un tipo Single que contiene un número aleatorio. Sintaxis de la función Rnd Rnd[(número)] La función Rnd devuelve un valor menor que 1 pero mayor o igual que cero. El argumento opcional número es un tipo Single o cualquier expresión numérica válida. i.) Si número es menor que cero Rnd genera el mismo número todas las veces,

utilizando número como valor de semilla. ii.) Si número es mayor que cero Rnd genera el siguiente número aleatorio de la

secuencia. iii.) Si número igual a cero Rnd genera el número generado más recientemente. iv.) Si número no se especifica Rnd genera el siguiente número aleatorio de la

secuencia. (Igual a ii) El valor de número determina cómo la función Rnd genera un número aleatorio: Para cualquier valor de semilla inicial se genera la misma secuencia de números. Esto se debe a que cada llamada sucesiva a la función Rnd usará el número anterior como valor de semilla para el siguiente número de la secuencia. Antes de llamar a la función Rnd, se puede utilizar la instrucción Randomize sin argumento para inicializar el generador de números 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 fórmula: Int((Límite_superior - límite_inferior + 1) * Rnd + límite_inferior)

Aquí, límite_superior es el número mayor del intervalo y límite_inferior es el número menor del intervalo. Ejemplo: En este ejemplo se utiliza la función 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 matemáticas que se utilizan de forma similar: • Atn (Función): Devuelve el arcotangente de un numero • Cos (Función), Sin(Función) y Tan(Función): Devuelve el coseno, el seno y la tangente

de un angulo

Page 11: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 11

• Int, Fix (Función): Devuelve un valor del mismo tipo que el que se pasó como parámetro y que contiene la parte entera de un número.

• Log (Función): Devuelve un tipo Double que especifica el logaritmo natural de un número.

• Sgn (Función): Devuelve un tipo Variant (Integer) que indica el signo de un número. • Sqr (Función): Devuelve un tipo Double que especifica la raíz cuadrada de un número. La sintaxis y la forma de utilización de estas funciones se puede mirar en el Help de Visual Basic o con la utilización de la tecla F1 como se ha mencionado anteriormente.

8. Funciones básicas de "interacción" con el usuario Función InputBox: Muestra un mensaje en un cuadro de diálogo, espera que el usuario escriba un texto o haga clic en un botón y devuelve un tipo String con el contenido del cuadro de texto. Sintaxis de la función InputBox: InputBox(prompt, [title], [default], [xpos], [ypos], [helpfile], [context]) La sintaxis de la función InputBox consta de estos argumentos con nombre: i.) prompt: Requerido. Expresión de cadena que se muestra como mensaje en el cuadro

de diálogo. La longitud máxima de prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si prompt consta de más de una línea, puede separarlos utilizando un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una combinación de los caracteres de retorno de carro-avance de línea (Chr(13) y Chr(10)) entre cada línea y la siguiente.

ii.) title: Opcional. Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite title, en la barra de título se coloca el nombre de la aplicación.

iii.) default: Opcional. Expresión 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 vacío.

iv.) xpos: Opcional. Expresión numérica que especifica, en twips, la distancia en sentido horizontal entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se centra horizontalmente.

v.) ypos: Opcional. Expresión numérica que especifica, en twips, la distancia en sentido vertical entre el borde superior del cuadro de diálogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el borde superior de la misma.

vi.) helpfile: Opcional. No será necesario utilizarlo. v.) context: Opcional. No será necesario utilizarlo. Ejemplo: En este ejemplo aparecería un cuadro de dialogo en donde el usuario tiene que digitar un valor para m.

Page 12: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 12

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

Esta puede ser una aplicación importante que muestra las ventajas de la programación en Visual Basic ya que se esta interactuando con el usuario. Hay que tener claro que esta función devuelve variables de tipo string. Por lo tanto si se desea obtener una variable numérica se tiene que utilizar la instrucción Val como se muestra a continuación: Dim p As Variant p = InputBox("Introduzca M") p = Val(m) 'Esto hace que la variable p tome su valor numérico

Función MsgBox: Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un tipo Integer correspondiente al botón elegido por el usuario. La sintaxis y la forma de utilización de esta función se puede mirar en el Help de Visual Basic o con la utilización de la tecla F1 como se ha mencionado anteriormente

9. Utilización de Funciones de Excel También se pueden usar la mayoría de las funciones de hoja de cálculo de Microsoft Excel en los enunciados de Visual Basic. Si desea ver una lista de las funciones de hoja de cálculo que puede usar, vea Lista de funciones para hojas de cálculo 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 utilización quedara más 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 máximo entre la variable ya definida y 3 utilizando la función 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 función Mín para obtener el valor más pequeño de un rango de celdas. En primer lugar, se declara la variable miRango como un objeto Range y, a continuación, se establece como el rango A1:C10 de la Hoja1. Otra variable, respuesta,

Page 13: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 13

se asigna al resultado de aplicar la función Mín 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 función de hoja de cálculo 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 función de hoja de cálculo en una celda Para insertar una función de hoja de cálculo en una celda, especifique la función como el valor de la propiedad Formula del objeto Range correspondiente. En el siguiente ejemplo, la función ALEATORIO (que genera un número 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.Ejecución 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

Page 14: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 14

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 Repetición # 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 evalúa una condición. Sub EjemploFinal() Dim i, n, z As Variant n = InputBox("Introduzca # de Repeticiones") Cells(1, 1).Value = "Repeticion #" Cells(1, 2).Value = "Aleatorio" Cells(1, 3).Value = "X" Cells(1, 4).Value = "Factorial(X)" Cells(1, 5).Value = "Comparación" 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

Page 15: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 15

12.Utilización del Solver de Excel por medio de macros Sintaxis Básica 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 diálogo Parámetros 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 cálculo activa. Corresponde al cuadro "Celda objetivo" del cuadro de diálogo "Parámetros de Solver". Valor de la Función Objetivo.

• MaxMinVal: Opcional. Corresponde a las opciones Máx, Mín y Valor de: del cuadro de diálogo "Parámetros de Solver".

MaxMinVal Especifica

1 Maximizar 2 Minimizar 3 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 cambiarán a fin de obtener

el resultado deseado en la celda objetivo. Corresponde al cuadro "Cambiando las celdas" del cuadro de diálogo "Parámetros de Solver". Son las celdas que corresponden a las variables de decisión.

SolverAdd(CellRef, Relation, FormulaText): Agrega una restricción al problema actual. Equivale a hacer clic en Solver del menú Herramientas y, a continuación, hacer clic en Agregar en el cuadro de diálogo Parámetros de Solver.

• CellRef: Requerida. Una referencia a una celda o un rango de celdas que constituye el lado izquierdo de una restricción.

• Relation: Integer requerido. La relación aritmética entre los lados izquierdo y derecho de la restricción. 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 restricción.

Page 16: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 16

SolverSolve: Inicia una ejecución de Solver para buscar soluciones. Equivale a hacer clic en "Resolver" del cuadro de diálogo "Parámetros de Solver".

Relación Relación Aritmetica 1 <= 2 = 3 >= 4 Las celdas a las que hace referencia

CellRef deben tener valores finales enteros 5 Las celdas a las que hace referencia

CellRef deben tener el valor final de 0 o 1.

Page 17: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 17

13.Matrices Para la realización de algunos programas es muy útil la utilización 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 sólo un área de almacenamiento en el que sólo 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 tamaño de la matriz. Por ejemplo, se puede declarar una variable matriz con 10 elementos en lugar de declarar 10 variables. La siguiente instrucción 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 instrucción Option Base al principio de un módulo para cambiar el índice predefinido del primer elemento del 0 al 1. En el siguiente ejemplo, la instrucción Option Base cambia el índice del primer elemento y la instrucción Dim declara la variable matriz precios con 10 elementos. Option Base 1 Dim precios(10) As Variant

También se puede fijar de forma explícita el límite inferior de una matriz mediante el uso de la cláusula 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 instrucción 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 representaría a las filas y el segundo a las columnas. Utilice instrucciones For...Next para operar con matrices de dimensiones múltiples. Una matriz con un tamaño especificado es una matriz de tamaño fijo. Una matriz cuyo tamaño puede cambiar mientras el programa se está ejecutando es una matriz dinámica.

Page 18: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 18

Declaración de matrices dinámicas Al declarar una matriz dinámica se puede cambiar el tamaño de una matriz mientras que el código se está ejecutando. Para declarar una matriz dinámica se puede usar la instrucción Dim dejando los paréntesis vacíos, tal y como se muestra en el siguiente ejemplo. Dim MatrizSencilla() As Variant Se puede usar la instrucción ReDim para declarar implícitamente una matriz dentro de un procedimiento. Tenga cuidado para no cambiar el nombre de la matriz cuando use la instrucción ReDim. La instrucción ReDim se puede utilizar en un procedimiento para cambiar el número de dimensiones, definir el número de elementos y para definir los límites superior e inferior para cada dimensión. Se puede usar la instrucción ReDim para modificar la matriz dinámica 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 dinámica precios Dim i As Integer 'Define el contador Redim precios(9) 'Define la dimensión 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 número de filas que matriz1 y el mismo número de columnas que matriz2. Sintaxis de la función 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 multiplicación. La variable matriz3 es una variable que no ha sido declarada en ninguna parte del código. Después de la asignación, el índice del primer elemento de matriz3 será 1. El número de columnas en matriz1 debe ser el mismo que el número de filas en matriz2 y ambas matrices sólo pueden contener números. Los argumentos matriz1 y matriz2 pueden expresarse como rangos de celdas, constantes matriciales o referencias.

Page 19: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 19

• MINVERSE Devuelve la matriz inversa de la matriz almacenada en una matriz. Sintaxis de la función Minverse Matrizinversa = WorksheetFunction.MInverse(Matriz) Matriz es una matriz numérica con el mismo número de filas y de columnas. Matrizinversa es la matriz a la que se le asigna el resultado de la operación. La variable Matrizinversa es una variable que no ha sido declarada en ninguna parte del código. Después de la asignación, el índice del primer elemento de Matrizinversa será 1.

• TRANSPOSE Se utiliza para cambiar la orientación vertical y horizontal de una matriz en una hoja de cálculo. Sintaxis de la función Transpose Matrizt = WorksheetFunction.Transpose(Matriz) La transposición 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 operación. La variable Matrizt es una variable que no ha sido declarada en ninguna parte del código. Después de la asignación, el índice del primer elemento de Matrizt será 1.

• ESTIMACIÓN LINEAL Calcula las estadísticas de una regresión lineal utilizando el método de "mínimos de cuadrados" para calcular la función que mejor se ajuste a los datos y devuelve una matriz que describe los parámetros de la función. La ecuación para la línea es:

bXmXmY +++= ......21 21 (*) donde el valor Y dependiente es función 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 [ ]bmmmm nnn 121 ......−− . ESTIMACION.LINEAL también puede devolver estadísticas de regresión adicionales. Sintaxis de la función EstimacionLineal Coef = Application.WorksheetFunction.LinEst(CY,CX,Constante,Est)

Page 20: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 20

CY es el conjunto de valores Y que se conocen en la relación (*). 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 relación (*). La matriz CX puede incluir uno o varios conjuntos de variables. Si sólo se utiliza una variable, CY y CX pueden ser matrices de cualquier forma, siempre que tengan las mismas dimensiones. Si se utiliza más 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 lógico 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 lógico que especifica si deben devolverse estadísticas de regresión adicionales. Si Est es True, ESTIMACION.LINEAL devuelve las estadísticas de regresión adicionales, de forma que la matriz devuelta es [mn,mn-1,...,m1,b;sen,sen-1,...,se1,seb;r2,sey;F,df;ssreg,ssresid]. Si Est es False o se omite, ESTIMACION.LINEAL sólo devuelve los coeficientes m y la constante b. Las estadísticas de regresión adicional se pueden consultar en la ayuda de Visual Basic. Coef es la matriz a la que se le asigna el resultado de la operación. La variable Coef es una variable que no ha sido declarada en ninguna parte del código. Después de la asignación, 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.

Para seguir las diferentes variables durante la ejecución del programa puede incluir la ventana de Locales (En el menú Ver de la ventana de Visual Basic y después seleccionando Ventana Locales) y después puede ejecutar el programa paso a paso por instrucciones con F8.

10 1 1 1 1 1 1matriz X= 4 4 matrizA = 0 1 1 1 1

6 5 0 0 1 1 18 2 0 0 0 1 110 25 0 0 0 0 1

matrizY = 1 2 3 4 5

Page 21: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 21

'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 para llenar la matriz A For i = 0 To 4 For j = 0 To 4 matrizA(i, j) = 0 Next j Next i For i = 0 To 4 For j = i To 4 matrizA(i, j) = 1 Next j

Page 22: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 22

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

Page 23: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 23

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 más 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 opción Ver, después Barras de Herramientas y después Formularios. De inmediato debe aparecer una ventana con varios comandos como se ilustra en la figura de la derecha.

Con el comando "botón" se puede dibujar un botón de comando en el lugar que se desee de la hoja de cálculo. Y este botón se puede

referenciar para la ejecución del macro que se desee. Para asignar alguna macro se oprime con el botón derecho del mouse el botón, cuando se despliegue el menú se selecciona la opción "Asignar macro..." y se selecciona el macro que se desee asignar.

Otras comandos muy útiles son "Casilla de verificación", "Botón de Opción" y "Cuadro Combinado". Por lo general, estos comandos tienen referencias con celdas de la hoja de cálculo.

16.Elaboración 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á acompañada de una pequeña 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 diálogo que conforma una parte del interfaz de usuario de una aplicación. Utilice la ventana Propiedades para cambiar el nombre, comportamiento y aspecto del formulario. Por ejemplo, para cambiar el título de un formulario, cambie la propiedad Caption.

Page 24: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 24

Con la elaboración de formularios personalizados se pretende establecer una interfaz mucho más amigable con el usuario del programa. Los formularios son muy útiles en reemplazo de la función 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 serán los siguientes:

Seleccionar Objetos: permite seleccionar objetos del formulario Etiqueta (Label) Cuadro de Texto (TextBox) Botón de Comando (CommandButton)

Utilizando estos controles, con el mouse se puede dibujar el siguiente formulario:

Page 25: VisualBasic Para Excel

Autor: Camilo Andrés Santos Ardila - 2002 25

Cuando el formulario ya esta diseñado hay que establecer el código adecuado para utilizarlo correctamente. De esta forma, los pasos para la utilización del formulario de este ejemplo van a ser los siguientes:

1.) Llamar el formulario: El formulario se puede llamar a través de la instrucción UserForm1.Show. Esta se instrucción se puede incluir dentro del código de algún botón de comando que se dibuje dentro de la misma hoja de calculo.

2.) Utilización del formulario: El usuario utiliza el formulario para incluir los datos que le están solicitando.

3.) Ejecución de la macro: En el código del botón de comando del formulario se utiliza el nombre del macro que se desee ejecutar. Para ingresar al código del botón del formulario se hace dobleclick con el mouse sobre el botón. Debe aparecer una ventana con el siguiente titulo: "UserForm1(Código)" Por ejemplo Private Sub CommandButton1_Click() Macroejemplo 'Nombre del macro End Sub

4.) Lectura de las variables dentro del macro: Dentro del código 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 = UserForm1.TextBox1 variable1 = Val(variable1) variable2 = UserForm1.TextBox2 variable2 = Val(variable2)

5.) Esconder el formulario: Dentro del código del macro después de la lectura delos

datos el formulario se oculta por medio de la instrucción 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 aplicación 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)