🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA CurrentRegion en Excel — toma todo el bloque de datos en una línea (y qué le hace una fila en blanco)

|

VBA CurrentRegion en Excel — toma todo el bloque de datos en una línea (y qué le hace una fila en blanco)

TL;DRCurrentRegion es el bloque contiguo de celdas alrededor de una celda. Excel empieza en tu celda y se expande hacia afuera hasta topar con una fila totalmente en blanco y una columna totalmente en blanco, y devuelve el rectángulo más pequeño que encierra esa isla ininterrumpida — lo mismo que selecciona Ctrl+Mayús+*. Tú no calculas los bordes; Excel los encuentra. La trampa: una sola fila o columna totalmente en blanco es un muro que parte el bloque sin avisar, así que puedes obtener la mitad de tus datos sin ningún error. También incluye la fila de encabezado — quítala con Offset y Resize.

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Data")
Dim block As Range
Set block = ws.Range("A1").CurrentRegion        ' toda la tabla alrededor de A1, encabezado incluido
' Solo los datos - baja mas alla del encabezado y encoge la altura en uno:
Dim body As Range
Set body = block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count)

CurrentRegion es el antídoto a codificar a mano "A1:D100". En vez de calcular dónde terminan los datos, le pides a Excel que te entregue el bloque que ya puede ver. Esta guía se construye sobre la única idea que la vuelve fiable: CurrentRegion la definen los bordes en blanco, así que es tan fiable como limpios estén tus datos. Ten eso claro y tanto su potencia (una línea toma la tabla) como su modo de fallo (una fila en blanco la parte por la mitad) salen de la misma regla.

Lo que aprenderás

  • El modelo mental — Excel se expande desde tu celda hasta los bordes en blanco
  • La regla más importante — una fila o columna totalmente en blanco es un muro
  • Por qué CurrentRegion incluye el encabezado, y cómo quitarlo
  • En qué se diferencia de UsedRange y de End(xlUp)
  • Tomar el bloque una vez, desde cualquier celda de su interior
  • Cuándo fiarte de CurrentRegion — y cuándo usar en su lugar una Tabla de verdad

El modelo mental: Excel se expande hasta los bordes en blanco

CurrentRegion responde «¿cuál es el bloque de datos alrededor de esta celda?». Excel comienza en la celda que nombras y hace crecer el rectángulo hacia afuera en todas las direcciones, deteniéndose solo cuando una fila entera y una columna entera de celdas en blanco lo cierran:

' Si A1:D101 es una tabla solida rodeada de celdas vacias, esto es A1:D101:
Set block = ws.Range("A1").CurrentRegion

Es la versión en código de hacer clic dentro de una tabla y pulsar Ctrl+Mayús+* (o Ctrl+A una vez) — Excel selecciona la isla sobre la que estás. La consecuencia clave es que los límites se descubren, no se declaran: nunca escribes la última fila ni la última columna, así que la referencia se ajusta sola a datos que crecieron o encogieron desde la última vez que miraste. Ese es todo el atractivo, y la siguiente regla es su precio.

La regla más importante: una fila o columna en blanco es un muro

Como el bloque está delimitado por el vacío, una sola fila o columna totalmente en blanco lo detiene en seco. Una fila vacía en medio de tus datos y CurrentRegion devuelve solo la parte de encima — sin avisar, sin ningún error:

' Filas 1-50 con datos, fila 51 totalmente en blanco, filas 52-100 con datos:
Set block = ws.Range("A1").CurrentRegion   ' devuelve solo A1:D50 - la mitad inferior se pierde

Lo contrario también muerde: un valor perdido a un hueco de distancia se arrastra dentro, hinchando la región más allá de tus datos reales. Lo que no lo rompe es una sola celda vacía dentro del bloque — que falte un valor en una fila no es problema; solo una fila o columna entera en blanco actúa como muro. Así que CurrentRegion es exactamente lo correcto para tablas limpias y sólidas, y exactamente lo incorrecto para hojas con huecos de subtotales, filas separadoras o columnas separadoras en blanco. Cuando el bloque vuelve del tamaño equivocado, busca huecos interiores antes de sospechar de nada más.

CurrentRegion incluye el encabezado — cómo quitarlo

CurrentRegion devuelve la fila de encabezado junto con los datos, que es la razón número uno de que un bucle «procesara el título como un registro». Para obtener el cuerpo de datos, pasa de la primera fila y acorta la altura en uno — la pareja exacta de Offset + Resize del resto de este grupo:

Dim block As Range: Set block = ws.Range("A1").CurrentRegion
Dim body As Range
Set body = block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count)
' body ahora excluye el encabezado; recorrelo o leelo como una matriz.

Offset(1, 0) desliza la referencia entera una fila hacia abajo; luego Resize recorta la altura en uno para que no se derrame más allá del fondo. Esta es la recompensa del grupo: CurrentRegion detecta el bloque, y Offset y Resize tallan la parte que de verdad quieres.

CurrentRegion frente a UsedRange frente a End(xlUp)

Tres herramientas dicen «encontrar los datos», y elegir mal es una fuente habitual de rangos demasiado grandes o demasiado pequeños:

  • CurrentRegion — el bloque contiguo alrededor de una celda. Normalmente lo que quieres: sigue la isla real de datos e ignora los valores sueltos lejanos (mientras haya un hueco en blanco).
  • UsedRange — todo lo que Excel cree que se ha tocado, incluidas las celdas con formato pero vacías y las celdas a las que borraste el valor sin restablecerlas. Habitualmente infla el resultado, devolviendo un rango mucho mayor que tus datos (ver VBA UsedRange).
  • End(xlUp) / última fila — encuentra un solo borde, el fondo de una columna. Úsalo cuando todo lo que necesitas es el número de filas (ver VBA Última fila); usa CurrentRegion cuando quieres todo el rectángulo en una sola llamada.

