Você está na página 1de 13

IC

Av. Bolvar 2086 - Pueblo Libre


Telf. 7872348 / 4622447
E-mail: tetrix2086@yahoo.com

Lab6

ESTRUCTURAS ITERATIVAS EN VBA


1. Do While Loop
Se usa, principalmente, cuando no se conoce el nmero de veces que se deben repetir las instrucciones.
Su formato es:
Do While (condicin)
Instruccin 1
Instruccin 2

Loop
Las iteraciones se seguirn realizando mientras la condicin se mantenga verdadera.
Ejemplo:
Hacer un subprograma que, en base al nombre de un alumno, encuentre su nota. La hoja de Excel es la
siguiente:

Solucin:
Para poder realizar la bsqueda, se coloca con un nombre especial la variable que se da como informacin.
En este caso es el nombre, as que la llamaremos nombreBuscado.
Function buscaNota(ByVal nombreBuscado As String, ByVal cantAlumnos As Byte) As Integer
Dim I As Byte, nota As Integer, nombre As String
Encontrado = False;
I=1
'Inicia la posicin de bsqueda
'Extraer los nombres y realizar la bsqueda mientras los nombres no sean iguales
Do While ((I <= cantAlumnos) And Not(Encontrado)
nombre = Cells(I + 2, 1)
'extrae el nombre del alumno
nota = Cells(I + 2, 2)
'extrae la nota del alumno
Encontrado = (nombre = nombreBuscado) 'verifica si ya encontr al alumno
I=I+1
'incrementa el valor de I para extraer al siguiente alumno
Loop
End Function
2. FOR - Next: Se usa cuando se conoce el nmero de veces que se ejecutar el grupo de instrucciones. Su
sintaxis es la siguiente:
For I=inicio To final
Instrucciones
Next
Ejemplo 1: (Mximos, mnimos, y conteo de datos) Hacer un programa que, en base a la informacin
mostrada en la hoja de Excel, calcule la mxima nota, la mnima nota y el nmero de aprobados.

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.1

Solucin:
Para poder calcular el mximo o el mnimo de un conjunto de datos, debemos colocar nombres especiales para
aquellas variables que recibirn dichos valores (por ejemplo, maxAlumno, maxNota, minAlumno, minNota).
Todas las cadenas que tomarn estos mximos o mnimos debern comenzar como cadenas vacas, y todos los
nmeros sern inicializados con el valor CERO, excepto aquellos que sirven para comparar. El valor especial
para el mximo que se comparar es 0, mientras que el mnimo siempre se inicia en el valor mximo del tipo
de variable que representa (generalmente 32000 cuando es Integer y 100000000 o ms en el caso de ser
Single).
Function calculaMaxNota(ByVal cantAlumnos As Byte) As Byte
Dim I As Byte, maxNota As Byte, nota As Byte
maxNota = 0
'Se asume una nota como la mayor de todas.
For I = 1 To cantAlumnos
nota = Cells(I + 2, 2)
'Lee la nota del i-simo alumno
If (nota > maxNota) Then
'verifica si la nota leda es mayor que la maxNota.
maxNota = nota
End If
Next
calculaMaxNota = maxNota
End Function
Function calculaMinNota(ByVal cantAlumnos As Byte) As Byte
Dim I As Byte, minNota As Byte, nota As Byte
minNota = 255
'Se asume una mnima nota inicial.
For I = 1 To cantAlumnos
nota = Cells(I + 2, 2)
'Lee la nota de la columna 2
If (nota < minNota) Then
'verifica si la nota es menor que minNota
minNota = nota
End If
Next
calculaMinNota = minNota
End Function
Function calculaNumAprobados(ByVal cantAlumnos As Byte) As Byte
Dim I As Byte, nota As Byte, numAprobados As Byte
numAprobados = 0
inicializa el contador de aprobados
For I = 1 To cantAlumnos
nota = Cells(I + 2, 2)
If (nota > 10) Then
numAprobados = numAprobados + 1
End If
Next
calculaNumAprobados = numAprobados
End Function

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.2

Sub Principal()
Dim cantAlumnos As Byte, maxNota As Byte, minNota As Byte, numAprobados As Byte
cantAlumnos = Range("B1")
maxNota = calculaMaxNota(cantAlumnos)
minNota = calculaMinNota(cantAlumnos)
numAprobados = calculaNumAprobados(cantidad)
Range("E2") = maxNota
Range("E3") = minNota
Range("E4") = numAprobados
End Sub
Ejemplo 2: (Suma de datos) Dada la siguiente hoja de Excel, encuentre la suma de los nmeros, tambin la
suma de los nmeros pares y la suma de los nmeros impares.

Solucin:
Para poder sumar datos, se debe inicializar una variable denominada ACUMULADOR, en la cual se van
guardando la suma que tena anteriormente con el resultado de sumarla al nuevo dato encontrado. Este
ACUMULADOR, por defecto inicia con CERO; salvo en algunos casos poco usados en donde se inicia en otro
valor.
Function calculaSuma(ByVal cantidad As Byte) As Integer
Dim suma As Integer, I As Byte
suma = 0
'valor inicial de la suma acumulada
For I = 1 To cantidad
numero = Cells(I + 1, 2)
'extrae el nmero de la segunda columna
suma = suma + numero
'Va acumulando la suma
Next
calculaSuma = suma
End Function
Function calculaSumaPares(ByVal cantidad As Byte) As Integer
Dim suma As Integer, I As Byte
suma = 0
'valor inicial de la suma acumulada
For I = 1 To cantidad
numero = Cells(I + 1, 2)
'extrae el nmero de la segunda columna
If (numero Mod 2) = 0 Then
'comprueba si el nmero es par
suma = suma + numero
End If
Next
calculaSumaPares = suma
End Function
Function calculaSumaImpares(ByVal cantidad As Byte) As Integer
Dim suma As Integer, I As Byte
suma = 0
'valor inicial de la suma acumulada
For I = 1 To cantidad
numero = Cells(I + 1, 2)
'extrae el nmero de la segunda columna
If (numero Mod 2) = 1 Then
'comprueba si el nmero es impar
suma = suma + numero

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.3

End If
Next
calculaSumaImpares = suma
End Function
Sub Principal()
Dim cantidad As Byte, suma As Integer, sumaPares As Integer, sumaImpares As Integer
cantidad = Range("B1")
suma = calculaSuma(cantidad)
sumaPares = calculaSumaPares(cantidad)
sumaImpares = calculaSumaImpares(cantidad)
Range("E2") = suma
Range("E3") = sumaPares
Range("E4") = sumaImpares
End Sub
PROBLEMAS DE LABORATORIOS PASADOS
1. (2012-2) Una familia ha comprado un nuevo microondas, el cual tiene una tabla de tiempos tanto para
descongelar como para recalentar.

Llega el domingo y es hora de preparar la comida de la semana, se van a preparar 5 platillos y se guardarn en
el congelador para que as, llegado cada da de la semana, se descongele y luego se caliente. Para ello se
cuenta con un men semanal el cual se muestra a continuacin:

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.4

Se quiere completar dicho men semanal con las instrucciones necesarias para descongelar y calentar los
platillos, de tal manera que luego de aplicar el programa correspondiente, la tabla resulta como la que se
muestra a continuacin:

2. (2012-1) Se desea realizar la evaluacin de un listado de nmeros registrados en una hoja de Excel, tal y como
se muestra a continuacin.

Se le pide que utilizando VBA con Excel implemente la solucin del problema, usando el diagrama de mdulos
mostrado:
Analizar nmeros

Calcular la cantidad de veces que


se repite un determinado dgito
dentro de cada nmero

Calcular un nuevo nmero a partir


de cada nmero dado.

Tenga en cuenta lo siguiente: Dado el dgito a buscar y la posicin (de derecha a izquierda), en la que debe
colocarse, el nuevo nmero se forma colocando el dgito en la posicin correspondiente. Debe utilizar
estructuras iterativas para hallar el nuevo nmero.
Por ejemplo:
Si el nmero es 1236, la posicin es 3 y el dgito es 3, el nuevo nmero ser 12336.
Si el nmero es 63000, la posicin es 5 y el dgito es 7, entonces el nmero 7 se colocara en la
posicin 5, el nuevo nmero ser 673000.
3. (2012-1) Un profesor de ingls ha decidido evaluar la conducta de sus alumnos. Por ello ha establecido cinco
criterios que le permitan obtener la nota por conducta y determinar si el alumno recibir un diploma por buena
conducta. El profesor considera que si la nota por conducta es mayor o igual a 16, el alumno recibir diploma
por buena conducta. Adems, requiere saber cul fue la mayor nota y el nombre del alumno que la obtuvo para
poder felicitarlo. Para realizar la evaluacin, el profesor ha registrado los datos necesarios en una hoja de Excel
como se muestra a continuacin:

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.5

Se le pide que utilizando VBA con Excel implemente la solucin del problema dado.
4. Se desea completar una boleta de venta, para lo cual deber obtener los precios unitarios de la tabla de precios,
luego calcular los subtotales y finalmente calcular el total de la boleta.

Nota: En el stock de tiles, el primer producto siempre empieza en la celda A7 y, para la boleta el primer
producto siempre empieza en la celda A20.

Se pide que implemente la solucin usando el diagrama de mdulos mostrado:


Analizar productos

Obtener precio unitario


para cada producto

Calcular el subtotal de cada


producto

Buscar la fila en donde se


encuentra un producto

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.6

5. (2012-1)

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.7

6. (2012-1)

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.8

7. (2012-1)

8. (2012-1)

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.9

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.10

9. (2012-1)

10. (2012-1)
Un centro de adiestramiento para mascotas lleva un registro de las sesiones de adiestramiento donde figura el
turno de la sesin, la duracin de la sesin (horas) y el nombre de la mascota. A partir de esta informacin, se
desea elaborar un resumen de las sesiones de adiestramiento para cada mascota. En este resumen debe figurar
el total de sesiones que ha tenido la mascota, el tiempo promedio invertido por sesin y si la mascota ha tenido
ms de 2 sesiones de adiestramiento. Finalmente, se desea conocer el nombre de la mascota con menos
sesiones de adiestramiento. Para realizar este resumen, se han registrado los datos en una hoja de Excel como
se muestra a continuacin:

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.11

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.12

11. (2010-2) El profesor de un curso de Fsica ha registrado en la hoja de clculo PruebaFsica, las respuestas
que han obtenido un conjunto de alumnos luego de rendir una prueba, tal como se muestra a continuacin:

Adems en la hoja de clculo Respuestas se han colocado las respuestas correctas a cada una de las
preguntas.

El alumno pudo responder o no una pregunta. El puntaje obtenido en una pregunta ser de un punto si la
respuesta es correcta, -0.25 si la respuesta es incorrecta o 0 si no responde la pregunta.
Para que una respuesta se considera correcta se debe cumplir que:
Valor absoluto(respuesta del alumno-respuesta correcta) 0.1
Para calcular la nota se debe sumar el puntaje obtenido en cada pregunta.
Se pide que implemente en VBA la solucin del problema.
12. (EX2-2010-2) Lo que se explica a continuacin se trata de la Conjetura de Ulam o llamada tambin Conjetura
de Collatz:
Si el nmero inicial es un nmero natural mayor a 1
- Si el nmero es par, se divide entre 2.
- Si el nmero es impar, se multiplica por 3 y se suma 1.
- El proceso, se repite hasta que el entero a analizar sea 1.
Si el nmero inicial es menor o igual a 1, deber mostrar NO SE PUEDE DEFINIR.
Por ejemplo, si el nmero inicial es 6, la secuencia sera: 6, 3, 10, 5, 16, 8, 4, 2, 1
Se tiene una tabla con la siguiente informacin:

Se necesita que para cada elemento a analizar se encuentre la serie de Ulam y la longitud de la misma. Para
hallar el elemento ensimo de la serie, puede definir una funcin como la siguiente:

Se le pide implementar en VBA la solucin del problema.

Adalberto Rosales C. (arosalesc@gmail.com)

Pg.13

Você também pode gostar