06-MacrosVBAExcelAvanzado-EAA

download 06-MacrosVBAExcelAvanzado-EAA

of 18

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