一個Range物件代表一個儲存格、一行、一列或多個儲存格集合(儲存格區域), 甚至可以是多個工作表上的一組儲存格。
在Excel中使用VBA程式設計時,
需要頻繁地引用儲存格區域,
然後再使用相應的屬性和方法對區域進行操作。
正像平時在工作表中需要“先選定,
後操作”一樣。
(儲存格區域可以是單個的儲存格,
也可以是多個儲存格(連續或非連續)組成的區域,
整行或整列等。
)
目錄
1 使用A1樣式引用儲存格
2 在Cells屬性中用索引號引用儲存格
3 用Offset屬性偏移引用儲存格
4 引用表格中的整行或整列
5 用End屬性查找資料區域邊界
6 用CurrentRegion屬性引用當前區域
7 用UsedRange屬性獲取已使用區域
8 用Interset方法獲取重疊區域引用
9 用Union方法獲取合併區域引用
10 用SpecialCells方法獲取指定類型的儲存格
11 用Areas集合引用合併區域的子區域
12 用Item屬性引用區域內的單個儲存格
13 用Resize屬性擴展儲存格區域
1 使用A1樣式引用儲存格常見的表示方法如下:
Worksheets(1).Range ("A1")
Worksheets(1).Range ("A1:C5")
Worksheets(1).Range ("C5:D9,G9:H16,B14:D18")
Worksheets(1).Range ("MyRange,YourRange,HisRange")
其中MyRange,YourRange,HisRange為儲存格區域的名稱。
也還可以使用以下方式引用儲存格:
[D5]:引用儲存格“D5”;
ActiveCell:目前的儲存格。
常見的表示方法如下:
Worksheets(1).Cells(5,“E”):表示儲存格"E5";Worksheets(1).Cells(5,5):表示儲存格"E5";
Range(Cells(1,1),Cells(5,3)):表示A1:C5儲存格區域;
Worksheets(1).Cells '第一個工作表的所有儲存格
Sub 儲存格序號()
Dim i As Long, j As Long
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Value = (i - 1) * 5 + j
Next
Next
End Sub
3 用Offset屬性偏移引用儲存格Range物件的Offset屬性返回一個Range物件, 表示位於指定儲存格區域的一定的偏移量位置上的區域。
常見的表示寫法如下:
Range("C3").Offset(2,2) '表示儲存格E5
Range("D3").Offset(, -1) '表示儲存格C3
4 引用表格中的整行或整列常見的表示方法如下:
Range("A:C").Select '表示選擇A-C列
Range("1:1").Select '表示選擇第1行
Range("1:3").Select '表示選擇第1-3行
Range("A:A").Select '表示選擇A列
Range("A3").EntireColumn '表示選擇C列
Range("A3").EntireRow '表示選擇第1行
5 用End屬性查找資料區域邊界在Excel中, 按複合鍵Ctrl+游標鍵可在資料區域中查找到資料區域的邊界。 在VBA中可通過使用Range物件的End屬性來進行相同的操作。
使用Range物件的End屬性將返回一個Range物件, 該物件代表包含源區域的區域尾端的儲存格。 其語法格式如下:
運算式.End(Direction)
5.1 選取B列第一個非空儲存格
If Range("B1") = "" Then
Range("B1").End(xlDown).Selcet
Else
Range("B1").Selcet
End if
5.2 選取B列最後一個非空儲存格
Range("B65536".End(xlUp).Select
5.3 選取11列最左邊非空儲存格
If Range("A11") = "" Then
Range("A11").End(xlToRight).Selcet
Else
Range("A11").Selcet
End if
5.4 選取第17行最右邊非空儲存格
Range("IV17").End(xlToLeft).Select
(end()方法儲存格的選取, 從空到非空, 從非空到空;)
Sub 選擇連續資料區域()
Dim rng1 As Range
Dim i As Long, col As Long
i = Application.InputBox(prompt:="請輸入要選擇資料的行:", Type:=1)
col = Range("A" & i).End(xlToRight).Column
Set rng1 = Range(Cells(i, 1), Cells(i, col))
rng1.Select
Set rng1 = Nothing
End Sub
6 用CurrentRegion屬性引用當前區域所謂當前區域, 是指以空行與空列的組合為邊界的區域。 常用來表示一個由當前區域展開到空行或空列的區域。
Dim rng1 As Range
Set rng1 = Range("A1")
Set rng1 = rng1.CurrentRegion
7 用UsedRange屬性獲取已使用區域ActiveSheet.UsedRange.Select
Sub 重疊區域()
Dim rng1 As Range, rng2 As Range, rng3 As Range
Set rng2 = Range("A1:E10")
Set rng3 = Range("C1:C10")
Set rng1 = Application.Intersect(rng2, rng3)
MsgBox rng1.Address
End Sub
9 用Union方法獲取合併區域引用Sub 選擇不連續資料區域()
Dim rng1 As Range, rng2 As Range
Set rng1 = Range("A1", Range("A1").End(xlDown))
Set rng2 = Range("E1", Range("E1").End(xlDown))
Union(rng1, rng2).Select
Set rng1 = Nothing
Set rng2 = Nothing
End Sub
10 用SpecialCells方法獲取指定類型的儲存格Range.SpecialCells 方法可以返回一個 Range 物件, 該物件代表與指定類型和值匹配的所有儲存格。 其語法如下: 運算式.SpecialCells(Type,Value) 。
參數Type為一個常量,
指定要包含的儲存格,
常用的常數如下所述:
XlCellType 常量
值
說明
xlCellTypeAllFormatConditions
-4172
任意格式儲存格
xlCellTypeAllValidation
-4174
含有驗證條件的儲存格
xlCellTypeBlanks
4
空儲存格
xlCellTypeComments
-4144
含有注釋的儲存格
xlCellTypeConstants
2
含有常量的儲存格
xlCellTypeFormulas
-4123
含有公式的儲存格
xlCellTypeLastCell
11
已用區域中的最後一個儲存格
xlCellTypeSameFormatConditions
-4173
含有相同格式的儲存格
xlCellTypeSameValidation
-4175
含有相同驗證條件的儲存格
xlCellTypeVisible
12
所有可見儲存格
當Type參數為 xlCellTypeConstants 或 xlCellTypeFormulas時, Value參數有4種XlSpecialCellsValue 常量可選, 見下表:
XlSpecialCellsValue 常量
值
說明
xlErrors
16
錯誤值
xlLogical
4
邏輯值
xlNumbers
1
數位
xlTextValues
2
文本
Sub 不含公式的儲存格()
Dim rng As Range, rng1 As Range, rng2 As Range
Set rng = ActiveSheet.UsedRange '當前使用儲存格區域
rng.SpecialCells(xlCellTypeFormulas).Select '選擇公式儲存格
For Each rng1 In rng
If Application.Intersect(rng1, Selection) Is Nothing Then '儲存格在公式區域
If rng2 Is Nothing Then
Set rng2 = rng1
Else
Set rng2 = Union(rng2, rng1) '合併區域
End If
End If
Next
rng2.Select '選擇區域
End Sub
11 用Areas集合引用合併區域的子區域Sub 引用子區域()
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Range("A1:C3, E1:F5, A8:C9")
rng1.Select
For i = 1 To rng1.Areas.Count
Set rng2 = rng1.Areas(i)
str1 = "子區域" & i & vbCr & vbCr
str1 = str1 & "行數:" & rng2.Rows.Count & vbCr
str1 = str1 & "列數:" & rng2.Columns.Count
MsgBox str1
Next
Set rng1 = Nothing
Set rng2 = Nothing
End Sub
12 用Item屬性引用區域內的單個儲存格要獲取選中區域中的某個儲存格的值, 可以使用Range物件的Item屬性來訪問。 語法格式如下:
運算式.Item(RowIndex,[ColumnIndex])
當後一個參數省略時, 前一參數表示該儲存格區域的第n個儲存格。
Range("A1:E10").Item(4,3) '表示儲存格C4
也可以寫成:
Range("A1:E10").(4,3) '表示儲存格C4
Range("A1:B10").(4) '表示儲存格B2
13 用Resize屬性擴展儲存格區域使用此屬性, 可以重新調整指定儲存格區域的大小, 並返回一個Range物件。
語法格式如下:
運算式.Resize(RowSize,ColumnSize)
ActiveCells.Offset(3,4).Activate
-End-