Range 物件 (Excel)

代表儲存格、列、欄、包含一個或多個連續儲存格區塊的儲存格選取範圍,或是立體範圍。

注意

對於開發跨多個平台,擴充使用者 Office 體驗的解決方案感到興趣嗎? 請參閱新的 Office 增益集模型。 與 VSTO 增益集和解決方案相比,Office 增益集的佔用空間較小,而且您可以使用幾乎任何網頁程式技術 (例如 HTML5、JavaScript、CSS3 和 XML) 來建立這些增益集。

備註

Range 的預設成員會將不帶參數的呼叫轉傳到 Value 屬性,將帶參數的呼叫轉傳到 Item 成員。 相應地,someRange = someOtherRange 等於 someRange.Value = someOtherRange.ValuesomeRange(1) 等於 someRange.Item(1) 以及 someRange(1,1) 等於 someRange.Item(1,1)

範例 部分將會描述下列可傳回 Range 物件的屬性及方法:

範例

使用 Range (arg) 來傳回代表單一儲存格或儲存格範圍的 Range 物件,其中的 arg 會命名範圍。 下列範例會將 A1 儲存格的值指派給 A5 儲存格。

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

下列範例會為範圍中每個儲存格設定公式,以隨機數字填滿範圍 A1:H8。 如果使用此公式時沒有指定物件限定詞 (句點左邊的物件),則 Range 屬性會在使用中的試算表上傳回範圍。 如果使用中的試算表不是工作表 (worksheet),則此方法將會無效。

必須先使用 Worksheet 物件的 Activate 方法啟用工作表,才能在沒有明確物件限定詞的情況下使用 Range 屬性。

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

下列範例會清除 Criteria 範圍的內容。

注意

如果用文字引數指定範圍位址,則必須以 A1 樣式的標記法指定該位址 (不能使用 R1C1 樣式的標記法)。

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

在工作表上使用 Cells 可取得工作表中包含所有單一儲存格的範圍。 您可以透過 Item(row, column) 存取單一儲存格,其中 row 是列索引,column 是欄索引。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。 下列範例會在使用中活頁簿的第一個工作表中,將儲存格 A1 的值設定為 24,儲存格 B1 的值設定為 42。

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

下列範例會設定 A2 儲存格的公式。

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

雖然您也可以使用 Range("A1") 來傳回儲存格 A1,但有時使用 Cells 屬性更方便,因為您可以使用列或欄的變數。 下列範例會在 Sheet1 上建立欄和列標題。 請注意,啟用工作表後,不用明確宣告試算表即可使用 Cells 屬性 (傳回的儲存格會位在使用中的試算表上)。

注意

雖然可以使用 Visual Basic 字串函數來變更 A1 樣式的參照,但是使用 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

Use_expression_.Cells 可取得相同位址中由單一儲存格組成的範圍,其中的 expression 是可傳回 Range 物件的運算式。 在這個範圍中,您可以透過 Item(row, column) 存取單一儲存格,其中的值是相對於範圍中第一個區域左上角的相對值。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。 下列範例會在使用中活頁簿的第一個工作表中,設定 C5 和 D5 的公式。

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

使用 Range (cell1, cell2) 可傳回 Range 物件,其中的 cell1cell2Range 物件,用來指定起始和終止位置的儲存格。 下列範例會設定儲存格 A1:J10 的框線線條樣式。

注意

請注意,如果前面的 With 陳述式的結果將套用於 Cells 屬性,則需要在每次出現 Cells 屬性前加一個句點。 在這種情況下,這表示儲存格於工作表 1 上 (若沒有句點,Cells 屬性將傳回使用中工作表上的儲存格)。

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

在工作表上使用 Rows 可取得工作表中包含所有列的範圍。 您可以透過 Item(row) 存取單一列,其中 row 是列索引。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。

注意

Item 的第二個參數提供給由列組成的範圍是不合法的。 您必須先透過 Cells 轉換為單一儲存格。

下列範例會在使用中活頁簿的第一個工作表中,刪除第 5 列和第 10 列。

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

在工作表上使用 Columns 可取得工作表中包含所有欄的範圍。 您可以透過 Item(row) [sic] 存取單一欄,其中 row 是欄索引,以數字或 A1 樣式的欄位址形式指定。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。

注意

Item 的第二個參數提供給由欄組成的範圍是不合法的。 您必須先透過 Cells 轉換為單一儲存格。

下列範例會在使用中活頁簿的第一個工作表中,刪除 B 欄、C 欄、E 欄 和 J 欄。

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

Use_expression_.Rows 可取得範圍中第一個區域中由列組成的範圍,其中的 expression 是可傳回 Range 物件的運算式。 您可以透過 Item(row) 存取單一列,其中 row 是從範圍中第一個區域最上方開始的相對列索引。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。

注意

Item 的第二個參數提供給由列組成的範圍是不合法的。 您必須先透過 Cells 轉換為單一儲存格。

下列範例會在使用中活頁簿的第一個工作表中,刪除 C8:D8 範圍和 C6:D6 範圍。

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

Use_expression_.Columns 可取得範圍中第一個區域中由欄組成的範圍,其中的 expression 是可傳回 Range 物件的運算式。 您可以透過 Item(row) [sic] 存取單一欄,其中 row 是從範圍中第一個區域左方開始的相對欄索引,以數字或 A1 樣式的欄位址形式指定。 Item 可以省略,因為呼叫會透過 Range 的預設成員轉傳而來。

注意

Item 的第二個參數提供給由欄組成的範圍是不合法的。 您必須先透過 Cells 轉換為單一儲存格。

下列範例會在使用中活頁簿的第一個工作表中,刪除 L2:L10 範圍、G2:G10 範圍、F2:F10 範圍和 D2:D10 範圍。

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

使用 Offset (row, column) 可以傳回相對於另一範圍指定之位移處的範圍,其中 rowcolumn 是列位移及欄位移。 下列範例會選取位於目前選取範圍左上角儲存格向下三列、向右一欄處的儲存格。 您無法選取不在使用中試算表中的儲存格,因此必須先啟動工作表。

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

使用 Union (range1, range2, ...) 可以傳回多區域的範圍,即該範圍是由兩個以上的連續儲存格區塊所組成。 下列範例會建立定義為 A1:B2 範圍與 C3:D4 範圍聯集的物件,然後選取定義的範圍。

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

使用包含多個區域的選取範圍時,Areas 屬性格外有用。 此屬性會將多區域的選取範圍分成個別的 Range 物件,然後以集合的形式傳回這些物件。 對傳回的集合使用 Count 屬性,以驗證是否有包含多個區域的選取範圍,如下列範例所示。

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

此範例會使用 Range 物件的 AdvancedFilter 方法,在欄位 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

方法

屬性

另請參閱

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應