Está en la página 1de 8

Referenciar rangos en VBA

Una de las cosas que más útil resulta pero de la que he encontrado muy
poca información es de cómo hacer referencias a celdas o rangos en
VBA. Hay muchísimas maneras y cada una tiene su utilidad.
Este post puede servirte para cuando grabes una macro poder
modificarla a tu antojo con muy pocos cambios.

BREVE EXPLICACIÓN PARA HACER REFERENCIA A RANGOS EN VBA

La sintaxis para hacer referencia a rangos en VBA puede ser un poco


compleja puesto que al grabar una macro siempre aparecerá de la
misma manera, pero hay otras muchas muy interesantes.
Lo normal es usar el objeto Range o el objeto Cells.

EJEMPLOS DE REFERENCIAS A RANGOS EN VBA

1. La forma más sencilla y básica

Range("B7")

2. Una forma más elaborada

Cells(7 , 2)

Donde el primer argumento se refiere a la fila y el segundo argumento a


la columna

3. Usando una variable para la columna. Hay varias maneras.


Supongamos que la variable es «iFila«.
Range ("B" & iFila)

Otra manera sería:

Cells(iFila , 2)

4. Usando variables tanto para fila como para columna. Ahora la variable
columna será «iColumna«.
Cells(iFila ,iColumna)

Si queremos referenciar un rango compuesto de más de una celda las


combinaciones de las anteriores serán las que nos permitan hacer
nuestra referencia en función de lo que necesitemos (ejemplo para rango
de B7 a C9).
5. Típica forma sencilla

Range("B7:C9")

6. Usando la variante Cells

Range(Cells(7 ,2),Cells(9,3))

7. Usando la variable iRow para la última fila del rango (en ocasiones no
la conoceremos o será dinámica). Hay dos posibles maneras:

Range ("B7:C"&iFila)

Range(Cells(7 ,2),Cells(iFila, 3))

Cells( 1 , «A»)
Referida a la celda A1

Cómo seleccionar una celda en la hoja de cálculo


activa
Para seleccionar la celda D5 de la hoja de cálculo activa, puede usar uno de los
siguientes ejemplos:

ActiveSheet.Cells(5, 4).Select
-or-
ActiveSheet.Range("D5").Select

Cómo seleccionar una celda en otra hoja de


cálculo en el mismo libro
Para seleccionar la celda E6 en otra hoja de cálculo del mismo libro, puede usar
uno de los siguientes ejemplos:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
Cómo seleccionar un rango de celdas en la hoja
de cálculo activa
Para seleccionar el rango C2: D10 de la hoja de cálculo activa, puede usar
cualquiera de los siguientes ejemplos:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select


ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

or

ActiveSheet.Range(ActiveSheet.Cells(2, 3), ActiveSheet.Cells(10,


4)).Select

or, alternatively, it could be simplified to this:

Range(Cells(2, 3), Cells(10, 4)).Select

Cómo seleccionar un rango de celdas en otra hoja


de cálculo en el mismo libro
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

Cómo seleccionar un rango con nombre en la hoja


de cálculo activa
Para seleccionar el rango con nombre "prueba" de la hoja de cálculo activa,
puede usar cualquiera de los siguientes ejemplos:

Range("Test").Select

Cómo seleccionar un rango con nombre en otra


hoja de cálculo en el mismo libro
Sheets("Sheet1").Activate
Range("Test").Select
Cómo seleccionar una celda relativa a la celda
activa
Para seleccionar una celda que está cinco filas más abajo y cuatro columnas a la
izquierda de la celda activa, puede usar el siguiente ejemplo:

ActiveCell.Offset(5, -4).Select

Para seleccionar una celda que está dos filas por encima y tres columnas a la
derecha de la celda activa, puede usar el siguiente ejemplo:

ActiveCell.Offset(-2, 3).Select

Cómo seleccionar una celda relativa a otra celda


(no la activa)
Para seleccionar una celda que se encuentra cinco filas más abajo y cuatro
columnas a la derecha de la celda C7, puede usar cualquiera de los siguientes
ejemplos:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select


ActiveSheet.Range("C7").Offset(5, 4).Select

Cómo seleccionar un rango de celdas que se


desplaza desde un rango especificado
Para seleccionar un rango de celdas que tenga el mismo tamaño que el rango
con nombre "prueba" pero que se desplace cuatro filas hacia abajo y tres
columnas a la derecha, puede usar el siguiente ejemplo:

ActiveSheet.Range("Test").Offset(4, 3).Select

Si el rango con nombre está en otra hoja de cálculo (no en la activa), Active
primero esa hoja de cálculo y, a continuación, seleccione el rango mediante el
siguiente ejemplo:

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

