ExcelVBA教程:如何引用單元格和區(qū)域
使用 Visual Basic的普通任務(wù)是指定單元格或單元格區(qū)域,然后對(duì)該單元格或單元格區(qū)域進(jìn)行一些操作,如輸入公式或更改格式。通常用一條語句就能完成操作,該語句可標(biāo)識(shí)單元格,還可更改某個(gè)屬性或應(yīng)用某個(gè)方法。
在 Visual Basic 中,Range對(duì)象既可表示單個(gè)單元格,也可表示單元格區(qū)域。下列主題說明了標(biāo)識(shí)和處理Range對(duì)象最常用的方法。
請(qǐng)選擇:
用 A1樣式記號(hào)引用單元格和單元格區(qū)域
用編號(hào)引用單元格
引用行和列
用快捷記號(hào)引用單元格
引用命名單元格區(qū)域
相對(duì)于其他單元格來引用單元格
用Range對(duì)象引用單元格
引用工作表上的所有單元格
引用多個(gè)單元格區(qū)域
ExcelVBA教程:用 A1樣式記號(hào)引用單元格和單元格區(qū)域
可使用 Range屬性來引用 A1 引用樣式中的單元格或單元格區(qū)域。下述子程序?qū)卧駞^(qū)域 A1:D5的字體設(shè)置為加粗。
Sub FormatRange()
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5")_
.Font.Bold = True
End Sub
下表演示了使用 Range屬性的一些 A1 樣式引用。
引用 | 含義 |
Range("A1") | 單元格A1 |
Range("A1:B5") | 從單元格 A1 到單元格 B5 的區(qū)域 |
Range("C5:D9,G9:H16") | 多塊選定區(qū)域 |
Range("A:A") | A列 |
Range("1:1") | 第一行 |
Range("A:C") | 從 A列到 C 列的區(qū)域 |
Range("1:5") | 從第一行到第五行的區(qū)域 |
Range("1:1,3:3,8:8") | 第1、3 和 8 行 |
Range("A:A,C:C,F:F") | A、C 和 F 列 |
Excel VBA教程:用編號(hào)引用單元格
通過使用行列編號(hào),可用Cells屬性來引用單個(gè)單元格。該屬性返回代表單個(gè)單元格的Range對(duì)象。下例中,Cells(6,1) 返回 Sheet1 上的單元格 A6,然后將 Value屬性設(shè)置為10。
SubEnterValue()
Worksheets("Sheet1").Cells(6, 1).Value = 10
EndSub
因?yàn)榭捎米兞刻娲幪?hào),所以Cells屬性非常適合于在單元格區(qū)域中循環(huán),如下例所示。

