Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Escribiendo Tu Primer Procedimiento VBA | Introducción a VBA y el Modelo de Objetos de Excel
Excel VBA para Automatización Empresarial

Escribiendo Tu Primer Procedimiento VBA

Desliza para mostrar el menú

Grabar macros te enseña el vocabulario; escribir una desde cero es donde comienzas a pensar como programador.

Anatomía de un procedimiento Sub

Cada bloque reutilizable de código VBA que realiza una acción (en lugar de devolver un valor, que sería una Function) se escribe como un Sub:

Sub ProcedureName()
    ' instructions go here
End Sub

Con el cursor en cualquier parte dentro de un Sub, presiona F5 (o haz clic en la flecha verde Ejecutar) para ejecutarlo. Los comentarios — cualquier línea que comience con una comilla simple (') — son completamente ignorados por VBA; úsalos generosamente para explicar por qué el código hace algo, no solo qué hace, ya que el qué suele ser obvio al leer el propio código.

Hábitos de formato que ofrecen beneficios inmediatos

  • Escribe Option Explicit en la parte superior de cada módulo — obliga a declarar cada variable, lo que ayuda a detectar errores tipográficos antes de que se conviertan en fallos;
  • Indenta el código dentro de bucles y bloques If con una Tabulación — el VBE no te obligará a hacerlo, pero el código sin indentar se vuelve ilegible rápidamente;
  • Usa nombres descriptivos (HighEarnerCount, no x) — te lo agradecerás en tres semanas.

Ejemplo práctico: resaltar altos ingresos

Vamos a escribir, manualmente, un procedimiento que recorra cada empleado en la tabla y resalte a quienes ganan más de $55,000 — algo que el grabador de macros nunca podría hacer, porque requiere una decisión (una instrucción If) repetida para cada fila (un bucle).

Option Explicit
 
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long
 
    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
 
    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i
 
    MsgBox "Done — high earners are highlighted."
End Sub
Explicación línea por línea
expand arrow
  • Dim ws As Worksheet / Dim i As Long — estas líneas declaran dos variables: ws contendrá una referencia a la hoja Employees, e i servirá para contar las filas;
  • Set ws = ThisWorkbook.Worksheets("Employees") — este es el hábito del modelo de objetos: nombra la hoja explícitamente en lugar de depender de la que esté activa en ese momento;
  • ws.Cells(ws.Rows.Count, 1).End(xlUp).Row — un recurso estándar que encuentra la última fila utilizada en la columna A, sin importar cuántos empleados haya en la tabla;
  • For i = 2 To lastRow ... Next i — un bucle que repite el código una vez por cada fila de datos, comenzando en la fila 2 para omitir el encabezado;
  • If ws.Cells(i, 6).Value > 55000 Then — una decisión: solo las filas donde la columna Salary (columna 6) supera 55000 se formatean;
  • MsgBox — una ventana emergente simple que confirma que la macro ha finalizado.

Escribe este procedimiento en modIntro, coloca el cursor dentro de él y presiona F5. Verifica los números tú mismo: Emma Davis y Olivia Brown son las dos empleadas que ganan más de $55,000 en la tabla de ejemplo.

Tarea

  1. Escribe HighlightTopEarners exactamente como se muestra en modIntro y ejecútalo. Confirma que dos filas se vuelven verdes.
  2. Duplica el procedimiento como HighlightITDepartment y cambia la condición para que resalte cualquier fila donde el Departamento (columna 3) sea igual a "IT" en lugar de verificar el Salario.
  3. Agrega un comentario encima de cada procedimiento explicando, en una sola frase, qué hace — practica escribir comentarios para el lector, no para ti mismo.
  4. Guarda el libro nuevamente (sigue siendo .xlsm, así que un Ctrl+S normal es suficiente).
Pista
expand arrow
  1. Selecciona todo el procedimiento HighlightTopEarners (desde Sub hasta End Sub), cópialo y pégalo justo debajo de sí mismo en modIntro.
  2. Cambia el nombre de la segunda copia en la línea Sub a Sub HighlightITDepartment() — cada procedimiento en un módulo necesita un nombre único, o VBA no sabrá a cuál te refieres cuando intentes ejecutarlo.
  3. La condición que debes cambiar es la línea If. Actualmente verifica un número:
If ws.Cells(i, 6).Value > 55000 Then

Ahora debe verificar texto — columna 3 (Departamento) igual a "IT". Recuerda del Capítulo 2 que las comparaciones de texto necesitan comillas alrededor del valor a comparar, y se usa = en lugar de >. 4. Todo lo demás dentro del bucle (la línea Interior.Color, la estructura del bucle) puede permanecer igual — solo cambia la condición que se evalúa.

Agregar comentarios

  1. Una línea de comentario comienza con una apóstrofe (') y va en su propia línea directamente encima de la línea Sub — no dentro del procedimiento.
  2. Escríbelo como si explicaras la macro a un compañero que nunca la ha visto, no como un recordatorio para ti mismo. Compara:
    • Poco útil: ' recorre las filas (describe cómo, lo cual ya muestra el código)
    • Más útil: ' Resalta empleados que ganan más de $55,000 (describe qué logra, lo cual no es obvio a simple vista)
  3. Haz lo mismo para el segundo procedimiento — una frase que describa qué resalta y por qué, en términos del propósito empresarial (personal del departamento de IT), no la mecánica del bucle.
Solución
expand arrow
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 6).Value > 55000 Then
            ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — high earners are highlighted."
End Sub

' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
    Dim ws As Worksheet
    Dim i As Long
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Employees")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, 3).Value = "IT" Then
            ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
        End If
    Next i

    MsgBox "Done — IT department is highlighted."
End Sub

Escribe ambos en modIntro, ejecuta primero HighlightTopEarners y confirma que exactamente dos filas se vuelven verdes (Emma Davis con $62,000 y Sophia Miller con $59,000 — las otras tres están en o por debajo de $55,000), luego ejecuta HighlightITDepartment y confirma que la fila de Sophia Miller se resalta en su lugar. Guarda con Ctrl+S una vez que ambos funcionen.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 1. Capítulo 6
some-alt