Objeto Range (Excel)

Representa una celda, una fila, una columna, una selección de celdas que contienen uno o más bloques de celdas contiguos o un rango 3D.

Nota

¿Le interesa el desarrollo de soluciones que amplían la experiencia de Office en varias plataformas? Vea el nuevo modelo de complementos de Office. Los complementos de Office tienen una huella pequeña en comparación con los complementos y soluciones de VSTO, y se pueden construir utilizando casi cualquier tecnología de programación web, como HTML5, JavaScript, CSS3 y XML.

Comentarios

El miembro predeterminado de Range reenvía las llamadas que no tienen parámetros a la propiedad Value y llama con parámetros al Item miembro. Por lo tanto, someRange = someOtherRange equivale a someRange.Value = someOtherRange.Value, someRange(1) a someRange.Item(1) y someRange(1,1) a someRange.Item(1,1).

En la sección de ejemplos se describen los métodos y las propiedades siguientes para devolver un objeto Range:

  • Propiedades Range y Cells del objeto Worksheet
  • Propiedades Range y Cells del objeto Range
  • Las propiedades Rows y Columns del objeto de Worksheet
  • Las propiedades Rows y Columns del objeto Range
  • Propiedad Offset del objeto Range
  • Método Union del objeto Application

Ejemplo

Use Range (arg), donde arg denomina el rango, para devolver un objeto Range que represente una sola celda o un rango de celdas. En el ejemplo siguiente se coloca el valor de la celda A1 en la celda A5.

Worksheets("Sheet1").Range("A5").Value = _ 
    Worksheets("Sheet1").Range("A1").Value

En el ejemplo siguiente se rellena el rango a1: H8 con números aleatorios estableciendo la fórmula de cada celda del rango. Si se utiliza sin calificador de objeto (un objeto a la izquierda del punto), la propiedad Range devuelve un rango de la hoja activa. Si la hoja activa no es una hoja de cálculo, el método produce un error.

Use el método Activate del objeto Worksheet para activar una hoja de cálculo antes de usar la propiedad Range sin un calificador de objeto explícito.

Worksheets("Sheet1").Activate 
Range("A1:H8").Formula = "=Rand()"    'Range is on the active sheet

En el ejemplo siguiente se borra el contenido del rango denominado Criteria.

Nota

Si usa un argumento de texto para la dirección del rango, debe especificar la dirección en la notación de estilo A1 (no se puede usar la notación de estilo R1C1).

Worksheets(1).Range("Criteria").ClearContents

Use Cells en una hoja de cálculo para obtener un rango formado por todas las celdas individuales de la hoja de cálculo. Puede tener acceso a celdas individuales con Item(fila, columna), donde fila es el índice de la fila y columna es el índice de la columna. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada. El ejemplo siguiente define el valor de la celda A1 como 24 y el de la celda B1 como 42 en la primera hoja del libro activo.

Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42

En el ejemplo siguiente se establece la fórmula para la celda A2.

ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"

Aunque también puede usar Range("A1") para devolver la celda A1, a veces la propiedad Cells es más práctica, ya que puede usar una variable para la fila o columna. En el ejemplo siguiente se crean encabezados de fila y columna en la Hoja1. Tenga en cuenta que, después de activar la hoja de cálculo, la propiedad Cells puede usarse sin una declaración explícita de hoja (devuelve una celda de la hoja activa).

Nota

Aunque se pueden usar funciones de cadena de Visual Basic para modificar las referencias de estilo A1, es más fácil (y una mejor práctica de programación) usar la notación Cells(1, 1).

Sub SetUpTable() 
Worksheets("Sheet1").Activate 
For TheYear = 1 To 5 
    Cells(1, TheYear + 1).Value = 1990 + TheYear 
Next TheYear 
For TheQuarter = 1 To 4 
    Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter 
Next TheQuarter 
End Sub

Para obtener un rango con la misma dirección formada por celdas individuales, use expresión.Cells, donde expresión es una expresión que devuelve un objeto Range. En este rango, puede acceder a celdas individuales a través de Elemento (fila, columna), donde se relacionan con la esquina superior izquierda de la primera área del rango. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada. En el siguiente ejemplo se establece la fórmula de la celda C5 y D5 de la primera hoja del libro activo.

Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
Worksheets(1).Range("C5:C10").Cells.Item(1, 2).Formula = "=Rand()"

Use Range (cell1, cell2), donde cell1 y cell2 son objetos Range que especifican las celdas de inicio y fin, para devolver un objeto Range. En el ejemplo siguiente se establece el estilo de línea de borde para las celdas A1:J10.

Nota

Tenga en cuenta que el punto delante de cada repetición de la propiedad Cells es necesario si el resultado de la instrucción anterior With es que se aplicará a la propiedad Cells. En este caso, indica que las celdas están en una hoja de cálculo (sin el punto, la propiedad Cells devolvería las celdas de la hoja activa).

With Worksheets(1) 
    .Range(.Cells(1, 1), _ 
        .Cells(10, 10)).Borders.LineStyle = xlThick 
End With

Use Rows en una hoja de cálculo para obtener un rango formado por todas las filas de la hoja de cálculo. Puede acceder a las filas individuales a través de Item(fila), donde fila es el índice de fila. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada.

Nota

Si los rangos constan solo de filas, no se permite introducir un segundo parámetro en Item. Primero, debe hacer una conversión a celdas individuales usando Cells.

En el ejemplo siguiente se eliminan las filas 4 y 10 de la primera hoja del libro activo.

Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete

Use Columns en una hoja de cálculo para obtener un rango formado por todas las columnas de la hoja de cálculo. Puede obtener acceso a las columnas únicas con Item(fila), donde fila es el índice de la columna, especificado como un número o una dirección de columna de estilo A1. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada.

