domingo, 28 de agosto de 2016

Condicionales y Ciclos

Acceso a las Propiedades de los objetos



Obtener el nombre de una hoja de trabajo

(Propiedad Name)

Sub Propiedades()
'Nombre de la primera hoja de trabajo
'
    MsgBox Worksheets(1).Name
    
End Sub


Obtener el tamaño de la letra de una celda

(Propiedad Font.Size)

Sub Propiedades1()
'Tamaño de letra
'
    MsgBox Worksheets(1).Cells(1).Font.Size

End Sub


Obtener la dirección de la celda activa

(Propiead Address)

Sub Propiedades2()
' Dirección de la celda activa
'
    MsgBox ActiveCell.Address

End Sub


Cambiar el tipo de letra de una celda

(Propiedad Font.Name)

Sub Propiedades3()
' Cambiando el tipo de letra
'
    Worksheets(1).Cells(1).Font.Name = "Georgia"

End Sub


Cambiar el estilo de letra de una celda

(Propiedad Font.Bold)

Sub CambiarTipoLetra()
  Range("A2").Font.Bold = True
End Sub

Contar el número de hojas de un libro de trabajo

(Propiedad Count)

Sub ContarHojas()
'Contar el número de hojas de un libro de trabajo
'
Dim numHojas As Integer
    numHojas = Application.Sheets.Count
    MsgBox numHojas
End Sub



Acceso a los Métodos de los Objetos

Los métodos en VBA normalmente hacen algo o realizan ciertas operaciones sobre los objetos.

Seleccionar celdas

Sub SeleccionarCeldas()
'Seleccionar la celda A1
    Range("A1").Select
End Sub

Sub SeleccionarRangoCeldas()
'Seleccionar un rango de celdas
    Range("A1:A5").Select
End Sub

Limpiar el contenido de un rango de celdas

Sub LimpiarContenidos()
' Limpiar el contenido del rango A1:A5
    Range("A1:A5").ClearContents
End Sub

Activar una hoja de trabajo

Sub Metodos()
' Activa la hoja de trabajo "Hoja2"´
'
    Sheets("Hoja2").Activate
End Sub

Impresión previa de una hoja de trabajo

Sub Metodos2()
' Impresión previa de la hoja de trabajo número 1
'
    Sheets(1).PrintPreview (True)
End Sub

Copiar rangos

Sub CopiarRangos1()
'Copia el contenido de la celda A1 a la celda B1
    Range("A1").Copy Range("B1")
End Sub

Sub CopiarRangos2()
'Copia el contenido del rango A1:A5 a B1
    Range("A1:A5").Copy Range("B1")
End Sub

Cortar rangos

Sub CortarRangos()
'Corta el contenido de la celda A1:A5 y lo pega en la celda B1
    Range("A1:A5").Cut Range("B1")
End Sub



Ciclo For...Next

Ciclo For...Next


For contador = inicio To final [STEP incremento]
   [instrucciones]
Next [contador]



Sub Ciclos()
Dim i As Integer

    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
    
End Sub



Sub Ciclos2()
Dim i As Integer

    For i = 1 To 10
        Cells(i, 1).Value = i
        Cells(i, 2).Value = i ^ (1 / 2)
        Cells(i, 3).Value = i ^ 2
        Cells(i, 4).Value = i ^ 3
    Next i
    
End Sub



Cambiar el incremento en el ciclo

Sub Ciclos4()
Dim i As Integer
Dim UltimaFila As Long

    UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To UltimaFila Step 2
     Cells(i, 1).Resize(1, 4).Interior.ColorIndex = 36
    Next i
    
End Sub


Sub Ciclos5()
'Escribe el texto "Mayor que cero" a la derecha
'de la columna de trabajo
'
Dim UltimaFila As Integer
Dim ColumnaTrabajo
Dim i As Integer

    ColumnaTrabajo = 3
    UltimaFila = Cells(Rows.Count, ColumnaTrabajo).End(xlUp).Row
    
    For i = 1 To UltimaFila
    
        If Cells(i, ColumnaTrabajo).Value > 0 Then
            Cells(i, ColumnaTrabajo + 1).Value = "Mayor que cero"
        End If
        
    Next i
    
End Sub


Ciclos dentro de ciclos

Sub Ciclos()
Dim i As Integer
Dim j As Integer

    For i = 1 To 10
        For j = 1 To 5
            Cells(i + 1, j + 1).Value = i * j
        Next j
    Next i
    
