Beruflich Dokumente
Kultur Dokumente
**
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
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.
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.
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.
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.
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.
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 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
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
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
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.
vi.) v.)
Ejemplo: En este ejemplo aparecera un cuadro de dialogo en donde el usuario tiene que digitar un valor para m.
11
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
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
Ejecutar Sub/UserForm: (o la tecla F5) Ejecuta el procedimiento actual si el cursor est situado en un procedimiento Interrumpir Restablecer
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
14
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.
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".
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.
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
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.
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)
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.
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
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
22
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.
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:
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)
25