表示一個單元格、一行、一列、一個包含單個或若干連續(xù)單元格區(qū)域的選定單元格范圍,或者一個三維區(qū)域。
備注
有興趣開發(fā)跨多個平臺擴展 Office 體驗的解決方案嗎? 查看新的 Office 外接程序模型。 與VSTO外接程序和解決方案相比,Office外接程序占用的空間較小,您可以使用幾乎任何Web編程技術(shù)(例如HTML5,JavaScript,CSS3和XML)來構(gòu)建它們。
Range 的默認(rèn)成員將不包含參數(shù)的調(diào)用轉(zhuǎn)發(fā)至 Value 屬性,并將包含參數(shù)的調(diào)用轉(zhuǎn)發(fā)至 Item 成員。 相應(yīng)地,someRange = someOtherRange
等效于 someRange.Value = someOtherRange.Value
,someRange(1)
等效于 someRange.Item(1)
,someRange(1,1)
等效于 someRange.Item(1,1)
。
有關(guān)返回 Range 對象的下述屬性和方法,可查看示例部分:
使用 Range (arg) 可返回一個 Range 對象,它表示單個單元格或單元格區(qū)域;其中 arg 對范圍進行命令。 下例將單元格 A1 的值賦給單元格 A5。
Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value
下例通過為區(qū)域中的每個單元格設(shè)置公式,在區(qū)域 A1:H8 中填充隨機數(shù)。 在沒有對象限定符的情況下使用它時(對象位于句點左側(cè)),Range 屬性將返回活動工作表上的一個區(qū)域。 如果活動工作表不是一個工作表,則該方法將失敗。
使用 Worksheet 對象的 Activate 方法在你使用 Range 屬性之前激活工作表,而不使用顯式對象限定符。
Worksheets("Sheet1").Activate
Range("A1:H8").Formula = "=Rand()" 'Range is on the active sheet
下例清除區(qū)域名為“Criteria”的區(qū)域中的內(nèi)容。
備注
如果使用文本參數(shù)指定區(qū)域地址,則必須以 A1 樣式記號指定該地址(不能用 R1C1 樣式記號)。
Worksheets(1).Range("Criteria").ClearContents
使用工作表上的 Cells 獲取由工作表上的所有單個單元格組成的區(qū)域。 可以通過 Item(row, column) 訪問單個單元格,其中,row 為行索引,column 為列索引。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。 以下示例設(shè)置活動工作簿第一個工作簿上的單元格 A1 至 24 和單元格 B1 至 42 的值。
Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42
下例設(shè)置單元格 A2 的公式。
ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
雖然也可使用 Range("A1")
返回單元格 A1,但 Cells 屬性有時候更方便,因為可將變量用于行或列。 下例在 Sheet1 上創(chuàng)建列和行標(biāo)題。 請注意,在激活工作表之后,可在沒有顯式工作表聲明的情況下使用 Cells 屬性(它返回活動工作表上的一個單元格)。
備注
雖然可以使用 Visual Basic 字符串函數(shù)轉(zhuǎn)換 A1 樣式引用,但使用 Cells(1, 1)
表示法更為簡便(而且也是更好的編程習(xí)慣)。
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 表達(dá)式將返回一個 Range 對象,以獲取由單個單元格組成的相同地址的區(qū)域。 在此區(qū)域中,你可以通過 Item(row, column) 訪問單個單元格,此位置相對于該區(qū)域的第一個區(qū)的左上角。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。 以下示例設(shè)置活動工作簿第一個工作表單元格 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 對象,其中 cell1 和 cell2 是指定起始和終止單元格的 Range 對象。 下例設(shè)置單元格 A1:J10 的邊框線條樣式。
備注
請注意,如果要對 Cells 屬性應(yīng)用前導(dǎo) With 語句的結(jié)果,則每次出現(xiàn) Cells 屬性時其前面必須具有句點。 在本例中,它表示單元格位于工作表 1 上(不帶句點,Cells 屬性會返回活動工作表上的單元格)。
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
使用工作表上的 Rows 獲取由工作表上的所有行組成的區(qū)域。 可以通過 Item(row) 訪問單個行,其中 row 為行索引。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。
備注
對于包含行的區(qū)域,提供 Item 的第二個參數(shù)是不合法的。 你首先必須通過 Cells 將其轉(zhuǎn)換為單個單元格。
以下示例刪除了活動工作簿第一個工作表的第 5 和第 10 行。
Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete
使用工作表上的 Columns 獲取由工作表上的所有列組成的區(qū)域。 可以通過 Item(row) [sic] 訪問單個列,其中 row 為列索引,以數(shù)值或 A1 樣式的列地址表示。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。
備注
對于包含列的區(qū)域,提供 Item 的第二個參數(shù)是不合法的。 你首先必須通過 Cells 將其轉(zhuǎn)換為單個單元格。
以下示例刪除活動工作簿第一個工作表的列“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 表達(dá)式將返回一個 Range 對象,以獲取由該區(qū)域第一個區(qū)中的行組成的區(qū)域。 可以通過 Item(row) 訪問單個行,其中,row 為該區(qū)域第一個區(qū)頂部的相對行索引。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。
備注
對于包含行的區(qū)域,提供 Item 的第二個參數(shù)是不合法的。 你首先必須通過 Cells 將其轉(zhuǎn)換為單個單元格。
以下示例刪除活動工作簿第一個工作表的區(qū)域 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 表達(dá)式將返回一個 Range 對象,以獲取由該區(qū)域第一個區(qū)中的列組成的區(qū)域。 可以通過 Item(row) [sic] 訪問單個列,其中 row 為該區(qū)域第一個區(qū)左側(cè)的相對列索引,以數(shù)值或 A1 樣式的列地址表示。 Item 可以省略,因為 Range 的默認(rèn)成員會將調(diào)用轉(zhuǎn)發(fā)給它。
備注
對于包含列的區(qū)域,提供 Item 的第二個參數(shù)是不合法的。 你首先必須通過 Cells 將其轉(zhuǎn)換為單個單元格。
以下示例刪除活動工作簿第一個工作表的區(qū)域 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) 可返回相對于另一區(qū)域在指定偏移量處的區(qū)域,其中 row 和 column 分別是行偏移量和列偏移量。 下例選擇從當(dāng)前選定區(qū)域左上角的單元格下移 3 行和右移 1 列所得的單元格。 不能選擇活動工作表上沒有的單元格,因此必須先激活工作表。
Worksheets("Sheet1").Activate
'Can't select unless the sheet is active
Selection.Offset(3, 1).Range("A1").Select
使用 Union (range1, range2, ...) 可返回多區(qū)域范圍,即返回由兩個或更多連續(xù)單元格區(qū)域構(gòu)成的范圍。 下例創(chuàng)建一個定義為區(qū)域 A1:B2 和 C3:D4 的合并區(qū)域的對象,然后選擇所定義的區(qū)域。
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
如果使用包含多個區(qū)域的選定范圍,則 Areas 屬性很有用。 它會將所選定的多區(qū)域范圍劃分為單個 Range 對象,然后以集合的形式返回對象。 可對所返回的集合使用 Count 屬性,以驗證包含多個區(qū)域的選定范圍(如下例所示)。
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 列的區(qū)域中創(chuàng)建一個唯一值列表和這些唯一值的出現(xiàn)次數(shù)。
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
有關(guān)于 Office VBA 或本文檔的疑問或反饋? 請參閱 Office VBA 支持和反饋,獲取有關(guān)如何接收支持和提供反饋的指南。
聯(lián)系客服