7/29/2018
Estructuras Condicionales y
repetitivas
1
7/29/2018
Inserción de Código
Definir una Macro Inserción de Comentarios
Utilizar el apóstrofe ( ’ ) antes
Sub… de una línea de texto
Generalmente de color verde
…….
Al inicio de una línea o
……. después de una instrucción.
…….
Ejemplo:
End Sub
’ Mi Comentario
2
7/29/2018
Declaración de Variables
Solo se pueden definir dentro de un procedimiento o dentro de un
módulo o dentro del programa entero (Variable Global).
Su nombre debe empezar con una letra, y máximo de 256
caracteres y no debe contener espacios en blanco, puntos ni
caracteres especiales.
Se recomienda declarar todas las variables antes de ser usadas.
La instrucción OPTION EXPLICIT en módulos vacíos indica que
es necesario definir las variables antes de usarlas
No son Case-Sensitive (Es Indistinto las mayúsculas y las
minúsculas) Ej. Alto = ALTO = aLtO = Alto = AlTo
3
7/29/2018
Tipo de Variables
TIPO DESCRIPCIÓN
Byte Número entre 0 y 255
Integer Número entre -32768 y +32767
Long Número entre -[Link] y + [Link]
Currency Número con 15 posiciones decimales antes y después de la
coma
Double Tiene precisión de 16 dígitos decimales
Single Tiene precisión de 8 dígitos decimales
Date Fechas y horas desde 1/01/1900 hasta 31/12/9999 y hora 00:00
a [Link]
String Una cadena de caracteres limitado solo por la cantidad de RAM
Object Almacena un puntero al objeto
Variant Tipo por defecto
4
7/29/2018
Escribir instrucciones:
Las instrucciones muy largas pueden ser divididas en
varias líneas, usando el guión bajo. ( _ )
Ejemplo:
[Link].Key1:=Range(“A3”), Order1:= xlAscending _
Header:=xlGuess; OrderCustom:=1; MatchCase:=False, _
Orientation:=xpTopBottom.
5
7/29/2018
Procedimientos
Existen 2 tipos:
Los que NO retornan Valor Sub name()
Los que retornan Valor …
No retornan Valor: Realiza End Sub
ciertas acciones: Grabar el
libro actual, pero no retorna un
valor. Define un subprograma o Macro
Los programas se distinguen
porque su código de programa
es pequeño, divido en Sub saludo(parametro1,
unidades separadas parametro2, etc.)
(Procedimientos).
Estas unidades pequeñas
pueden ser llamadas por otras.
Msgbox “Hola a todos”
Puede pasarse parámetros
entre ellos. End Sub
6
7/29/2018
Procedimientos
continuación…
Los que retorna valor; se
denominan FUNCIONES
Como las funciones de EXCEL
Siempre se usan escribiendo el
signo = delante del nombre:
Function MiSuma(dato1, dato2)
Function nombre( arg1, arg2, etc.) MiSuma=dato1 + dato2
….
End Function End Function
7
7/29/2018
Argumentos optativos
En las funciones se puede manejar argumentos en solo
cuando sea necesario.
Se declara a los argumentos usando la sentencia:
OPTIONAL antes del nombre del parámetro:
Function Prueba(Optional dato1)
If Not Ismissing(dato1) then
Msgbox a
End If
End Function
8
7/29/2018
Demostración:
Escribir una Macro en el Editor de VB que use
variables y muestre el resultado en la
ventana INMEDIATO
Definir una macro con el nombre:
Area
Insertar la descripción como un
Comentario.
Definir tres variables
Alto
Ancho
Area
Calcular el área
Imprimir el resultado en la
ventana INMEDIATO
Ejecutar
9
7/29/2018
Ejercicio 1
Activar la segunda hoja del libro actual e insertar en la
celda A10 la fecha actual.
SUB CAMBIARHOJA
WorkSheets(2).Activate
Range(“A10”).Select
[Link]= “=TODAY”
END SUB
10
7/29/2018
Ejercicio 2
Contar cuantas hojas tiene el libro Actual y escribir el resultado en la ultima
Hoja del libro, en la celda A5 el texto; “Este libro tiene en total: ” num
“hojas”.
SUB CUENTAHOJAS
Dim NUM as byte
Num = [Link] ‘ [Link]
WorkSheets(NUM).Activate
Range(“A5”).Select
[Link]= “Este libro tiene en total” & NUM & “ hojas”
END SUB
11
7/29/2018
Ejercicio 3
Introducir un valor numérico e insertarlo en la segunda hoja en la
celda E3 y luego obtener ese valor y mostrarlo en un cuadro de
mensaje.
SUB INSERTAVALOR
Dim VALOR as byte
VALOR = INPUTBOX(“Introduzca un Valor”)
WorkSheets(2).Activate ‘Sheets(2).Activate
Range(“E3”).Select
[Link]= VALOR
MSGBOX “Usted ha introducido: ” & VALOR
END SUB
12
7/29/2018
Ejercicio 4
Que el usuario introduzca el tipo de cambio del dolar en
la hoja1, celda B3.
SUB TIPO_CAMBIO
Dim tc as double
tc = INPUTBOX(“Introduzca el tipo de cambio del día”)
WorkSheets(1).Activate
Range(“B3”).Select
[Link]= tc
MSGBOX “Usted ha introducido: ” & tc
END SUB
13
7/29/2018
Ejercicio 5
Crear la macro que convierta una cantidad de Bolivianos en Dólares a
través de un botón en la barra de herramientas. El tipo de Cambio actual
esta en la Hoja 1, celda B3
SUB CONVERTIR_DOLAR
Dim boliviano, dolar, resultado as double
boliviano = [Link]
dolar = Worksheets(1).Range("B3").Value
Resultado = boliviano / Dolar
[Link]= Resultado
[Link] = "[$$us ]#,###.00"
END SUB
14
7/29/2018
Ejercicio 6
Crear la macro que convierta una cantidad de Bolivianos en Dólares a través de un
botón en la barra de herramientas y muestre el resultado en una Ventana de
Mensaje. El tipo de Cambio actual esta en la Hoja 1, celda B3
SUB MOSTRAR_DOLAR
Dim boliviano, dolar, resultado as double
boliviano = [Link]
dolar = Worksheets(1).Range("B3").Value
Resultado = boliviano / dolar
MsgBox (" El Equivalente es de BS: " & boliviano &
vbCrLf & "es $us: " & Valor)
END SUB
15
7/29/2018
Estructuras de Control …IF – THEN - ELSE
Condicionales:
IF-THEN:
Ejecuta una instrucción en
base al resultado de evaluar
una condición. IF condición THEN
Instrucciones
Ej. Si su edad es mayor a 18 Instrucciones
entonces mostrar la frase: END IF
BIENVENIDO A LA REALIDAD !!,
sino, mostrar la frase “FALTA
POCO”.
IF-THEN-ELSE:
Si se compra más de 20 unidades
de un producto hacer un
descuento del 5%, sobre el total a IF condición THEN
pagar. Si es menor entonces Instrucciones
preguntar si desea comprar más. ELSE
Instrucciones
END IF
16
7/29/2018
Estructuras de Control: IF – THEN - ELSEIF
Se puede realizar más de IF-THEN – ELSEIF
una evaluación.
cantidad = InputBox("Inserte Cantidad“)
IF cantidad > 100 THEN
Ej. Evaluar si la cantidad de Msgbox “La cantidad es mayor que
un pedido es mayor a 100 o 100”
si la cantidad es mayor que ELSEIF cantidad > 200 THEN
200 o si es mayor a 300, Msgbox “La cantidad es mayor
caso contrario mostrar el que 200”
mensaje que diga: POCA
ELSEIF cantidad > 300 THEN
CANTIDAD. Msgbox “La cantidad es mayor
que 300”
ELSE
Msgbox cantidad & “ es poca
cantidad”
END IF
17
7/29/2018
Select Case …End Select
Una Alternativa a la
instrucción ELSEIF
SELECT:
Permite realizar
comparaciones con SELECT CASE criterio
varios valores diferentes, CASE1
pero para una misma Instrucciones
CASE2
variable. Instrucciones
Ejecuta un grupo de CASE2
Instrucciones
instrucciones CASE ELSE
dependiendo del valor Instrucciones
de la expresión.
END CASE
Recomendado cuando
existen muchas
condiciones.
18
7/29/2018
Ejemplo A) SELECT CASE…END CASE
Emitir un mensaje de acuerdo al día de la semana.
DIA = DIASEM(DATE(),2) ‘1=Lunes a 7= Domingo
SELET CASE DÍA FUNCION DIASEM()
CASE 1
MSGBOX “HOY ES LUNES” DIASEM(FECHA, TIPO)
CASE 2
MSGBOX “HOY ES MARTES”
CASE 3 Tipo 1:
MSGBOX “HOY ES MIERCOLES” 1 (domingo) al 7(sábado)
CASE 4
MSGBOX “HOY ES JUEVES” Tipo 2:
CASE 5 1 (lunes) al 7 (domingo)
MSGBOX “HOY ES VIERNES”
CASE 6
MSGBOX “HOY ES SABADO” Tipo 3:
CASE 7 0 (lunes) al 6 (sábado)
MSGBOX “HOY ES DOMINGO”
END CASE
19
7/29/2018
Ejemplo B) SELECT CASE…END CASE
En base al Rendimiento de un empleado, obtener su bonificación
Salario = 2000
Rendimiento = InputBox(“Introduzca Rendimiento”)
SELECT CASE rendimiento
Case 1
Bonificación = salario * 0.1
Case 2, 3
Bonificación = salario * 0.09
Case 4 To 6
Bonificación = salario * 0.07
Case Is > 8
Bonificación = 100
Case Else
Bonificación = 0
END SELECT
20
7/29/2018
Estructura repetitiva: FOR…TO…NEXT
Permite realizar operaciones de forma repetitiva
FOR-TO- NEXT:
FOR contador = inicio TO fin [STEP incremento]
Instrucciones
[EXIT FOR ]
Instrucciones
NEXT contador
Cuando se evalúa una condición y se desea
salir del CICLO
21
7/29/2018
Ejemplo: FOR … TO … NEXT
Escribir 7 veces: “Curso Programación de Macros EXCEL”, a partir
de la celda A1
DIM Contador as byte ‘Inicializa el valor que usa el FOR
celda = “A”
FOR contador = 1 TO 7 STEP 1
celda = “A” & CStr(contador)
Range(celda).Select
[Link] = “Curso Programación de Macros
EXCEL”
NEXT
22
7/29/2018
While …Wend
Permite ejecutar instrucciones mientras una condición
sea VERDADERA.
“Se ejecuta CERO o más veces”
El ciclo While
WHILE condicion
Instrucciones
Instrucciones
WEND
23
7/29/2018
Ejemplo: While …Wend
De una lista de datos, encontrar el final de la lista
Range(“A2”).Select
Contador = 0
WHILE [Link] <> “”
Contador = Contador + 1
[Link](1,0).Range(“A1”).Select
WEND
MsgBox (En total se tiene: “ & contador & “ elementos”
24
7/29/2018
Do … Loop
Repite las instrucciones un número de veces hasta que una
condición sea VERDADERA.
Dos formas de comprobar la condición: ANTES y DESPUÉS de
entrar al BLOQUE
El ciclo DO Loop El ciclo DO Loop
DO [WHILE | UNTIL] condicion DO
•Instrucciones •Instrucciones
Exit DO Exit DO
Instrucciones Instrucciones
LOOP LOOP [WHILE | UNTIL] condicion
“Se ejecuta CERO o más veces” “Se ejecuta UNA o más veces”
25
7/29/2018
Ejercicio A) Do Loop - While
Contabilizar las veces que se ingresa al bloque DO
MIENTRAS miNum es mayor que 10
Contador = 0
miNum = 20
DO While miNum > 10
miNum = miNum – 1
Contador = Contador + 1
LOOP
• MsgBox (“El bucle se ha repetido “ & contador & “ veces”
26
7/29/2018
Ejercicio B) Do Loop - While
Contabilizar las veces que se ingresa al bloque DO
MIENTRAS miNum es mayor que 10
Contador = 0
miNum = 20
DO
miNum = miNum – 1
Contador = Contador + 1
LOOP While miNum > 10
• MsgBox (“El bucle se ha repetido “ & contador & “ veces”
27
7/29/2018
Ejercicio C) Do Loop - Until
Contabilizar las veces que se ingresa al bloque DO
HASTA que miNum sea igual a 10
Contador = 0
miNum = 20
DO UNTIL miNum = 10
miNum = miNum – 1
Contador = Contador + 1
LOOP
• MsgBox (“El bucle se ha repetido “ & contador & “ veces”
28
7/29/2018
Ejercicio D) Do Loop
Contabilizar las veces que se ingresa al bloque DO
HASTA que miNum sea igual a 10
Contador = 0
miNum = 1
DO
miNum = miNum + 1
Contador = Contador + 1
LOOP UNTIL miNum = 10
• MsgBox (“El bucle se ha repetido “ & contador & “ veces”
29