[示例02] 引用單元格
Sub Random()
Dim myRange As Range
'設(shè)置對(duì)單元格區(qū)域的引用
Set myRange = Worksheets("Sheet1").Range("A1:D5")
'對(duì)Range對(duì)象進(jìn)行操作
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
示例說明:可以設(shè)置Range對(duì)象變量來引用單元格區(qū)域,然后對(duì)該變量所代表的單元格區(qū)域進(jìn)行操作。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例03] 清除單元格
[示例03-01]清除單元格中的內(nèi)容(ClearContents方法)
Sub testClearContents()
MsgBox "清除指定單元格區(qū)域中的內(nèi)容"
Worksheets(1).Range("A1:H8").ClearContents
End Sub
[示例03-02]清除單元格中的格式(ClearFormats方法)
Sub testClearFormats()
MsgBox "清除指定單元格區(qū)域中的格式"
Worksheets(1).Range("A1:H8").ClearFormats
End Sub
[示例03-03]清除單元格中的批注(ClearComments方法)
Sub testClearComments()
MsgBox "清除指定單元格區(qū)域中的批注"
Worksheets(1).Range("A1:H8").ClearComments
End Sub
[示例03-04]清除單元格中的全部,包括內(nèi)容、格式和批注(Clear方法)
Sub testClear()
MsgBox "徹底清除指定單元格區(qū)域"
Worksheets(1).Range("A1:H8").Clear
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例04] Range和Cells
Sub test()
'設(shè)置單元格區(qū)域A1:J10的邊框線條樣式
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
End Sub
示例說明:可用 Range(cell1, cell2) 返回一個(gè) Range 對(duì)象,其中cell1和cell2為指定起始和終止位置的Range對(duì)象。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例05] 選取單元格區(qū)域(Select方法)
Sub testSelect()
'選取單元格區(qū)域A1:D5
Worksheets("Sheet1").Range("A1:D5").Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例06] 基于所選區(qū)域偏離至另一區(qū)域(Offset屬性)
[示例06-01]
Sub testOffset()
Worksheets("Sheet1").Activate
Selection.Offset(3, 1).Select
End Sub
示例說明:可用Offset(row, column)(其中row和column為行偏移量和列偏移量)返回相對(duì)于另一區(qū)域在指定偏移量處的區(qū)域。如上例選定位于當(dāng)前選定區(qū)域左上角單元格的向下三行且向右一列處單元格區(qū)域。
[示例06-02] 選取距當(dāng)前單元格指定行數(shù)和列數(shù)的單元格
Sub ActiveCellOffice()
MsgBox "顯示距當(dāng)前單元格第3列、第2行的單元格中的值"
MsgBox ActiveCell.Offset(3, 2).Value
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例07] 調(diào)整區(qū)域的大小(Resize屬性)
Sub ResizeRange()
Dim numRows As Integer, numcolumns As Integer
Worksheets("Sheet1").Activate
numRows = Selection.Rows.Count
numcolumns = Selection.Columns.Count
Selection.Resize(numRows + 1, numcolumns + 1).Select
End Sub
示例說明:本示例調(diào)整所選區(qū)域的大小,使之增加一行一列。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例08] 選取多個(gè)區(qū)域(Union方法)
Sub testUnion()
Dim rng1 As Range, rng2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set rng1 = Range("A1:B2")
Set rng2 = Range("C3:D4")
Set myMultiAreaRange = Union(rng1, rng2)
myMultiAreaRange.Select
End Sub
示例說明:可用 Union(range1, range2, ...) 返回多塊區(qū)域,即該區(qū)域由兩個(gè)或多個(gè)連續(xù)的單元格區(qū)域所組成。如上例創(chuàng)建由單元格區(qū)域A1:B2和C3:D4組合定義的對(duì)象,然后選定該定義區(qū)域。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例09] 激活已選區(qū)域中的單元格
Sub ActivateRange()
MsgBox "選取單元格區(qū)域B2:D6并將C4選中"
ActiveSheet.Range("B3:D6").Select
Range("C5").Activate
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例10] 選取指定條件的單元格(SpecialCells方法)
Sub SelectSpecialCells()
MsgBox "選擇當(dāng)前工作表中所有公式單元格"
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例11] 選取矩形區(qū)域(CurrentRegion屬性)
'選取包含當(dāng)前單元格的矩形區(qū)域
'該區(qū)域周邊為空白行和空白列
Sub SelectCurrentRegion()
MsgBox "選取包含當(dāng)前單元格的矩形區(qū)域"
ActiveCell.CurrentRegion.Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例12] 選取當(dāng)前工作表中已用單元格(UsedRange屬性)
'選取當(dāng)前工作表中已使用的單元格區(qū)域
Sub SelectUsedRange()
MsgBox "選取當(dāng)前工作表中已使用的單元格區(qū)域" _
& vbCrLf & "并顯示其地址"
ActiveSheet.UsedRange.Select
MsgBox ActiveSheet.UsedRange.Address
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例13] 選取最邊緣單元格(End屬性)
'選取最下方的單元格
Sub SelectEndCell()
MsgBox "選取當(dāng)前單元格區(qū)域內(nèi)最下方的單元格"
ActiveCell.End(xlDown).Select
End Sub
示例說明:可以改變參數(shù)xlDown以選取最左邊、最右邊、最上方的單元格。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例14]設(shè)置當(dāng)前單元格的前一個(gè)單元格和后一個(gè)單元格的值
Sub SetCellValue()
MsgBox "將當(dāng)前單元格中前面的單元格值設(shè)為""我前面的單元格""" & vbCrLf _
& "后面的單元格值設(shè)為""我后面的單元格"""
ActiveCell.Previous.Value = "我前面的單元格"
ActiveCell.Next.Value = "我后面的單元格"
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例15]確認(rèn)所選單元格區(qū)域中是否有公式(HasFormula屬性)
Sub IfHasFormula()
If Selection.HasFormula = True Then
MsgBox "所選單元格中都有公式"
Else
MsgBox "所選單元格中,部分單元格沒有公式"
End If
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例16] 公式單元格操作
[示例16-01]獲取與運(yùn)算結(jié)果單元格有直接關(guān)系的單元格
Sub CalRelationCell()
MsgBox "選取與當(dāng)前單元格的計(jì)算結(jié)果相關(guān)的單元格"
ActiveCell.DirectPrecedents.Select
End Sub
[示例16-02]追蹤公式單元格
Sub Cal1()
MsgBox "選取計(jì)算結(jié)果單元格相關(guān)的所有單元格"
ActiveCell.Precedents.Select
End Sub
Sub TrackCell()
MsgBox "追蹤運(yùn)算結(jié)果單元格"
ActiveCell.ShowPrecedents
End Sub
Sub DelTrack()
MsgBox "刪除追蹤線"
ActiveCell.ShowPrecedents Remove:=True
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例17] 復(fù)制單元格(Copy方法)
Sub CopyRange()
MsgBox "在單元格B7中寫入公式后,將B7的內(nèi)容復(fù)制到C7:D7內(nèi)"
Range("B7").Formula = "=Sum(B3:B6)"
Range("B7").Copy Destination:=Range("C7:D7")
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例18]獲取單元格行列值(Row屬性和Column屬性)
Sub RangePosition()
MsgBox "顯示所選單元格區(qū)域的行列值"
MsgBox "第 " & Selection.Row & "行 " & Selection.Column & "列"
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例19]獲取單元格區(qū)域的單元格數(shù)及行列數(shù)(Rows屬性、Columns屬性和Count屬性)
Sub GetRowColumnNum()
MsgBox "顯示所選取單元格區(qū)域的單元格數(shù)、行數(shù)和列數(shù)"
MsgBox "單元格區(qū)域中的單元格數(shù)為:" & Selection.Count
MsgBox "單元格區(qū)域中的行數(shù)為:" & Selection.Rows.Count
MsgBox "單元格區(qū)域中的列數(shù)為:" & Selection.Columns.Count
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例20]設(shè)置單元格中的文本格式
[示例20-01] 對(duì)齊文本
Sub HorizontalAlign()
MsgBox "將所選單元格區(qū)域中的文本左右對(duì)齊方式設(shè)為居中"
Selection.HorizontalAlignment = xlHAlignCenter
End Sub
Sub VerticalAlign()
MsgBox "將所選單元格區(qū)域中的文本上下對(duì)齊方式設(shè)為居中"
Selection.RowHeight = 36
Selection.VerticalAlignment = xlVAlignCenter
End Sub
[示例20-02] 縮排文本(InsertIndent方法)
Sub Indent()
MsgBox "將所選單元格區(qū)域中的文本縮排值加1"
Selection.InsertIndent 1
MsgBox "將縮排值恢復(fù)"
Selection.InsertIndent -1
End Sub
[示例20-03] 設(shè)置文本方向(Orientation屬性)
Sub ChangeOrientation()
MsgBox "將所選單元格中的文本順時(shí)針旋轉(zhuǎn)45度"
Selection.Orientation = 45
MsgBox "將文本由橫向改為縱向"
Selection.Orientation = xlVertical
MsgBox "將文本方向恢復(fù)原值"
Selection.Orientation = xlHorizontal
End Sub
[示例20-04]自動(dòng)換行(WrapText屬性)
Sub ChangeRow()
Dim i
MsgBox "將所選單元格設(shè)置為自動(dòng)換行"
i = Selection.WrapText
Selection.WrapText = True
MsgBox "恢復(fù)原狀"
Selection.WrapText = i
End Sub
[示例20-05]將比單元格列寬長(zhǎng)的文本縮小到能容納列寬大小(ShrinkToFit屬性)
Sub AutoFit()
Dim i
MsgBox "將長(zhǎng)于列寬的文本縮到與列寬相同"
i = Selection.ShrinkToFit
Selection.ShrinkToFit = True
MsgBox "恢復(fù)原狀"
Selection.ShrinkToFit = i
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例21]設(shè)置條件格式(FormatConditions屬性)
Sub FormatConditions()
MsgBox "在所選單元格區(qū)域中將單元格值小于10的單元格中的文本變?yōu)榧t色"
Selection.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlLessEqual, Formula1:="10"
Selection.FormatConditions(1).Font.ColorIndex = 3
MsgBox "恢復(fù)原狀"
Selection.FormatConditions(1).Font.ColorIndex = xlAutomatic
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例22]插入批注(AddComment方法)
Sub EnterComment()
MsgBox "在當(dāng)前單元格中輸入批注"
ActiveCell.AddComment ("Hello")
ActiveCell.Comment.Visible = True
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例23]隱藏/顯示單元格批注
Sub CellComment()
MsgBox "切換當(dāng)前單元格批注的顯示和隱藏狀態(tài)"
ActiveCell.Comment.Visible = Not (ActiveCell.Comment.Visible)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例24]改變所選單元格的顏色
Sub ChangeColor()
Dim iro As Integer
MsgBox "將所選單元格的顏色改為紅色"
iro = Selection.Interior.ColorIndex
Selection.Interior.ColorIndex = 3
MsgBox "將所選單元格的顏色改為藍(lán)色"
Selection.Interior.Color = RGB(0, 0, 255)
MsgBox "恢復(fù)原狀"
Selection.Interior.ColorIndex = iro
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例25]改變單元格的圖案
Sub ChangePattern()
Dim p, pc, i
MsgBox "依Pattern常數(shù)值的順序改變所選單元格的圖案"
p = Selection.Interior.Pattern
pc = Selection.Interior.PatternColorIndex
For i = 9 To 16
With Selection.Interior
.Pattern = i
.PatternColor = RGB(255, 0, 0)
End With
MsgBox "常數(shù)值 " & i
Next i
MsgBox "恢復(fù)原狀"
Selection.Interior.Pattern = p
Selection.Interior.PatternColorIndex = pc
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例26]合并單元格
Sub MergeCells()
MsgBox "合并單元格A2:C2,并將文本設(shè)為居中對(duì)齊"
Range("A2:C2").Select
With Selection
.MergeCells = True
.HorizontalAlignment = xlCenter
End With
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例27]限制單元格移動(dòng)的范圍
Sub ScrollArea1()
MsgBox "將單元格的移動(dòng)范圍限制在單元格區(qū)域B2:D6中"
ActiveSheet.ScrollArea = "B2:D6"
End Sub
Sub ScrollArea2()
MsgBox "解除移動(dòng)范圍限制"
ActiveSheet.ScrollArea = ""
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例28]獲取單元格的位置(Address屬性)
Sub GetAddress()
MsgBox "顯示所選單元格區(qū)域的地址"
MsgBox "絕對(duì)地址:" & Selection.Address
MsgBox "行的絕對(duì)地址:" & Selection.Address(RowAbsolute:=False)
MsgBox "列的絕對(duì)地址:" & Selection.Address(ColumnAbsolute:=False)
MsgBox "以R1C1形式顯示:" & Selection.Address(ReferenceStyle:=xlR1C1)
MsgBox "相對(duì)地址:" & Selection.Address(False, False)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[示例29]刪除單元格區(qū)域(Delete方法)
Sub DeleteRange()
MsgBox "刪除單元格區(qū)域C2:D6后,右側(cè)的單元格向左移動(dòng)"
ActiveSheet.Range("C2:D6").Delete (xlShiftToLeft)
End Sub
小結(jié)
下面對(duì)Range對(duì)象的一些常用屬性和方法進(jìn)行簡(jiǎn)單的小結(jié)。
1、Activate與Select
試驗(yàn)下面的過程:
Sub SelectAndActivate()
Range("B3:E10").Select
Range("C5").Activate
End Sub
其結(jié)果如下圖所示:
圖05-01:Select與Activate
Selection指單元格區(qū)域B3:E10,而ActiveCell則是單元格C5;ActiveCell代表單個(gè)的單元格,而Selection則可以代表單個(gè)單元格,也可以代表單元格區(qū)域。
2、Range屬性
可以使用Application對(duì)象的Range屬性引用Range對(duì)象,如
Application.Range(“B2”) ‘代表當(dāng)前工作表中的單元格B2
若引用當(dāng)前工作表中的單元格,也可以忽略前面的Application對(duì)象。
Range(“A1:D10”) ‘代表當(dāng)前工作表中的單元格區(qū)域A1:D10
Range(“A1:A10,C1:C10,E1:E10”) ‘代表當(dāng)前工作表中非連續(xù)的三個(gè)區(qū)域組成的單元格區(qū)域
Range屬性也接受指向單元格區(qū)域?qū)堑膬蓚€(gè)參數(shù),如:
Range(“A1”,”D10”) ‘代表單元格區(qū)域A1:D10
當(dāng)然,Range屬性也接受單元格區(qū)域名稱,如:
Range(“Data”) ‘代表名為Data的數(shù)據(jù)區(qū)域
Range屬性的參數(shù)可以是對(duì)象也可以是字符串,如:
Range(“A1”,Range(“LastCell”))
3、單元格引用的快捷方式
可以在引用區(qū)域兩側(cè)加上方括號(hào)來快速引用單元格區(qū)域,如:
[B2]
[A1:D10]
[A1:A10,C1:C10,E1:E10]
[Data]
但其引用的是絕對(duì)區(qū)域。
4、Cells屬性
可以使用Cells屬性來引用Range對(duì)象。如:
ActiveSheet.Cells
Application.Cells ‘引用當(dāng)前工作表中的所有單元格
Cell(2,2)
Cell(2,”B”) ‘引用單元格B2
Range(Cells(1,1),Cells(10,5)) ‘引用單元格區(qū)域A1:E10
若想在一個(gè)單元格區(qū)域中循環(huán)時(shí),使用Cells屬性是很方便的。
也可以使用Cells屬性進(jìn)行相對(duì)引用,如:
Range(“D10:G20”).Cells(2,3) ‘表示引用單元格區(qū)域D10:G20中第2行第3列的單元格,即單元格F11
也可使用語句:Range(“D10”).Cells(2,3)達(dá)到同樣的引用效果。
5、Offset屬性
Offset屬性基于當(dāng)前單元格按所給參數(shù)進(jìn)行偏移,與Cells屬性不同的是,它基于0即基準(zhǔn)單元格為0,如:
Range(“A10”).Cells(1,1)和Range(“A10”).Offset(0,0)都表示單元格A10
當(dāng)想引用于基準(zhǔn)單元格區(qū)域同樣大小的單元格區(qū)域時(shí),則Offset屬性是有用的。
6、Resize屬性
可使用Resize屬性獲取相對(duì)于原單元格區(qū)域左上角單元格指定大小的區(qū)域。
7、SpecialCells方法
SpecialCells方法對(duì)應(yīng)于“定位條件”對(duì)話框,如圖05-02所示:
圖05-02:“定位條件”對(duì)話框
8、CurrentRegion屬性
使用CurrentRegion屬性可以選取當(dāng)前單元格所在區(qū)域,即周圍是空行和空列所圍成的矩形區(qū)域,等價(jià)于“Ctrl+Shift+*”快捷鍵。
9、End屬性
End屬性所代表的操作等價(jià)于“Ctrl+方向箭”的操作,使用常量xlUp、xlDown、xlToLeft和xlToRight分別代表上、下、左、右箭。
10、Columns屬性和Rows屬性
Columns屬性和Rows屬性分別返回單元格區(qū)域中的所有列和所有行。
11、Areas集合
在多個(gè)非連續(xù)的單元格區(qū)域中使用Columns屬性和Rows屬性時(shí),只是返回第一個(gè)區(qū)域的行或列,如:
Range(“A1:B5,C6:D10,E11:F15”).Rows.Count
將返回5。
此時(shí)應(yīng)使用Areas集合來返回區(qū)域中每個(gè)塊的地址,如:
For Each Rng In Range(“A1:B5,C6:D10,E11:F15”).Areas
MsgBox Rng.Address
Next Rng
12、Union方法和Intersect方法
當(dāng)想從兩個(gè)或多個(gè)單元格區(qū)域中生成一個(gè)單元格區(qū)域時(shí),使用Union方法;當(dāng)找到兩個(gè)或多個(gè)單元格區(qū)域共同擁有的單元格區(qū)域時(shí),使用Intersect方法。