End Sub


Ciclo Do While...Loop

Repetir el ciclo hasta que se cumpla alguna condición


 Do {While | Until} condición
       'código
  Loop



Sub Ciclos()
Dim fila As Integer
    fila = 1

    Do While Cells(fila, 1) <> ""
         Cells(fila, 2).Value = fila
         fila = fila + 1
    Loop
End Sub


Repetir el ciclo hasta que se encuentre una celda vacía

Sub Ciclos()
Dim i As Integer

    i = 1
    
    Do While Not IsEmpty(Cells(i, 1))
      i = i + 1
    Loop
    
   Cells(i, 1).Select
End Sub

Ciclo Do...Loop Until

Repetir el ciclo hasta que se cumpla alguna condición


Do
       'código
    Loop {While | Until} condición


Sub Ciclos()
Dim fila As Integer

    fila = 1
    Do
        Cells(fila, 2) = fila
        fila = fila + 1
    Loop Until Cells(fila, 1).Value = ""

End Sub

Repetir el ciclo hasta que se encuentre una celda vacía

Sub Ciclos()
Dim i As Integer

    i = 0
    
    Do
      i = i + 1
    Loop Until IsEmpty(Cells(i, 1))
    
   Cells(i, 1).Select
End Sub

Cambiar los colores del fondo de una celda

Cambiar el color del fondo de una celda

Propiedad rango.Interior.ColorIndex 

Muestra los primeros 21 colores de fondo que pueden obtener con la propiedad ColorIndex del objeto Interior.

Sub IndiceColor()
Dim i As Integer

Cells(1, 1).Value = "Índice de color"
Cells(1, 2).Value = "Color"

For i = 0 To 20
    Cells(i + 2, 1).Value = i
    Cells(i + 2, 2).Interior.ColorIndex = i
Next i

End Sub


Excel índice de colores


Cambiar el color del fondo de una celda

Tabla antes de la macro

Excel tabla ventas

Cambia el color de las filas que contienen en la segunda columna la palabra "Ventas"
Sub CambiaFondoCelda()
Dim i As Integer

For i = 2 To 11
    If Cells(i, 2).Value = "Ventas" Then
        Cells(i, 1).Resize(1, 4).Interior.ColorIndex = 6
    End If
Next i

End Sub


Tabla después de la macro


Excel Cambiar color de fondo de la celda

Ciclos que muestran el uso de contadores y acumuladores

El siguiente procedimiento muestra el uso de contadores y 
acumuladores en un ciclo.
Calcula la suma y el promedio de un conjunto de números en un 
rango dado.


Calcular sumas y promedios de un rango dado


Sub Promedios()
Dim suma As Double
Dim promedio As Double
Dim n As Double
Dim celda As Range

    suma = 0 'acumula los valores
    n = 0    'cuenta los valores
    
    For Each celda In Selection
        n = n + 1
        suma = suma + celda.Value
    Next celda
    
    promedio = suma / n
    MsgBox "Valores leídos = " & n & vbCrLf & _
           "Suma = " & suma & vbCrLf & _
           "Promedio = " & promedio
End Sub



Cuenta el número de valores mayores, menores o iguales al promedio 
de un conjunto de numero en un rango dado,




Ejemplo del uso de contadores en VBA


Sub Contadores()
Dim suma As Double
Dim promedio As Double
Dim n As Double
Dim celda As Range
Dim mayor As Double
Dim menor As Double
Dim igual As Double

    suma = 0 'acumula los valores
    n = 0    'cuenta los valores
    
    For Each celda In Selection
        n = n + 1
        suma = suma + celda.Value
    Next celda
    
    promedio = suma / n
    
     mayor = 0 'cuenta los valores mayores al promedio
     menor = 0 'cuenta los valores menores al promedio
     igual = 0 'cuenta los valores mayores al promedio
     
     For Each celda In Selection
        
        If celda.Value > promedio Then
            mayor = mayor + 1
        End If
        
        If celda.Value < promedio Then
            menor = menor + 1
        End If
        
        If celda.Value = promedio Then
            igual = igual + 1
        End If
        
     Next celda
    
     MsgBox "Valores leídos      = " & n & vbCrLf & _
            "Promedio            = " & promedio & vbCrLf & _
            "Mayores al promedio = " & mayor & vbCrLf & _
            "Menores al promedio = " & menor & vbCrLf & _
            "Iguales al promedio = " & igual & vbCrLf

End Sub