06-MacrosVBAExcelAvanzado-EAA
-
Upload
hermis-ramos-espinal -
Category
Documents
-
view
215 -
download
0
Transcript of 06-MacrosVBAExcelAvanzado-EAA
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
1/18
Excel Avanzado con VBA 06
Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
2/18
LOOPING, ITERACION
Todos los lenguajes de computadora tienen unmecanismo para repetir la misma o similar operacinen forma eficiente. VBA tiene 2 principalesestructuras que permiten repetir codigo muchas
veces de nuevo. Estas son: DO LOOP FOR NEXT
DO LOOP termina cuando se cumple una
condicin lgica. FOR NEXT termina en una cantidad definida n de
repeticiones.
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
3/18
17/02/2013Ing. Enrique Alfaro
Ejemplo de Do Loop
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
4/18
Ejemplo de DO WHILE LOOP
Sub recorrer1() Range(A2").Select Hacer mientras que la condicion sea cierta
Do While ActiveCell.Value "" ActiveCell.Range("A1:F1").Select Selection.Interior.Color = RGB(200, 200,
200) ActiveCell.Offset(2, 0).Select LoopEnd Sub
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
5/18
Ejemplo de DO UNTIL LOOP
Sub recorrer2() Range("A2").Select Hacer hasta que la condicion se haga cierta
Do UntilIsEmpty(ActiveCell) ActiveCell.Range("A1:C1").Interior.Color
= RGB(0, 255, 0) ActiveCell.Offset(2, 0).Select LoopEnd Sub
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
6/18
Ejemplo de FOR NEXT
Sub recorrer3() Range("A2").Select Forx = 1 To 7
ActiveCell.Range("A1:F1").Select Selection.Interior.Color = RGB(200, 200, 200) ActiveCell.Offset(2, 0).Select NextEnd Sub
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
7/18
Ejemplo de FOR NEXT (step)
Sub recorrer4()Forx = 2 To 14Step 2 Range("A" & x).Select
ActiveCell.Range("A1:F1").Select Selection.Interior.Color = RGB(200, 200, 200)NextEnd Sub
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
8/18
Ejemplo: Tabla de Multiplicar
17/02/2013Ing. Enrique Alfaro
17/02/2013I E i Alf
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
9/18
Solucin: Tabla de Multiplicar (1/2)Sub tabladel12()
'IMPRIMIR TITULOS DEL 1 AL 12 ActiveCell.Value = "Tabla" Fori = 1 To 12 ActiveCell.Offset(0, i).Value = i Next Fori = 1 To 12 ActiveCell.Offset(i, 0).Value = i Next 'FORMATEAR TITULOS
Range(Selection, Selection.End(xlToRight)).Select With Selection.Font .Bold = True .Color = RGB(255, 0, 0) .Italic = True
EndWith
17/02/2013Ing. Enrique Alfaro
17/02/2013I E i Alf
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
10/18
Solucin: Tabla de Multiplicar (2/2) ActiveCell.Select
Range(Selection, Selection.End(xlDown)).Select With Selection.Font .Bold = True .Color = RGB(255, 0, 0) .Italic = True EndWith ActiveCell.Select 'IMPRIMIR LA TABLA DE MULTIPLICAR Fori = 1 To 12
Forj = 1 To 12 ActiveCell.Offset(i, j).Value = i * j Nextj Nexti EndSub
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
11/18
Funcion IsNumeric, Operador NOT (1/2) Sub ejemp2()
n = InputBox("Ingrese numero:") 'pedimos el numero If n = "" Then 'evaluamos si esta vacio MsgBox "Ud. no ingreso nada" Else 'puede ser numerico o no If (IsNumeric(n)) Then 'si es numerico
Select Case n 'averiguamos si es positivo, negativo o cero Case Is > 0: MsgBox ("positivo") Case Is < 0: MsgBox ("negativo") Case Else: MsgBox ("cero") End Select Else 'entonces es una cadena cualquiera MsgBox "No es un numero" End If End If End Sub
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
12/18
Almacenando en Matrices (1/2)
Sub matrices() 'declarar constantes y matrices ConstnAs Integer = 50 Dim nombres(n) As String
Dim Sueldos(n) As Single 'Llenar con 4 personas nombres(0) = "Enrique": Sueldos(0) = 2500: nombres(1) = "Diego": Sueldos(1) = 700 nombres(2) = "Adrian": Sueldos(2) = 0 nombres(3) = "Janett": Sueldos(3) = 1500
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
13/18
Almacenando en Matrices (2/2)
'imprimir datos en celdas ActiveCell.Value = "Nombres" ActiveCell.Offset(0, 1).Value = "Sueldos" Fori = 0 To 3
ActiveCell.Offset(i + 1, 0).Value = nombres(i) ActiveCell.Offset(i + 1, 1).Value = Sueldos(i) NextAplicar bordes a la regin de la tabla creada ActiveCell.CurrentRegion.Borders.LineStyle =
xlContinuousEndSub
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
14/18
Total de elementos de una matriz
Sub matriz() Dim mimatriz As Variant titulo = " Aviso de " &
Application.UserName mimatriz = Array("Enrique", "Diego","Adrian", "Janett", "Jessica", "Mary") n = UBound(mimatriz) MsgBox"El ultimo indice es el No " & n & "
que corresponde a " & mimatriz(n),vbInformation, titulo
End Sub
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
15/18
17/02/2013Ing. Enrique Alfaro
Ejercicio desarrollado
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
16/18
FOR NEXT con matrices (1/3)
Sub ingresonotas() ConstcAs Integer = 50 Dim codigos(c), nombres(c)As String Dim notas1(c), notas2(c), promedios(c)As Single
Dim nAs Integer SetData = Range("b3:b8") n = Data.Count Range("B3").Select
Fori = 0 To n - 1 codigos(i) = ActiveCell.Range("A" & i + 1).Value nombres(i) = ActiveCell.Range("B" & i + 1).Value Next
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
17/18
FOR NEXT con matrices (2/3)
Fori = 0 To n - 1 Do notas1(i) = InputBox("1ra Nota de " & nombres(i) & ":") Loop While notas1(i) < 0 Ornotas1(i) > 20 Or _ VBA.IsNumeric(notas1(i)) = False Do notas2(i) = InputBox("2da Nota de " & nombres(i) & ":") Loop While notas2(i) < 0 And notas2(i) > 20 Or _ VBA.IsNumeric(notas2(i)) = False
Next
17/02/2013Ing. Enrique Alfaro
17/02/2013Ing. Enrique Alfaro
-
7/29/2019 06-MacrosVBAExcelAvanzado-EAA
18/18
FOR NEXT con matrices (3/3)
Fori = 0 To n - 1 promedios(i) = VBA.Round(Val((notas1(i)) + Val(notas2(i))) / 2, 1)NextFori = 0 To n - 1
ActiveCell.Range("C" & i + 1).Value = notas1(i) ActiveCell.Range("D" & i + 1).Value = notas2(i) ActiveCell.Range("E" & i + 1).Value = promedios(i) ActiveCell.Range("E" & i + 1).NumberFormat = "00.0"
NextEndSub
/ /g q