SubCycleThrough()
Dim Counter As Integer
For Counter = 1 To 20
Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
Next Counter
EndSub
注意如果要同時(shí)更改某一單元格區(qū)域中所有單元格的屬性或?qū)ζ鋺?yīng)用方法,可使用Range屬性。有關(guān)詳細(xì)信息,請(qǐng)參閱用 A1 樣式記號(hào)引用單元格。
Excel VBA教程:引用行和列
可用Rows屬性或Columns屬性來處理整行或整列。這兩個(gè)屬性返回代表單元格區(qū)域的Range對(duì)象。下例中,用Rows(1) 返回 Sheet1 上的第一行,然后將單元格區(qū)域的 Font對(duì)象的 Bold屬性設(shè)置為True。
SubRowBold()
Worksheets("Sheet1").Rows(1).Font.Bold = True
EndSub
下表舉例說明了使用 Rows 和Columns屬性的一些行和列的引用。
引用 | 含義 |
Rows(1) | 第一行 |
Rows | 工作表上所有的行 |
Columns(1) | 第一列 |
Columns("A") | 第一列 |
Columns | 工作表上所有的列 |
若要同時(shí)處理若干行或列,請(qǐng)創(chuàng)建一個(gè)對(duì)象變量并使用 Union方法,將對(duì) Rows屬性或Columns屬性的多個(gè)調(diào)用組合起來。下例將活動(dòng)工作簿中第一張工作表上的第一行、第三行和第五行的字體設(shè)置為加粗。
SubSeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
EndSub
Excel VBA教程:用快捷記號(hào)引用單元格
可用方括號(hào)將 A1引用樣式或命名區(qū)域括起來,作為Range屬性的快捷方式。這樣就不必鍵入單詞“Range”或使用引號(hào),如下例所示。
SubClearRange()
Worksheets("Sheet1").[A1:B5].ClearContents
EndSub
SubSetValue()
[MyRange].Value = 30
EndSub
ExcelVBA教程:引用命名區(qū)域
用名稱比用 A1樣式記號(hào)更容易標(biāo)識(shí)單元格區(qū)域。若要命名選定的單元格區(qū)域,請(qǐng)單擊編輯欄左端的名稱框,鍵入名稱,再按 Enter。
引用命名區(qū)域
下例引用了名為“MyBook.xls”的工作簿中的名為“MyRange”的單元格區(qū)域。
Sub FormatRange() Range("MyBook.xls!MyRange").Font.Italic = TrueEnd Sub下例引用名為“Report.xls”的工作簿中的特定工作表單元格區(qū)域“Sheet1!Sales”。
Sub FormatSales() Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthinEnd Sub若要選定命名區(qū)域,請(qǐng)用GoTo方法,該方法將激活工作簿和工作表,然后選定該區(qū)域。
Sub ClearRange() Application.Goto Reference:="MyBook.xls!MyRange" Selection.ClearContentsEnd Sub下例顯示對(duì)于活動(dòng)工作簿將如何編寫相同的過程。
Sub ClearRange() Application.Goto Reference:="MyRange" Selection.ClearContentsEnd Sub在命名區(qū)域中的單元格上循環(huán)
下例用 ForEach...Next 循環(huán)語句在命名區(qū)域中的每一個(gè)單元格上循環(huán)。如果該區(qū)域中的任一單元格的值超過limit的值,就將該單元格的顏色更改為黃色。
Sub ApplyColor() Const Limit As Integer = 25 For Each c In Range("MyRange") If c.Value > Limit Then c.Interior.ColorIndex = 27 End If Next cEnd SubExcel VBA教程:相對(duì)于其他單元格來引用單元格
處理相對(duì)于另一個(gè)單元格的某一單元格的常用方法是使用Offset屬性。下例中,將位于活動(dòng)工作表上活動(dòng)單元格下一行和右邊三列的單元格的內(nèi)容設(shè)置為雙下劃線格式。
SubUnderline()
ActiveCell.Offset(1, 3).Font.Underline = xlDouble
EndSub
注意 可錄制使用Offset屬性(而不是絕對(duì)引用)的宏。在“工具”菜單上,指向“宏”,再單擊“錄制新宏”,然后單擊“確定”,再單擊錄制宏工具欄上的“相對(duì)引用”按鈕。
若要在單元格區(qū)域中循環(huán),請(qǐng)?jiān)谘h(huán)中將變量與 Cells屬性一起使用。下例以 5 為步長(zhǎng),用 5 到 100之間的值填充第三列的前 20 個(gè)單元格。變量counter 用作 Cells屬性的行號(hào)。
SubCycleThrough()
Dim counter As Integer
For counter = 1 To 20
Worksheets("Sheet1").Cells(counter, 3).Value = counter *5
Next counter
EndSub
Excel VBA教程:用Range對(duì)象引用單元格
如果將對(duì)象變量設(shè)置為Range對(duì)象,即可用變量名方便地操作單元格區(qū)域。
下述過程創(chuàng)建了對(duì)象變量myRange,然后將活動(dòng)工作簿中 Sheet1 上的單元格區(qū)域 A1:D5賦予該變量。隨后的語句用該變量代替該區(qū)域?qū)ο?,以修改該區(qū)域的屬性。
SubRandom()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
EndSub
Excel VBA教程:引用工作表上的所有單元格
如果對(duì)工作表應(yīng)用Cells屬性時(shí)不指定編號(hào),該屬性將返回代表工作表上所有單元格的 Range對(duì)象。下述 Sub 過程清除活動(dòng)工作簿中 Sheet1上的所有單元格的內(nèi)容。
SubClearSheet()
Worksheets("Sheet1").Cells.ClearContents
EndSub
ExcelVBA教程:引用多個(gè)單元格區(qū)域
使用適當(dāng)?shù)姆椒梢院苋菀椎赝瑫r(shí)引用多個(gè)單元格區(qū)域??捎?Range 和 Union方法引用任意組合的單元格區(qū)域;用Areas屬性可引用工作表上選定的一組單元格區(qū)域。
使用Range屬性
通過在兩個(gè)或多個(gè)引用之間放置逗號(hào),可使用 Range屬性來引用多個(gè)單元格區(qū)域。下例清除了 Sheet1上三個(gè)單元格區(qū)域的內(nèi)容。
Sub ClearRanges() Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _ ClearContentsEnd Sub命名區(qū)域使得用Range屬性處理多個(gè)單元格區(qū)域更為容易。下例可在三個(gè)命名區(qū)域處于同一工作表時(shí)運(yùn)行。
Sub ClearNamed() Range("MyRange, YourRange, HisRange").ClearContentsEnd Sub使用Union方法
用Union方法可將多個(gè)單元格區(qū)域組合到一個(gè) Range對(duì)象中。下例創(chuàng)建了名為myMultipleRange的 Range對(duì)象,并將其定義為單元格區(qū)域 A1:B2 和 C3:D4的組合,然后將該組合區(qū)域的字體設(shè)置為加粗。
Sub MultipleRange() Dim r1, r2, 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 = TrueEnd Sub使用Areas屬性
可用Areas屬性引用選定的單元格區(qū)域或多塊選定區(qū)域中的區(qū)域集合。下述過程計(jì)算選定區(qū)域中的塊數(shù)目,如果有多個(gè)塊,就顯示一則警告消息。
Sub FindMultiple() If Selection.Areas.Count > 1 Then MsgBox "Cannot do this to a multiple selection." End IfEnd Sub
愛華網(wǎng)