Cómo seleccionar un rango especificado y


cambiar el tamaño de la selección
Para seleccionar el rango con nombre "base de datos" y, a continuación,
extender la selección cinco filas, puede usar el siguiente ejemplo:

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
Selection.Columns.Count).Select

Cómo seleccionar un rango especificado,


desplazarlo y cambiar su tamaño
Para seleccionar un rango cuatro filas a continuación y tres columnas a la
derecha del rango con nombre "base de datos" e incluir dos filas y una columna
más que el rango con nombre, puede usar el ejemplo siguiente:

Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2,
_
Selection.Columns.Count + 1).Select

Cómo seleccionar la Unión de dos o más rangos


especificados
Para seleccionar la Unión (es decir, el área combinada) de los dos rangos con
nombre "prueba" y "ejemplo", puede usar el siguiente ejemplo:

Application.Union(Range("Test"),
Range("Sample")).Select
Nota

para que este ejemplo funcione, ambos intervalos deben estar en la misma hoja
de cálculo. Tenga en cuenta también que el método Union no funciona en las
distintas hojas. Por ejemplo, esta línea funciona correctamente.

Set y = Application.Union(Range("Sheet1!A1:B2"),
Range("Sheet1!C3:D4"))

pero esta línea

Set y = Application.Union(Range("Sheet1!A1:B2"),
Range("Sheet2!C3:D4"))

Devuelve el mensaje de error:


Cómo seleccionar la última celda de una columna
de datos contiguos
Para seleccionar la última celda de una columna contigua, use el siguiente
ejemplo:

ActiveSheet.Range("a1").End(xlDown).Select

Cuando se utiliza este código con la tabla de ejemplo, se selecciona la celda A4.

Cómo seleccionar la celda en blanco en la parte


inferior de una columna de datos contiguos
Para seleccionar la celda situada debajo de un rango de celdas contiguas, use el
siguiente ejemplo:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).
Select
Cuando se usa este código con la tabla de ejemplo, se selecciona la celda A5.

Cómo seleccionar un rango completo de celdas


contiguas en una columna
Para seleccionar un rango de celdas contiguas en una columna, use uno de los
siguientes ejemplos:

ActiveSheet.Range("a1",
ActiveSheet.Range("a1").End(xlDown)).Select
-or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
End(xlDown).Address).Select

Cuando se utiliza este código con la tabla de ejemplo, se seleccionan las celdas
a1 a A4.

Cómo seleccionar un rango completo de celdas no


contiguas en una columna
Para seleccionar un rango de celdas que no son contiguas, use uno de los
siguientes ejemplos:

ActiveSheet.Range("a1",ActiveSheet.Range("a" &
ActiveSheet.Rows.Count).End(xlUp)).Select
-or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a" & ActiveSheet.Rows.Count). _
End(xlUp).Address).Select

Cuando se usa este código con la tabla de ejemplo, se seleccionan las celdas a1
a A6.

Cómo seleccionar un rango de celdas rectangular


Para seleccionar un rango de celdas rectangular alrededor de una celda, use el
método CurrentRegion. El rango seleccionado por el método CurrentRegion es
un área delimitada por cualquier combinación de filas y columnas en blanco. El
siguiente es un ejemplo de cómo usar el método CurrentRegion:

ActiveSheet.Range("a1").CurrentRegion.Select

Este código seleccionará las celdas a1 a C4. A continuación, se enumeran otros


ejemplos para seleccionar el mismo rango de celdas:

ActiveSheet.Range("a1", _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
-or-
ActiveSheet.Range("a1:" & _
ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

En algunos casos, es posible que desee seleccionar las celdas a1 a C6. En este
ejemplo, el método CurrentRegion no funcionará debido a la línea en blanco de
la fila 5. En los ejemplos siguientes se seleccionan todas las celdas:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
-or-
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
ActiveSheet.Cells(lastRow, lastCol).Address).Select

Seleccionar varias columnas no contiguas de


longitud variable
Para seleccionar varias columnas no contiguas de longitud variable, use la tabla
de ejemplo y el ejemplo de macro siguientes:

asciidocCopiar
A1: 1 B1: 1 C1: 1 D1: 1
A2: 2 B2: 2 C2: 2 D2: 2
A3: 3 B3: 3 C3: 3 D3: 3
A4: B4: 4 C4: 4 D4: 4
A5: B5: 5 C5: 5 D5:
A6: B6: C6: 6 D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select

Cuando se usa este código con la tabla de ejemplo, se seleccionan las celdas a1:
a3 y C1: C6.

También podría gustarte