Regla general: echa mano de CurrentRegion para tomar el bloque, de End(xlUp) para medir una dimensión, y evita apoyarte en UsedRange para la extensión de los datos porque miente después de las ediciones.

Tómalo una vez, desde cualquier celda del bloque

CurrentRegion funciona desde cualquier celda del interior de la isla, no solo desde la superior izquierda — por eso ActiveCell.CurrentRegion toma la tabla en la que esté parado el usuario:

Set block = ActiveCell.CurrentRegion        ' la tabla alrededor de donde este el cursor

Además, se reevalúa cada vez que lo llamas, así que guárdalo una vez y reutiliza la variable en lugar de llamar a .CurrentRegion repetidamente:

Dim block As Range: Set block = ws.Range("A1").CurrentRegion
Debug.Print block.Rows.Count, block.Columns.Count   ' reutiliza block, no lo vuelvas a detectar

Si la hoja cambia después de capturarlo, vuelve a leerlo — la variable es una instantánea del bloque tal como estaba cuando lo llamaste, no una referencia viva que crece por sí sola.

Cuándo fiarte — y cuándo usar una Tabla

CurrentRegion es la opción por defecto correcta para «actúa sobre la tabla que está aquí», pero solo cuando tus datos tienen bordes limpios: sin filas ni columnas en blanco interiores, sin valores sueltos a un hueco de distancia. En hojas hechas para personas — huecos de subtotales, filas separadoras entre secciones, columnas en blanco por estética — devolverá sin avisar el rectángulo equivocado. Cuando tu diseño tenga eso, no lo disimules con detección de celdas en blanco; dale a los datos una forma de verdad. Convierte el bloque en una Tabla de Excel (ListObject), cuyo .DataBodyRange lo define la estructura, no dónde caigan los huecos, y que crece automáticamente a medida que se añaden filas. Como en VBA Range, la forma debe vivir en los datos — CurrentRegion lee una forma que los datos limpios ya tienen; una Tabla la garantiza.

Cómo ayuda ExcelMaster

CurrentRegion mete varios fallos silenciosos en una sola llamada cómoda: una fila en blanco que parte el bloque por la mitad, una fila de encabezado arrastrada dentro de los datos, un valor suelto que hincha el rango, y la elección entre él, UsedRange y End(xlUp) que decide si obtienes de más o de menos. Ninguno de ellos lanza un error — simplemente procesas las celdas equivocadas.

ExcelMaster te deja describir el resultado en su lugar. Di «lee la tabla de datos de esta hoja, sin el encabezado», y toma el bloque, comprueba si hay huecos interiores que la truncarían, quita el encabezado con Offset y Resize, y te devuelve el cuerpo — o sugiere una Tabla de verdad cuando el diseño tiene huecos que CurrentRegion no puede sobrevivir. Te quedas con el libro y con el código; te ahorras la ejecución en la que la mitad de las filas desaparecieron sin avisar.

Preguntas frecuentes

¿Qué es CurrentRegion en Excel VBA?

CurrentRegion es el bloque contiguo de celdas alrededor de una celda dada — el rectángulo hasta el que Excel se expande hasta encontrar una fila totalmente en blanco y una columna totalmente en blanco. Range("A1").CurrentRegion devuelve todo ese bloque, encabezado incluido. Es el equivalente en código de pulsar Ctrl+Mayús+* dentro de una tabla, y te permite referirte a los datos sin calcular la última fila ni columna.

¿Por qué CurrentRegion se detiene en una fila en blanco?

Porque el bloque está delimitado por el vacío. Una fila o columna totalmente en blanco actúa como muro, así que Excel deja de expandirse ahí y devuelve solo la parte de tu lado del hueco — sin avisar, sin ningún error. Una sola celda vacía dentro de una fila no lo rompe; solo lo hace una fila o columna entera en blanco. Quita las filas y columnas en blanco interiores si quieres que CurrentRegion capture toda la tabla.

¿Cuál es la diferencia entre CurrentRegion y UsedRange?

CurrentRegion es el bloque contiguo alrededor de una celda concreta y sigue tus datos reales. UsedRange es todo lo que Excel cree que se ha usado en la hoja, incluidas las celdas con formato pero vacías y las celdas borradas sin restablecer — a menudo infla el resultado y devuelve un rango mayor que los datos. Usa CurrentRegion (o una Tabla) para obtener el bloque de datos verdadero; trata UsedRange como un límite superior, no como una extensión exacta.

¿Cómo excluyo la fila de encabezado de CurrentRegion?

Desplaza el bloque una fila hacia abajo y redimensiona su altura en uno menos: block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count). Offset(1, 0) mueve la referencia más allá del encabezado, y Resize recorta la última fila para que el resultado no se derrame por debajo de los datos. Protege el caso en que el bloque es solo una fila de encabezado, que daría un Resize de cero filas.

¿Puedo usar CurrentRegion desde cualquier celda de la tabla?

Sí. CurrentRegion funciona desde cualquier celda del interior del bloque contiguo, no solo desde la superior izquierda, así que ActiveCell.CurrentRegion devuelve la tabla en la que está el cursor. Se reevalúa cada vez que lo llamas, así que guarda el resultado en una variable y reutilízalo en lugar de llamar a .CurrentRegion repetidamente, y vuelve a leerlo si la hoja cambia.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 15/08/2026.

Guías relacionadas: VBA Resize · VBA Offset · VBA Cells · VBA UsedRange · VBA Última fila