6. Rangos y Celdas con VBA
En esta lección aprenderás a:
- Referenciar celdas con
Range("A1")yCells(fila, col). - Leer y escribir con
.Value, insertar fórmulas con.Formula. - Cambiar colores con
.Interior.ColoryRGB(). - Detectar la última fila con datos usando
End(xlUp).
Range vs Cells
Vista tipo Excel: la primera fila muestra las letras de columna; la primera columna muestra los números de fila. En las celdas con fórmula (=...), cada referencia lleva un color distinto. Clic en la referencia: resalta solo esa celda. Clic en el resto de la celda (por ejemplo el = o los operadores): resalta todas las celdas citadas. Repetir el mismo gesto sobre lo ya resaltado lo oculta.
Formas de referenciar celdasResumen
Cells(3, 2) y Range("B3") apuntan exactamente a la misma celda B3.
| A | B | C | |
|---|---|---|---|
| 1 | Forma | Ejemplo | Cuándo usarla |
| 2 | Range("dirección") | Range("B3") | Cuando la dirección es fija o conocida |
| 3 | Range("rango") | Range("A1:C10") | Para operar sobre un bloque de celdas |
| 4 | Cells(fila, col) | Cells(3, 2) | En bucles donde fila o columna varían |
| 5 | Sheets("Hoja").Range() | Sheets("Ventas").Range("A1") | Para acceder a una hoja específica |
Leer y escribir: .Value, .Formula, .Text
Formato: colores, negrita, alineación
Última fila con datos — End(xlUp)
Limpiar un rango
Vista tipo Excel: la primera fila muestra las letras de columna; la primera columna muestra los números de fila. En las celdas con fórmula (=...), cada referencia lleva un color distinto. Clic en la referencia: resalta solo esa celda. Clic en el resto de la celda (por ejemplo el = o los operadores): resalta todas las celdas citadas. Repetir el mismo gesto sobre lo ya resaltado lo oculta.
Métodos para limpiar celdasResumen
Usa ClearContents antes de re-generar un reporte para evitar datos residuales.
| A | B | |
|---|---|---|
| 1 | Método | Qué hace |
| 2 | Range("A1:C10").ClearContents | Borra el contenido pero conserva el formato |
| 3 | Range("A1:C10").ClearFormats | Borra el formato pero conserva el contenido |
| 4 | Range("A1:C10").Clear | Borra contenido Y formato completamente |
| 5 | Range("A1:C10").Delete | Elimina las celdas y desplaza filas/columnas |
Practica en Excel
Abre Excel (o copia los datos con el botón de la tabla), sigue los pasos y comprueba el resultado en tu hoja.
- Escribe nombres en A2:A10 y números en B2:B10. Ejecuta ProcesarTabla() y verifica C.
- Agrega FormatearEncabezado() y ejecútala.
- Borra valores del medio y vuelve a ejecutar ProcesarTabla() — debe detenerse en la última fila con datos.
- Usa ClearContents en A1:C20 y vuelve a ejecutar.
Ejercicios de práctica
Ejercicio 1 — Escribir en celda específica
Crea una Sub que escriba el texto "¡Hola desde VBA!" en la celda D5 usando Range, y el número 42 en E5 usando Cells.
Ver solución sugerida
Ejercicio 2 — Fórmula con .Formula
Escribe números en B2:B10. Usa .Formula para insertar la fórmula =SUMA(B2:B10) en la celda B11 y =PROMEDIO(B2:B10) en B12.
Ver solución sugerida
Ejercicio 3 — Formatear encabezado azul
Crea una Sub que formatee A1:E1 con fondo azul oscuro (RGB(13, 71, 161)), letra blanca, negrita y alineación centrada usando With.
Ver solución sugerida
Ejercicio 4 — Última fila de la col B
Crea una Sub que encuentre la última fila con datos en la columna B usando End(xlUp) y muestre el número de fila con MsgBox.
Ver solución sugerida
Ejercicio 5 — Limpiar y llenar
Crea una Sub que: (1) limpie el rango A1:C10 con ClearContents, (2) escriba "Producto", "Precio", "Stock" como encabezados en la fila 1.
Ver solución sugerida
Ejercicio 6 — Copiar valor a rango ⭐⭐
Escribe un valor en A1. Usa un bucle For i = 2 To 10 para copiar ese mismo valor en A2:A10.
Ver solución sugerida
Ejercicio 7 — Formato de moneda ⭐⭐
Escribe números en B2:B20. Crea una Sub que aplique el formato de moneda "$#,##0.00" a ese rango usando NumberFormat.
Ver solución sugerida
Ejercicio 8 — Verificar si tiene fórmula ⭐⭐
Selecciona una celda antes de ejecutar la macro. Crea una Sub que use ActiveCell.HasFormula para verificar si la celda activa contiene una fórmula y muestre el resultado con MsgBox.
Ver solución sugerida
Ejercicio 9 — Longitud de texto en col B ⭐⭐
Escribe textos en A1:A15. Usa un bucle For para escribir en B la longitud (Len()) de cada texto de la columna A.
Ver solución sugerida
Ejercicio 10 — Usar Offset ⭐⭐
Selecciona cualquier celda antes de ejecutar. Crea una Sub que use ActiveCell.Offset(0, 1) para escribir "Celda vecina" en la celda a la derecha de la activa, y Offset(1, 0) para escribir "Celda abajo" en la celda debajo.
Ver solución sugerida
Ejercicio 11 — Ocultar filas ⭐⭐⭐
Crea una Sub que oculte las filas 3, 5 y 7 usando Rows("3:3").Hidden = True. Crea otra Sub MostrarFilas que las vuelva a mostrar con Hidden = False.
Ver solución sugerida
Ejercicio 12 — Resaltar duplicados ⭐⭐⭐
Escribe nombres en A1:A20 con algunos repetidos. Usa dos bucles For anidados para comparar cada celda con las demás; si encuentra un duplicado, colorea ambas en amarillo.
Ver solución sugerida
Ejercicio 13 — Ancho de columna automático ⭐⭐⭐
Escribe datos en A1:E10. Crea una Sub que ajuste automáticamente el ancho de las columnas A a E usando Columns("A:E").AutoFit. Luego establece un ancho mínimo de 15 con ColumnWidth para cualquier columna más angosta.
Ver solución sugerida
Ejercicio 14 — Buscar y marcar ⭐⭐⭐
Escribe productos en A1:A20. Pide al usuario con InputBox el nombre de un producto a buscar. Recorre con For Each y si lo encuentra, colorea la celda en verde y muestra la dirección; si no existe, muestra "No encontrado".
Ver solución sugerida
Ejercicio 15 — Tabla con formato completo ⭐⭐⭐
Crea una Sub GenerarTablaFormateada que: (1) limpie A1:C11, (2) escriba encabezados en A1:C1 con fondo oscuro y letra blanca, (3) llene 10 filas con datos de ejemplo, (4) aplique bordes a toda la tabla con Borders(xlEdgeBottom).LineStyle = xlContinuous, y (5) ajuste el ancho de columnas con AutoFit.