Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Visual Basic para Aplicaciones (Ejemplos y Ejercicios)
Visual Basic para Aplicaciones (Ejemplos y Ejercicios)
1 1
Pgina 2
Explicacin: Lnea 1: Sub es la instruccin que inicia la macro, la indicacin Entero1() corresponde al nombre que hemos asignado a dicha macro, este nombre puede cambiarse por cualquier otro que se crea conveniente. Lnea2: Declaramos una variable de nombre Entero mediante la instruccin Dim y le asignamos el tipo de Datos Integer (Entero) mediante la instruccin As Lnea 3: Mediante un la instruccin al InputBox y lo solicitamos dato usuario
guardamos en la variable Entero. Lnea 4: Mediante la instruccin If iniciamos el bloque de decisin y comprobamos si valor guardado en la Variable Entero es mayor a cero y de ser as pasamos el control a la instruccin Then, que pasa el control a la lnea 5, sino pasa el control a la lnea 6, literalmente Si Entero >0 entonces Lnea 5: Mediante la instruccin Msgbox mostramos un mensaje donde se indica que el nmero es positivo. Lnea 6: Mediante la instruccin ElseIf se realiza otra comprobacin, en este caso si el valor guardado en Entero es menor a cero y de
1 2 3 4 5 6 7 8 9 10 2
Sub Entero1() Dim Entero As Integer Entero = InputBox("Ingrese un nmero entero", "Cuadro de Ingreso de Datos") If Entero > 0 Then MsgBox "El dato es positivo", vbInformation + vbOKOnly, "Informacin sobre el dato ingresado" ElseIf Entero < 0 Then MsgBox "El dato es negativo", vbInformation + vbOKOnly, "Informacin sobre el dato ingresado"
ser as se pasa el control a la instruccin Then que pasa el control a la lnea 7, sino pasa el control a la lnea 8. Lnea 7: Mediante la instruccin MsgBox se muestra un mensaje donde se indica que el nmero es negativo Lnea 8: Mediante la instruccin Else se indica que si no se ha cumplido ninguna de las
Pgina 3
1
condiciones anteriores (Entero >0 o Entero <0) se ejecute la lnea 9 Lnea 9: Mediante la instruccin MsgBox se muestra un mensaje indicando que el nmero es cero. Lnea 10: Mediante la instruccin End If acabamos con el bloque de decisin. Lnea 11: Mediante la instruccin End Sub acabamos con la macro.
Pgina 4
1 2 3 4 5 6 7 8 9 10
Sub Nombres() Dim Nombre As String Nombre = InputBox("Ingrese su nombre", "Ingreso de Datos") If Nombre = "Alex" Then MsgBox "Hola " & Nombre & "!" Else MsgBox "No te conozco " & Nombre End If End Sub
con el bloque de decisin. Lnea 9: Mediante la instruccin End Sub acabamos con la macro.
Explicacin: Lnea 1: Sub es la instruccin que inicia la macro, la indicacin Nombres() corresponde al nombre que hemos asignado a dicha macro, este nombre puede cambiarse por cualquier otro que se crea conveniente. Lnea2: Declaramos una variable de nombre Nombre mediante la instruccin Dim y le
Pgina 5
Solicita un monto, un periodo de tiempo, una tasa 2 y devuelve el inters simple generado. A los datos 3 ingresados se les hace comprobacin para 4 determinar si son vlidos. 5 Diagrama del Problema
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Sub InteresSimple() Dim Principal As Currency Dim Tiempo As Integer Dim Tasa As Single Dim Resultado As Single EntradaCapital: Principal = InputBox("Ingrese el capital a Invertir", "Clculo Principal") If Principal <= 0 Then MsgBox "Datos no vlidos", vbCritical + vbOKOnly, "Error en Datos" GoTo EntradaCapital End If EntradaTiempo: Tiempo = InputBox("Ingrese el periodo de tiempo") If Tiempo <= 0 Then MsgBox "Datos no vlidos", vbCritical + vbOKOnly, "Erro en Datos" GoTo EntradaTiempo End If EntradaTasa: Tasa = InputBox("Ingrese el valor de la tasa sin el signo de %", "Ingreso de Tasa") If Tasa <= 0 Then MsgBox "Datos no vlidos", vbCritical + vbOKOnly, "Error en Datos" GoTo EntradaTasa End If Resultado = Principal * (Tasa / 100) * Tiempo MsgBox "El inters generado es de " & Resultado, vbInformation + vbOKOnly, "Inters Generado" End Sub
Explicacin: Lnea 1: Sub es la instruccin que inicia la macro, la indicacin InteresSimple() corresponde al nombre que hemos asignado a dicha macro, este nombre puede cambiarse por cualquier otro que se crea conveniente. Lnea2: Declaramos el una tipo variable de de nombre Currency Principal mediante la instruccin Dim y le asignamos Datos (Moneda) mediante la instruccin As Lnea 3: Declaramos una variable de nombre Tiempo mediante la instruccin Dim y le
Pgina 6
guardamos en la variable Principal. Lnea 8: Mediante la instruccin If iniciamos el bloque de decisin y comprobamos si valor guardado en la Variable Principal es menor o igual a cero y de ser as pasamos el control a la instruccin Then, que pasa el control a la lnea 9, sino pasa el control a la lnea 11, literalmente Si Principal es negativo o cero entonces Lnea 9: Mediante la instruccin MsgBox se muestra un mensaje de Datos no vlidos. Lnea 10: Mediante la instruccin GoTo pasamos el control a la etiqueta EntradaCapital (Lnea 6) Lnea 11: Mediante la instruccin End If acabamos con el bloque de decisin. Lnea 12: Asignamos una etiqueta EntradaTiempo para luego hacer referencia a esa lnea de cdigo. Lnea 13: Mediante solicitamos un periodo de tiempo al usuario y lo guardamos en la variable Tiempo. Lnea 14: Mediante la instruccin If iniciamos el bloque de decisin y comprobamos si valor guardado en la Variable Tiempo es menor o igual a cero y de ser as pasamos el control a
Pgina 7
1
Ejercicios Propuestos 1) Crear una macro que solicite dos nmeros enteros y devuelva un mensaje indicando cul es el mayor. 2) Crear una macro que solicite tres nmeros y devuelva un mensaje con los nmeros ordenados de manera descendente (de mayor a menor). 3) Crear una macro que solicite el capital invertido(Principal), el periodo de inversin y el capital obtenido al final del periodo y devuelva un mensaje con la tasa aplicada para obtener dicho capital.(Inters simple) Ejemplo 4: Instruccin Condicional Solicita un dato y devuelve un mensaje indicando si es positivo, negativo o cero. Diagrama del Problema Ver Ejemplo 4 Lnea
guardamos en la variable Valor1. instruccin Select Case bloque las de decisin y diversas el posibilidades caso para se iniciamos
determina si el valor guardado en Valor1 es mayor a Cero y de ser as se pasa el control a la lnea 6, en caso contrario se pasa a la lnea 7. Lnea 6: Mediante la instruccin Msgbox mostramos un mensaje donde se indica que el nmero es positivo. Lnea 7: Mediante la instruccin Case Is se determina si el valor guardado en Valor1 es menor a Cero y de ser as se pasa el control a la lnea 8, en caso contrario se pasa a la lnea 9. Lnea 8: Mediante la instruccin MsgBox se muestra un mensaje donde se indica que el nmero es negativo Lnea 9: Mediante la instruccin Case Eslse se indica que si el valor guardado en Valor1 no cumple ninguno de los casos anteriores se pasa el control a la lnea 10. Lnea 10: Mediante la instruccin MsgBox se muestra un mensaje indicando que el
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Sub Numeros() Dim Valor1 As Double Valor1 = InputBox("Ingrese un nmero", "Ingreso de Datos") Select Case Valor1 Case Is > 0 MsgBox "El valor es nmero positivo", vbInformation + vbOKOnly, "Informacin" Case Is < 0 MsgBox "El valor es nmero negativo", vbInformation + vbOKOnly, "Informacin" Case Else MsgBox "El valor es cero", vbInformation + vbOKOnly, "Informacin" End Select End Sub
Explicacin: Lnea 1: Sub es la instruccin que inicia la macro, la indicacin Numeros() corresponde al nombre que hemos asignado a dicha macro, este nombre puede cambiarse por cualquier otro que se crea conveniente. Lnea2: Declaramos una variable de nombre Valor1 mediante la instruccin Dim y le asignamos Lnea
nmero es cero. Lnea 11: Mediante la instruccin End Select acabamos con el bloque de decisin. 12: Mediante la instruccin End Sub acabamos con la macro.
Pgina 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Sub DiasSemana() Dim Dia As Integer Dim Dias As String IngresoDias: Dia = InputBox("1-Domingo" & Chr(13) & "2-Lunes" & Chr(13) & "3Martes" & Chr(13) & "4-Mircoles" & Chr(13) & "5-Jueves" & Chr(13) & "6Viernes" & Chr(13) & "7-Sbado" & Chr(13) & "Ingrese el nmero correspondiente al da de la semana", "Ingreso de Datos") If Dia < 1 Or Dia > 7 Then MsgBox "Datos no vlidos, ingrese un nmero de la lista" GoTo IngresoDias End If Select Case Dia Case 1 Dias = "Domingo" Case 2 Dias = "Lunes" Case 3 Dias = "Martes" Case 4 Dias = "Mircoles" Case 5 Dias = "Jueves" Case 6 Dias = "Viernes" Case 7 Dias = "Sbado" End Select MsgBox "Da seleccionado es " & Dias, vbExclamation + vbOKOnly, "Das" End Sub
Lnea 3: Declaramos una variable de nombre Dias mediante la instruccin Dim y le asignamos el tipo de Datos String (Cadena de Texto) mediante la instruccin As Lnea 4: Asignamos una etiqueta IngresoDias para luego hacer referencia a esa lnea de cdigo. Lnea 5, 6 y 7: Mediante la instruccin InputBox mostramos una lista al usuario y solicitamos un dato guardndolo en la variable Dia. Lnea 4: Mediante el la instruccin Select Case bloque las de decisin y diversas el posibilidades caso para se iniciamos
determina si el valor guardado en Valor1 es mayor a Cero y de ser as se pasa el control a la lnea 6, en caso contrario se pasa a la lnea 7. Lnea 6: Mediante la instruccin Msgbox mostramos un mensaje donde se indica que el nmero es positivo. Lnea 7: Mediante la instruccin Case Is se determina si el valor guardado en Valor1 es menor a Cero y de ser as se pasa el control a la lnea 8, en caso contrario se pasa a la lnea 9.
Pgina 9
1
Lnea 8: Mediante la instruccin MsgBox se muestra un mensaje donde se indica que el nmero es negativo Lnea 9: Mediante la instruccin Case Eslse se indica que si el valor guardado en Valor1 no cumple ninguno de los casos anteriores se pasa el control a la lnea 10. Lnea 10: Mediante la instruccin MsgBox se muestra un mensaje indicando que el nmero es cero. Lnea 11: Mediante la instruccin End Select acabamos con el bloque de decisin. Lnea 12: Mediante la instruccin End Sub acabamos con la macro.
Pgina 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Sub BucleMensaje() Dim Indice As Integer Ingreso: Indice = InputBox("Ingrese un nmero entero positivo", "Ingreso de Datos") If Indice <= 0 Then MsgBox "Nmero no vlido, ingrese un nmero positivo", vbCritical + vbOKOnly, "Error en Datos" GoTo Ingreso End If For x = 1 To Indice MsgBox "Bucle nmero " & x Next x End Sub
guardamos en la variable Indice. Lnea 5: Mediante la instruccin If bloque de decisin y comprobamos si valor guardado en la Variable Indice es menor o igual a cero y de ser as pasamos el control a
Pgina 11
1 7 8 Ejemplo 7: Ingreso de Datos en una Matriz 9 Solicita un conjunto de cuatro Referencias a celdas 10 y las muestra luego en un mensaje. 11 12 Diagrama del Problema 13 Maccro Llena 14 Matriz
Explicacin
Bucleinicio en x= 0 hastax= 3
Lnea 1: Sub es la instruccin que inicia la macro, la indicacin LlenaMatrix() corresponde al nombre que hemos asignado a dicha macro,
MiMatriz(x)
este nombre puede cambiarse por cualquier otro que se crea conveniente. Lnea 2: Declaramos una Matriz de nombre MiMatriz de cuatro elementos mediante la instruccin Dim y le asignamos el tipo de Datos String (Cadena de Texto) mediante la instruccin As Lnea 3: Declaramos una variable de nombre Resultado mediante la instruccin Dim y le asignamos el tipo de datos String ( Cadena
Finde buclex
de Texto) mediante la instruccin As. Lnea 4: Mediante la instruccin For se inicia un bucle inicia con un contador x = 0 aumentando en 1 y mediante la instruccin
Fin buclej
To se indica que finaliza cuando x tenga el valor 3. Lnea 5: Mediante la instruccin InputBox
Resultado
al usuario y lo
gracias al bucle, as se llenan cada uno de los elementos de la matriz. Lnea 6: Mediante la instruccin Next se aumenta el valor de la x en 1 y se devuelve el control a la lnea 5. Lnea 7: Mediante la instruccin For se inicia un bucle inicia con un contador j = 0 aumentando en 1 y mediante la instruccin
1 2 3 4 5 6
Sub LlenaMatrix() Dim MiMatriz(3) As String Dim Resultado As String For x = 0 To 3 MiMatriz(x) = InputBox("Ingrese una referencia a celda tipo A1", "Ingreso de Datos")
Pgina 12
Pgina 13
Ejemplo 8: Bucle Condicional Do Juego donde se le pide adivinar un nmero entre 1 y 1 100, en cinco intentos. Diagrama del Problema Sub JuegoAdivina() Dim Contador As Integer Dim MiNumero As Integer Dim ElNumero As Integer Contador = 1 Randomize Esta instruccin permite generar un nmero al azar ElNumero = Int((100 * Rnd) + 1) Int transforma en entero y Rnd es el nmero generado por Randomize Do While Contador < 6 MiNumero = InputBox("Ingrese un nmero de 1 a 100") If MiNumero = ElNumero Then MsgBox "Has adivinado en nmero en " & Contador & " intentos" Exit Do Else Contador = Contador + 1 If MiNumero < ElNumero Then MsgBox "El nmero buscado es mayor a " & MiNumero, vbInformation + vbOKOnly, "Salida de Datos" Contador + 1 Else MsgBox "El nmero buscado es menor a " & MiNumero, vbInformation + vbOKOnly, "Salida de Datos" End If End If Loop If MiNumero <> ElNumero Then MsgBox "Perdiste!" & Chr(13) & "El Nmero buscado era " & ElNumero El nmero End Sub
buscado es mayor
Juego Adivina
Contador=1
Contador < 6
MiNumero
MiNumero = ElNumero
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Fin
Pgina 14
Pgina 15
1 6 7 Ejemplo 9: Recorrido de una Matriz 8 Se solicita un nombre, se busca en la matriz de 9 nombres que se cuenta y se emite un mensaje si no 10 est dentro de la lista de nombres. 11 12 Comprueba 13 Nombre 14 15 16 17 Nombres() 18 19 20 21 22 23 Nombre 24 25 26 Bucle para cada 27 elemento de 28 Nombres() 29 30
Nombre=Nombres(i) El Nombre se encuentra en la base de datos
Ejercicios Propuestos: 1) Crear una macro que solicite dos nmeros enteros y devuelva un listado de todos los nmeros comprendidos entre ellos. 2) Crear una macro que solicite cuatro nombres y devuelva el mensaje Hola, {Nombre}
Ejemplo 10: Creacin de libros La siguiente macro crea un libro nuevo y oculta sus dos ltimas hojas.
Fin
1 2 3 4 5
Sub ListaNombres() Dim Nombres(4) As String Dim Nombre As String Dim NombreComprueba As String NombreComprueba = ""
31 32 33 34 35 36 37
Sub CreaLibro() Dim LibroCreado As Workbook Set LibroCreado = Workbooks.Add LibroCreado.Worksheets(2).Visible = False LibroCreado.Worksheets(3).Visible = False End Sub
Pgina 16
1 2 3 4 5 6 7 8 9
Sub NombraHojas() Dim LibroCreado As Workbook Set LibroCreado = Workbooks.Add With LibroCreado .Worksheets(1).Name = "Principal" .Worksheets(2).Name = "Datos Borrador" .Worksheets(3).Name = "Datos Fijos" End With End Sub Ejemplo 12: Crea hoja y agrega datos
40 41 42 43 44 45 46 47 48 49 50 51 52
La siguiente macro solicita diez datos numricos, crea una hoja llamada Suma de Datos e ingresa los datos en columna a partir de la celda que se le especifique.
Ejemplo 13: Rellena las celdas de A2 a A6 de la hoja activa con los pares del 2 al diez. Sub rellenar() Dim Fila As Integer Fila = 2 For i = 2 To 10 Step 2 ActiveSheet.Cells(Fila, 1).Value = i Fila = Fila + 1 Next i End Sub
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
53 Caso 1: Se ingresan todos los datos una vez 54 digitados en el rango correspondiente 55 Sub IngresaDatos() 56 Dim LibroCreado As Workbook 57 Dim Datos(9) As Double 58 Dim Rango As String 59 Set LibroCreado = Workbooks.Add 60 With LibroCreado .Worksheets.Add After:=Worksheets(Worksheets.Count) .Worksheets(Worksheets.Count).Name = "Suma de Datos" End With 61 For x = 0 To 9 62 Datos(x) = InputBox("Ingrese Dato", "Ingreso 63 de Datos") 64 Next x 65 Rango = InputBox("Ingrese el rango o 66 referencia", "Ingreso de Rangos") 67 For j = 0 To 9 68 WorkSheets(Suma de 69 Datos).Range(Rango).Offset(j, 0).Value = Datos(j) 70 Next j 71 End Sub 72
Caso II: Los Datos se van agregando a como se ingresan. Sub IngresoDatos2() Dim LibroCreado As Workbook Dim Datos As Double Dim Rango As String
Ejemplo 14: Crea una base de datos en la Hoja3 y rellena los registros. Sub Registros() 'Rellenar los registros de una Base de Datos. Hoja3 Dim Nombre As String Dim Ciudad As String Dim Edad As Integer Dim fecha As Date 'Activar Hoja3 Worksheets("Hoja3").Activate With ActiveSheet .Range("B4").Value = "Nombre" .Range("C4").Value = "Ciudad" .Range("D4").Value = "Edad" .Range("E4").Value = "Fecha" End With
73 74 75 76 77
Pgina 17
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
With Selection .Font.Bold = True .HorizontalAlignment = xlCenter End With
'Activar casilla B5 ActiveSheet.Range("B5").Activate Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre") 'Mientras la variable Nombre sea diferente a cadena vaca Do While Nombre <> "" Ciudad = InputBox("Entre la Ciudad : ", "Ciudad") Edad = Val(InputBox("Entre la Edad : ", "Edad")) fecha = CDate(InputBox("Entra la Fecha : ", "Fecha")) 'Copiar los datos en las casillas correspondientes With ActiveCell .Value = Nombre .Offset(0, 1).Value = Ciudad .Offset(0, 2).Value = Edad .Offset(0, 3).Value = fecha End With 'Hacer activa la celda de la fila siguiente a la actual ActiveCell.Offset(1, 0).Activate Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre") Loop
'Seleccionamos la Base de Datos y la ponemos de color amarillo Application.Goto Reference:="R4C2" Selection.CurrentRegion.Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With End Sub
Pgina 18