Cómo seleccionar celdas o rangos mediante los procedimientos de Visual Basic en Excel

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un procedimiento en particular, pero no modificarán estos ejemplos para proporcionar una funcionalidad agregada ni crear procedimientos que se ajusten a sus necesidades específicas. Los ejemplos de este artículo usan los métodos de Visual Basic que se enumeran en la tabla siguiente.

Method             Arguments
------------------------------------------
Activate           none
Cells              rowIndex, columnIndex
Application.Goto   reference, scroll
Offset             rowOffset, columnOffset
Range              cell1
                   cell1, cell2
Resize             rowSize, columnSize
Select             none
Sheets             index (or sheetName)
Workbooks          index (or bookName)
End                direction
CurrentRegion      none

En los ejemplos de este artículo se usan las propiedades de la tabla siguiente.

Property         Use
---------------------------------------------------------------------
ActiveSheet      to specify the active sheet
ActiveWorkbook   to specify the active workbook
Columns.Count    to count the number of columns in the specified item
Rows.Count       to count the number of rows in the specified item
Selection        to refer to the currently selected range

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:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   -or-
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 1 anterior para seleccionar la celda:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

Cómo seleccionar una celda en una hoja de cálculo de un libro diferente

Para seleccionar la celda F7 en una hoja de cálculo de un libro diferente, puede usar cualquiera de los ejemplos siguientes:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
-or-
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 1 anterior para seleccionar la celda:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).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

Para seleccionar el rango D3: E11 en otra hoja de cálculo del mismo libro, puede usar uno de los ejemplos siguientes:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 4 anterior para seleccionar el intervalo:

Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

Cómo seleccionar un rango de celdas en una hoja de cálculo de un libro diferente

Para seleccionar el rango E4: F12 en una hoja de cálculo de un libro diferente, puede usar cualquiera de los ejemplos siguientes:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
Application.Goto _
      Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 4 anterior para seleccionar el intervalo:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
   ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).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
Application.Goto "Test"

Cómo seleccionar un rango con nombre en otra hoja de cálculo en el mismo libro

Para seleccionar el rango con nombre "prueba" en otra hoja de cálculo del mismo libro, puede usar el siguiente ejemplo:

Application.Goto Sheets("Sheet1").Range("Test")

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 7 anterior para seleccionar el rango con nombre:

Sheets("Sheet1").Activate
Range("Test").Select

Cómo seleccionar un rango con nombre en una hoja de cálculo de un libro diferente

Para seleccionar el rango con nombre "prueba" en una hoja de cálculo de un libro diferente, puede usar el siguiente ejemplo:

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

O bien, puede activar la hoja de cálculo y, a continuación, usar el método 7 anterior para seleccionar el rango con nombre:

Workbooks("BOOK2.XLS").Sheets("Sheet2").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

Nota

Se producirá un error si intenta seleccionar una celda que está "fuera de la hoja de cálculo". El primer ejemplo anterior devolverá un error si la celda activa está en las columnas A a D, ya que mover cuatro columnas a la izquierda, tomaría la celda activa en una dirección de celda no válida.

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:

Error en el método de unión de la clase Application

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

Para seleccionar la intersección de los dos rangos con nombre "prueba" y "ejemplo", puede usar el siguiente ejemplo:

Application.Intersect(Range("Test"), Range("Sample")).Select

Tenga en cuenta que ambos intervalos deben estar en la misma hoja de cálculo para que este ejemplo funcione.

Los ejemplos 17-21 de este artículo hacen referencia al siguiente conjunto de datos de muestra. En cada ejemplo se indica el rango de celdas en los datos de ejemplo que se seleccionarían.

A1: Name    B1: Sales    C1: Quantity
A2: a       B2: $10      C2: 5
A3: b       B3:          C3: 10
A4: c       B4: $10      C4: 5
A5:         B5:          C5:
A6: Total   B6: $20      C6: 20

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:

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.

Notas sobre los ejemplos

Normalmente, la propiedad ActiveSheet puede omitirse, porque está implícita si no se asigna un nombre a una hoja específica. Por ejemplo, en lugar de

ActiveSheet.Range("D5").Select

puede usar:

Range("D5").Select

La propiedad ActiveWorkbook también se puede omitir normalmente. A menos que se haya asignado un nombre a un libro específico, el libro activo es implícito.

Cuando use el método Application. Goto, si desea usar dos métodos Cells dentro del método Range cuando el rango especificado está en otra hoja de cálculo (no en la activa), debe incluir el objeto Sheets cada vez. Por ejemplo:

    With ActiveWorkbook.Sheets("Sheet1")
        Application.Goto .Range(.Cells(2, 3), .Cells(4, 5))
    End With

Para cualquier elemento entre comillas (por ejemplo, el rango con nombre "prueba"), también puede usar una variable cuyo valor sea una cadena de texto. Por ejemplo, en lugar de

ActiveWorkbook.Sheets("Sheet1").Activate

puede usar

ActiveWorkbook.Sheets(myVar).Activate

donde el valor de myVar es "Sheet1".