jueves, 1 de mayo de 2014

VBA: Diferencias entre UsedRange y CurrentRegion.

Dedicaré un espacio a explicar la diferencia entre las propiedades UsedRange y CurrentRegion.
Aunque en apariencia podrían ser similares hay un matiz diferenciador, que debemos conocer.
.UsedRange: devuelve un objeto Range que representa el rango utilizado en la hoja de cálculo especificada.
.CurrentRegion: devuelve un objeto Range que representa la región actual (Nota: la región actual es un rango limitado por cualquier combinación de filas y columnas vacías).

Dicho de otro modo, CurrentRegion es el rango rectangular de celdas no en blanco que rodea el objeto Range a la que estamos llamando CurrentRegion.
CurrentRegion deberemos utilizarlo con cuidado, ya que a veces tiene un comportamiento 'complicado'.

UsedRange es una propiedad del objeto WorkSheet; y CurrentRegion es una propiedad del objeto Range.


Para explicarlo más claramente mostraremos un sencillo ejemplo sobre nuestra hoja de cálculo:

VBA: Diferencias entre UsedRange y CurrentRegion.


Vemos claramente don rangos discontinuos de celdas con valores con celdas vacías entremedias: A1:C3 y E6:H7.
Si empleamos .CurrentRegion:

Sub MsgBox_CurrentRegion()
MsgBox Sheets("Hoja1").Cells(1, 1).CurrentRegion.Address(RowAbsolute:=True, ColumnAbsolute:=True, ReferenceStyle:=xlA1)
End Sub 

Devolverá: $A$1:$C$3 ó lo que es igual el Rango R1C1:R3C3 en estilo R1C1

VBA: Diferencias entre UsedRange y CurrentRegion.



Si utilizamos .UsedRange:

Sub MsgBox_UsedRange()
MsgBox Sheets("Hoja1").UsedRange.Address(RowAbsolute:=True, ColumnAbsolute:=True, ReferenceStyle:=xlA1)
End Sub

Devolverá: $A$1:$H$7 ó lo que es igual el Rango R1C1:R7C8 en estilo R1C1

VBA: Diferencias entre UsedRange y CurrentRegion.



Conociendo las diferencias entre ambas podremos aprovecharnos de ellas para conseguir definir variables para nuestros procedimientos... de manera especial para aquellas que nos sirvan para delimitar rangos.

6 comentarios:

  1. Gracias; Que bien de mucha ayuda. Si fuera posible un ejemplo de sumar si de forma dinámica. De antemano gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      podrías emplear un SUMAR.SI con rangos variables empleando DESREF o INDICE para construir esos rangos..
      Si buscas en la categoría de 'Funciones' del blog verás bastantes ejemplos

      Un saludo

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.