單元格對象(Range)大概是VBA代碼中運用得最多的對象了,只要涉及到數據,最后總是離不開(kāi)單元格對象。
Range對象可以是單個(gè)單元格,一個(gè)矩形的單元格區域或者是多個(gè)矩形單元格區域的聯(lián)合。
Range對象是包含在Worksheet對象里。
如何引用單元格?
一、工作表上的所有單元格
不指定索引號的Cells屬性
Worksheets(1).cells
返回指定工作表上代表所有單元格的Range對象。
二、使用A1表示方法引用單元格和區域
使用Range屬性引用A1引用樣式中的單元格或單元格區域
示例:
Range('A1') ‘單元格 A1
Range('A1:B5') ‘從單元格 A1 到單元格 B5 的區域
Range('C5:D9,G9:H16') ‘多塊選定區域
Range('A:A') ‘A 列
Range('1:1') ‘第一行
Range('A:C') ‘從 A 列到 C 列的區域
Range('1:5') ‘從第一行到第五行的區域
Range('1:1,3:3,8:8') ‘第 1、3 和 8 行
Range('A:A,C:C,F:F') ‘A 、C 和 F 列
三、使用Range對象引用單元格
聲明一個(gè)Range類(lèi)型的對象變量,然后賦值引用,直接操作對象變量即可。
示例:
Dim rg As Range
Set rg = Worksheets('Sheet1').Range('A1:D8')
With rg
.Formula = '=RAND()'
.Font.Bold = True
.Font.Color = vbRed
End With
四、使用索引號引用單元格
通過(guò)指定行列索引號,可以用Cells屬性引用單個(gè)單元格。
Dim i As Byte, j As Byte, k As Byte
For i = 1 To 56
j = (i - 1) \ 8 + 1
k = i Mod 8
If k = 0 Then k = 8
Cells(k, j * 2 - 1).Interior.ColorIndex = i
Cells(k, j * 2).Value = i
Next
五、使用快捷表示法引用單元格
可用方括號將A1引用樣式或命名區域括起來(lái),作為Range屬性的快捷方式。
示例:
Worksheets('Sheet1').[A1:B5].ClearContents
[MyRange].Value= 30
六、引用相對于其他單元格的單元格
以相對于另一單元格的方法處理某一單元格的常用方法是使用Offset屬性。
某天在論壇答題時(shí)發(fā)現有童鞋在Change事件這樣引用單元格:
a = Target.Row
b =Target.Column
Cells(a, b + 6)= (Cells(a, b) - Cells(a, b - 1)) / (Cells(a, b - 1) * 1.187)
其實(shí)這里直接用Offset就省很多事了,又簡(jiǎn)潔。
示例:
ActiveCell.Offset(1,3).Font.Underline = xlDouble
七、引用多個(gè)區域
使用Range屬性和Union方法可以引用任意區域組合;
使用Areas屬性可引用工作表上一組選定的區域。
通過(guò)在兩個(gè)或多個(gè)引用之間插入逗號,可使用Range屬性引用多個(gè)區域。
示例:
Worksheets('Sheet1').Range('C5:D9,G9:H16,B14:D18').ClearContents
Range('MyRange,YourRange, HisRange').ClearContents’命名法
使用Union方法可以將多個(gè)區域組合到一個(gè)Range對象當中。
示例:
Dim r1 As Range, r2 As Range,myMultipleRange As Range
Set r1 =Sheets('Sheet1').Range('A1:B2')
Set r2 =Sheets('Sheet1').Range('C3:D4')
Set myMultipleRange = Union(r1, r2)
myMultipleRange.Font.Bold = True
使用 Areas 屬性引用選定的單元格區域或多塊選定區域中的區域集合。
示例:
If Selection.Areas.Count > 1 Then
MsgBox '選擇了多個(gè)單元格區域'
End If
八、引用命名區域
用名稱(chēng)比用 A1 樣式記號更容易標識單元格區域。
若要命名選定的單元格區域,請單擊編輯欄左端的名稱(chēng)框,鍵入名稱(chēng),再按 Enter。
示例:
Range('MyBook.xls!MyRange').Font.Italic= True
引用“MyBook.xls”工作簿中名為“MyRange”的區域。
Range('[Report.xls]Sheet1!Sales').BorderAroundWeight:=xlthin
引用“Report.xls”工作簿中特定于工作表的區域“Sheet1!Sales”。
九、引用行和列
可用 Rows 屬性或 Columns 屬性來(lái)處理整行或整列。
這兩個(gè)屬性返回代表單元格區域的 Range 對象。
示例:
Rows(1) ‘第一行
Rows ‘工作表上所有的行
Columns(1) ‘第一列
Columns('A') ‘第一列
Columns ‘工作表上所有的列
需要注意的是,不同工作表的單元格和區域是無(wú)法用Range屬性或unon方法組合在一塊。
另外,很多新手在引用單元格(特別是跨簿跨表)時(shí)容易漏掉限定對象(工作簿,工作表)。
點(diǎn)左下角閱讀原文,可以查看所有煙花VBA系列
聯(lián)系客服