Saltar a contenido

S42 · Macros en Excel (automatización y VBA básico)

Datos de la sesión

Fecha: viernes 4-sep-2026 · Horario: 20:00 – 22:00 · Duración: 2 h · Sesión: 42 de 47 · Unidad: 4

Una macro registra una secuencia de acciones para repetirla con consistencia. En esta sesión se automatizan tareas sencillas de Excel y se observa el código VBA generado por la grabadora. La meta es ahorrar trabajo repetitivo sin convertir el archivo en una caja negra: toda macro debe tener un propósito, un nombre claro y una forma segura de probarse.

Objetivos

  • Identificar tareas repetitivas que conviene automatizar.
  • Grabar, ejecutar y modificar una macro sencilla.
  • Reconocer variables, rangos y procedimientos Sub en VBA.
  • Usar referencias explícitas y evitar seleccionar celdas innecesariamente.
  • Guardar un libro habilitado para macros y revisar sus permisos.

Contenidos

1. Grabar una macro

Activa la pestaña Programador, elige Grabar macro, asigna un nombre sin espacios y realiza una tarea pequeña, como aplicar formato a una tabla o limpiar un reporte. Detén la grabación y ejecuta la macro sobre una copia de prueba.

2. Leer el código generado

En Programador → Visual Basic, una macro grabada tiene una estructura similar:

Sub FormatearReporte()
    Range("A1:F1").Font.Bold = True
    Range("A1:F1").Interior.Color = RGB(31, 78, 121)
End Sub

Reemplaza rangos fijos por referencias justificadas y comenta los pasos que otro usuario deba mantener.

Seguridad

No habilites macros de archivos desconocidos. Trabaja con una copia, revisa el código antes de ejecutarlo y no uses macros para ocultar datos, modificar archivos ajenos o enviar información sin autorización.

3. Condicionales: decidir qué hacer

Una macro puede revisar cada fila y aplicar una acción solo cuando se cumple una condición. Por ejemplo, marcar ventas altas y detectar datos incompletos:

Sub MarcarVentasAltas()
    Dim ultimaFila As Long
    Dim fila As Long
    Dim monto As Double

    ultimaFila = Cells(Rows.Count, "A").End(xlUp).Row

    For fila = 2 To ultimaFila
        monto = Cells(fila, "E").Value

        If monto >= 1000 Then
            Cells(fila, "F").Value = "Alta"
            Cells(fila, "F").Interior.Color = RGB(198, 239, 206)
        ElseIf monto > 0 Then
            Cells(fila, "F").Value = "Regular"
        Else
            Cells(fila, "F").Value = "Revisar"
            Cells(fila, "F").Interior.Color = RGB(255, 199, 206)
        End If
    Next fila
End Sub

If...Then...ElseIf...Else permite clasificar; For...Next repite la operación fila por fila. La columna E debe contener el monto y la F queda como clasificación. Prueba primero sobre una copia y valida cinco filas a mano.

4. Bucles For: recorrer filas y columnas

Los bucles son útiles para tareas que cambian de tamaño. Este ejemplo encuentra la última fila, limpia espacios en una columna de nombres y cuenta cuántos registros están completos:

Sub LimpiarNombresYContar()
    Dim ultimaFila As Long
    Dim fila As Long
    Dim completos As Long

    ultimaFila = Cells(Rows.Count, "A").End(xlUp).Row
    completos = 0

    For fila = 2 To ultimaFila
        Cells(fila, "A").Value = Trim(Cells(fila, "A").Value)

        If Cells(fila, "A").Value <> "" And Cells(fila, "B").Value <> "" Then
            completos = completos + 1
        End If
    Next fila

    Range("H2").Value = "Registros completos"
    Range("I2").Value = completos
End Sub

Para procesar varias columnas se puede anidar otro For:

Sub ResaltarCeldasVacias()
    Dim fila As Long
    Dim columna As Long

    For fila = 2 To 20
        For columna = 1 To 5
            If Cells(fila, columna).Value = "" Then
                Cells(fila, columna).Interior.Color = RGB(255, 235, 156)
            End If
        Next columna
    Next fila
End Sub

5. For Each: recorrer hojas o celdas

For Each hace más legible el recorrido cuando no necesitas controlar el número de fila:

Sub RevisarHojasVacias()
    Dim hoja As Worksheet

    For Each hoja In ThisWorkbook.Worksheets
        If Application.WorksheetFunction.CountA(hoja.UsedRange) = 0 Then
            hoja.Tab.Color = RGB(255, 199, 206)
        End If
    Next hoja
End Sub

ThisWorkbook se refiere al libro que contiene la macro. Evita usar ActiveWorkbook cuando el procedimiento pueda abrir o activar otro libro.

Buenas prácticas al repetir muchas operaciones

Usa Option Explicit, declara variables, limita el rango con ultimaFila, prueba con pocos registros y evita Select/Activate. Si una macro tarda mucho, puedes desactivar temporalmente la actualización de pantalla y restaurarla siempre al terminar:

Application.ScreenUpdating = False
' ... proceso ...
Application.ScreenUpdating = True

Actividad en clase · Automatizar el reporte del PA4 (60 min)

  1. Formato grabado (10 min): graba una macro que aplique formato profesional al encabezado y a una tabla de resumen.
  2. Clasificación con For e If (20 min): recorre las ventas, marca como Alta, Regular o Revisar según el monto y colorea el resultado.
  3. Control de calidad (15 min): recorre filas y columnas para resaltar celdas vacías y cuenta registros completos.
  4. Integración (10 min): combina limpieza, clasificación y formato en un procedimiento principal, sin repetir código innecesario.
  5. Cierre (5 min): prueba con datos conocidos, revisa el código y guarda como PA4-macro-reporte.xlsm.

Entregable: el archivo .xlsm, una captura del resultado, el código comentado y una explicación breve de dónde se utilizó un bucle y dónde un condicional.

Retos opcionales

  • Cambia el umbral de ventas altas para leerlo desde una celda de configuración.
  • Usa Select Case para clasificar sedes o categorías por texto.
  • Crea un resumen por sede recorriendo las filas con For y acumulando los montos.
  • Añade manejo de errores para restaurar ScreenUpdating si ocurre un problema.

Recursos