La grabadora repite; el código que ya sabés leer, también. Lo que ninguno hace todavía es adaptarse: revisar cada fila de una lista que un mes tiene 50 filas y otro 500, y actuar distinto según lo que encuentre. Para eso existen las tres piezas de toda automatización — en VBA y en cualquier lenguaje del mundo: variables, bucles y condiciones.
01La idea en una frase
Una variable es una caja con nombre donde guardás un dato (Dim total). Un bucle repite un bloque de código muchas veces (For ... Next). Una condición decide si algo se hace o no (If ... Then). Combinadas: "recorré todas las filas y, si el importe es alto, marcalo".
Cells(fila, columna) — la celda escrita con números: Cells(2, 3) es C2. Como la fila puede ser una variable, el bucle puede visitar Cells(i, 3) con i = 2, 3, 4… y así recorrer la planilla entera, tenga las filas que tenga.02El ejemplo: marcar los gastos altos, solo
Tu planilla de gastos de siempre: categoría en B, importe en C. Querés que la macro recorra las filas 2 a 5 y escriba "Revisar" al lado de todo gasto mayor a 1000:
Sub MarcarGastosAltos()
Dim i As Long
For i = 2 To 5
If Cells(i, 3).Value > 1000 Then
Cells(i, 4).Value = "Revisar"
End If
Next i
End Sub
El resultado en la hoja:
Leelo en voz alta y verás que es casi castellano: "para i de 2 a 5: si la celda de la columna 3 es mayor a 1000, escribí Revisar en la columna 4". Eso mismo con 5.000 filas tarda un parpadeo — y es imposible de grabar con la grabadora, porque la grabadora no decide.
03Cómo lo hacés vos
- Variables: declaralas al principio con
Dim nombre As Tipo(Longpara números enteros,Stringpara texto,Doublepara decimales). - Bucle:
For i = 2 To 5 ... Next i. Arrancá en 2 para saltear el encabezado de la fila 1. - Hasta la última fila (la joya): reemplazá el 5 fijo por
Cells(Rows.Count, 3).End(xlUp).Row— "la última fila con datos de la columna C". Así el bucle se adapta solo al tamaño de la lista, cada mes. - Condición:
If ... Then ... End If; conElsedefinís qué pasa cuando NO se cumple. Es tu vieja amiga, la función SI del Básico, en versión código. - Probá con F8: paso a paso ves al bucle dar cada vuelta y a la condición decidir. La mejor forma de entender qué está pasando.
- "For sin Next" (error de compilación): todo
Fornecesita suNext, y todoIfde varias líneas suEnd If. Si anidás, cada uno cierra el suyo. - El bucle pisa el encabezado: arrancaste en
i = 1. Los datos suelen empezar en la fila 2. - Comparás texto y no coincide: "Transporte" y "transporte " (con espacio) no son iguales para VBA. Limpiá con
Trim()y unificá mayúsculas conLCase(). - Errores de tipeo silenciosos en variables: escribí
Option Expliciten la primera línea del módulo — obliga a declarar todas las variables y te avisa si escribistetotlaen vez detotal. - Quedó en bucle infinito:
EscoCtrl+Pausalo frena (pasa conDo Whilemal armados; conFor ... Toes raro).
🎯 Tu reto
Escribí MarcarGastosAltos sobre tu planilla de gastos y hacelo andar. Después el upgrade real: reemplazá el 5 por Cells(Rows.Count, 3).End(xlUp).Row, agregale 10 filas de datos y ejecutá de nuevo — tiene que marcar hasta la última sin que toques el código. Extra: sumale un Else que escriba "OK" en los gastos normales.
Mandame la captura por WhatsApp con el código y el resultado — el "hasta la última fila" es el patrón que vas a usar toda la vida, vale la pena dejarlo perfecto.
04Adónde sigue esto
Ya tenés todas las piezas: grabar, leer código, y ahora decidir y repetir. La próxima clase las junta en el proyecto que justifica el nivel entero: automatizar tu reporte completo — de la exportación cruda al informe terminado, con una sola macro. Es la Clase 4.
Las tres piezas son simples. Combinarlas para TU proceso es el salto.
Entre el ejemplo de juguete y la macro que resuelve tu caso real hay un par de trampas que se destraban en minutos con alguien al lado. Clases particulares con acompañamiento, sobre tus archivos: online por Zoom o presencial en Montevideo.
💬 Quiero que me acompañes