Nota

Si los rangos constan solo de columnas, no se permite introducir un segundo parámetro en Item. Primero, debe hacer una conversión a celdas individuales usando Cells.

En el ejemplo siguiente se eliminan las columnas «B», «C», «E» y «J» de la primera hoja del libro activo.

Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete

Use_expresión_.Rows, donde expresión es una expresión que devuelve un objeto Range, para obtener un rango formado por las filas de la primera área del rango. Puede obtener acceso a las filas individuales a través de Item(fila), donde fila es el índice de fila relativo desde la parte superior de la primera área del rango. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada.

Nota

Si los rangos constan solo de filas, no se permite introducir un segundo parámetro en Item. Primero, debe hacer una conversión a celdas individuales usando Cells.

En el ejemplo siguiente se eliminan los rangos C8:D8 y C6:D6 de la primera hoja del libro activo.

Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete

Use_expresión_.Columns, donde expresión es una expresión que devuelve un objeto Range, para obtener un rango formado por las columnas de la primera área del rango. Puede obtener acceso a las columnas únicas con Item(fila) [sic], donde fila es el índice relativo de la columna, desde la izquierda de la primera área del rango, especificado como un número o una dirección de columna de estilo A1. Se puede omitir Item ya que el miembro predeterminado de Range reenvía la llamada.

Nota

Si los rangos constan solo de columnas, no se permite introducir un segundo parámetro en Item. Primero, debe hacer una conversión a celdas individuales usando Cells.

En el ejemplo siguiente se eliminan los rangos L2:L10, G2:G10, F2:F10 y D2:D10 de la primera hoja del libro activo.

Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete

Use Offset (row, column), donde row y column son los desplazamientos de fila y columna, para devolver un rango en un desplazamiento especificado a otro rango. En el ejemplo siguiente se selecciona la celda situada tres filas debajo y una columna a la derecha de la celda en la esquina superior izquierda de la selección actual. No puede seleccionar una celda que no está en la hoja activa, por lo que debe activar primero la hoja de cálculo.

Worksheets("Sheet1").Activate 
  'Can't select unless the sheet is active 
Selection.Offset(3, 1).Range("A1").Select

Use Union (rango1, rango2, ...) para devolver rangos de varias áreas, es decir, rangos compuestos de dos o más bloques de celdas contiguos. En el siguiente ejemplo se crea un objeto definido como la unión de los rangos A1: B2 y C3: D4 y, después, selecciona el rango definido.

Dim r1 As Range, r2 As Range, myMultiAreaRange As Range 
Worksheets("sheet1").Activate 
Set r1 = Range("A1:B2") 
Set r2 = Range("C3:D4") 
Set myMultiAreaRange = Union(r1, r2) 
myMultiAreaRange.Select

Si trabaja con selecciones que contienen más de un área, la propiedad Areas resulta útil. Divide una selección de varias áreas en objetos Range individuales y, después, devuelve los objetos como una colección. Puede usar la propiedad Count en la colección devuelta para comprobar una selección que contiene más de un área, como se muestra en el ejemplo siguiente.

Sub NoMultiAreaSelection() 
    NumberOfSelectedAreas = Selection.Areas.Count 
    If NumberOfSelectedAreas > 1 Then 
        MsgBox "You cannot carry out this command " & _ 
            "on multi-area selections" 
    End If 
End Sub

En este ejemplo, se usa el método AdvancedFilter del objeto Range para crear una lista de valores únicos y el número de veces que aparecen dichos valores únicos en el rango de la columna A.

Sub Create_Unique_List_Count()
    'Excel workbook, the source and target worksheets, and the source and target ranges.
    Dim wbBook As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rnSource As Range
    Dim rnTarget As Range
    Dim rnUnique As Range
    'Variant to hold the unique data
    Dim vaUnique As Variant
    'Number of unique values in the data
    Dim lnCount As Long
    
    'Initialize the Excel objects
    Set wbBook = ThisWorkbook
    With wbBook
        Set wsSource = .Worksheets("Sheet1")
        Set wsTarget = .Worksheets("Sheet2")
    End With
    
    'On the source worksheet, set the range to the data stored in column A
    With wsSource
        Set rnSource = .Range(.Range("A1"), .Range("A100").End(xlDown))
    End With
    
    'On the target worksheet, set the range as column A.
    Set rnTarget = wsTarget.Range("A1")
    
    'Use AdvancedFilter to copy the data from the source to the target,
    'while filtering for duplicate values.
    rnSource.AdvancedFilter Action:=xlFilterCopy, _
                            CopyToRange:=rnTarget, _
                            Unique:=True
                            
    'On the target worksheet, set the unique range on Column A, excluding the first cell
    '(which will contain the "List" header for the column).
    With wsTarget
        Set rnUnique = .Range(.Range("A2"), .Range("A100").End(xlUp))
    End With
    
    'Assign all the values of the Unique range into the Unique variant.
    vaUnique = rnUnique.Value
    
    'Count the number of occurrences of every unique value in the source data,
    'and list it next to its relevant value.
    For lnCount = 1 To UBound(vaUnique)
        rnUnique(lnCount, 1).Offset(0, 1).Value = _
            Application.Evaluate("COUNTIF(" & _
            rnSource.Address(External:=True) & _
            ",""" & rnUnique(lnCount, 1).Text & """)")
    Next lnCount
    
    'Label the column of occurrences with "Occurrences"
    With rnTarget.Offset(0, 1)
        .Value = "Occurrences"
        .Font.Bold = True
    End With

End Sub

Métodos

Propiedades

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.