Range對象基本操作應用樣本(1)

來源:互聯網
上載者:User

Range對象可能是VBA代碼中最常用的對象,Range對象可以是某一儲存格、某一儲存格範圍、某一行、某一列、或者是多個連續或非連續的地區組成的地區。下面介紹Range對象的一些屬性和方法。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-01] 賦值給某儲存格
[樣本05-01-01]
Sub test1()
Worksheets("Sheet1").Range("A5").Value = 22
MsgBox "工作表Sheet1內儲存格A5中的值為" _
& Worksheets("Sheet1").Range("A5").Value
End Sub
[樣本05-01-02]
Sub test2()
Worksheets("Sheet1").Range("A1").Value = _
Worksheets("Sheet1").Range("A5").Value
MsgBox "現在A1儲存格中的值也為" & _
Worksheets("Sheet1").Range("A5").Value
End Sub
[樣本05-01-03]
Sub test3()
MsgBox "用公式填充儲存格,本例為隨機數公式"
Range("A1:H8").Formula = "=Rand()"
End Sub
[樣本05-01-04]
Sub test4()
Worksheets(1).Cells(1, 1).Value = 24
MsgBox "現在儲存格A1的值為24"
End Sub
[樣本05-01-05]
Sub test5()
MsgBox "給儲存格設定公式,求B2至B5儲存格範圍之和"
ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
End Sub
[樣本05-01-06]
Sub test6()
MsgBox "設定儲存格C5中的公式."
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-02] 前導參照
Sub Random()
Dim myRange As Range
'設定對儲存格範圍的引用
Set myRange = Worksheets("Sheet1").Range("A1:D5")
'對Range對象進行操作
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
樣本說明:可以設定Range物件變數來前導參照地區,然後對該變數所代表的儲存格範圍進行操作。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-03] 清除儲存格
[樣本05-03-01]清除儲存格中的內容(ClearContents方法)
Sub testClearContents()
MsgBox "清除指定儲存格範圍中的內容"
Worksheets(1).Range("A1:H8").ClearContents
End Sub
[樣本05-03-02]清除儲存格中的格式(ClearFormats方法)
Sub testClearFormats()
MsgBox "清除指定儲存格範圍中的格式"
Worksheets(1).Range("A1:H8").ClearFormats
End Sub
[樣本05-03-03]清除儲存格中的批註(ClearComments方法)
Sub testClearComments()
MsgBox "清除指定儲存格範圍中的批註"
Worksheets(1).Range("A1:H8").ClearComments
End Sub
[樣本05-03-04]清除儲存格中的全部,包括內容、格式和批註(Clear方法)
Sub testClear()
MsgBox "徹底清除指定儲存格範圍"
Worksheets(1).Range("A1:H8").Clear
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-04] Range和Cells
Sub test()
'設定儲存格範圍A1:J10的邊框線條樣式
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
End Sub
樣本說明:可用 Range(cell1, cell2) 返回一個 Range 對象,其中cell1和cell2為指定起始和終止位置的Range對象。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-05] 選取儲存格範圍(Select方法)
Sub testSelect()
'選取儲存格範圍A1:D5
Worksheets("Sheet1").Range("A1:D5").Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-06] 基於所選地區偏離至另一地區(Offset屬性)
[樣本05-06-01]
Sub testOffset()
Worksheets("Sheet1").Activate
Selection.Offset(3, 1).Select
End Sub
樣本說明:可用Offset(row, column)(其中row和column為行位移量和列位移量)返回相對於另一地區在指定位移量處的地區。如上例選定位於當前選定地區左上方儲存格的向下三行且向右一列處儲存格範圍。
[樣本05-06-02] 選取距目前的儲存格指定行數和列數的儲存格
Sub ActiveCellOffice()
MsgBox "顯示距目前的儲存格第3列、第2行的儲存格中的值"
MsgBox ActiveCell.Offset(3, 2).Value
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-07] 調整地區的大小(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
樣本說明:本樣本調整所選地區的大小,使之增加一行一列。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-08] 選取多個地區(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, ...) 返回多塊地區,即該地區由兩個或多個連續的儲存格範圍所組成。如上例建立由儲存格範圍A1:B2和C3:D4組合定義的對象,然後選定該定義地區。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-09] 啟用已選地區中的儲存格
Sub ActivateRange()
MsgBox "選取儲存格範圍B2:D6並將C4選中"
ActiveSheet.Range("B3:D6").Select
Range("C5").Activate
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-10] 選取指定條件的儲存格(SpecialCells方法)
Sub SelectSpecialCells()
MsgBox "選擇當前工作表中所有公式儲存格"
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-11] 選取矩形地區(CurrentRegion屬性)
'選取包含目前的儲存格的矩形地區
'該地區周邊為空白行和空白列
Sub SelectCurrentRegion()
MsgBox "選取包含目前的儲存格的矩形地區"
ActiveCell.CurrentRegion.Select
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-12] 選取當前工作表中已用儲存格(UsedRange屬性)
'選取當前工作表中已使用的儲存格範圍
Sub SelectUsedRange()
MsgBox "選取當前工作表中已使用的儲存格範圍" _
& vbCrLf & "並顯示其地址"
ActiveSheet.UsedRange.Select
MsgBox ActiveSheet.UsedRange.Address
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-13] 選取最邊緣儲存格(End屬性)
'選取最下方的儲存格
Sub SelectEndCell()
MsgBox "選取目前的儲存格地區內最下方的儲存格"
ActiveCell.End(xlDown).Select
End Sub
樣本說明:可以改變參數xlDown以選取最左邊、最右邊、最上方的儲存格。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-14]設定目前的儲存格的前一個儲存格和後一個儲存格的值
Sub SetCellValue()
MsgBox "將目前的儲存格中前面的儲存格值設為""我前面的儲存格""" & vbCrLf _
& "後面的儲存格值設為""我後面的儲存格"""
ActiveCell.Previous.Value = "我前面的儲存格"
ActiveCell.Next.Value = "我後面的儲存格"
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-15]確認所選儲存格範圍中是否有公式(HasFormula屬性)
Sub IfHasFormula()
If Selection.HasFormula = True Then
MsgBox "所選儲存格中都有公式"
Else
MsgBox "所選儲存格中,部分儲存格沒有公式"
End If
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-16] 公式儲存格操作
[樣本05-16-01]擷取與運算結果儲存格有直接關係的儲存格
Sub CalRelationCell()
MsgBox "選取與目前的儲存格的計算結果相關的儲存格"
ActiveCell.DirectPrecedents.Select
End Sub
[樣本05-16-02]追蹤公式儲存格
Sub Cal1()
MsgBox "選取計算結果儲存格相關的所有儲存格"
ActiveCell.Precedents.Select
End Sub
Sub TrackCell()
MsgBox "追蹤運算結果儲存格"
ActiveCell.ShowPrecedents
End Sub
Sub DelTrack()
MsgBox "刪除追蹤線"
ActiveCell.ShowPrecedents Remove:=True
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-17] 複製儲存格(Copy方法)
Sub CopyRange()
MsgBox "在儲存格B7中寫入公式後,將B7的內容複製到C7:D7內"
Range("B7").Formula = "=Sum(B3:B6)"
Range("B7").Copy Destination:=Range("C7:D7")
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-18]擷取儲存格行列值(Row屬性和Column屬性)
Sub RangePosition()
MsgBox "顯示所選儲存格範圍的行列值"
MsgBox "第 " & Selection.Row & "行 " & Selection.Column & "列"
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-19]擷取儲存格範圍的儲存格數及行列數(Rows屬性、Columns屬性和Count屬性)
Sub GetRowColumnNum()
MsgBox "顯示所選取儲存格範圍的儲存格數、行數和列數"
MsgBox "儲存格範圍中的儲存格數為:" & Selection.Count
MsgBox "儲存格範圍中的行數為:" & Selection.Rows.Count
MsgBox "儲存格範圍中的列數為:" & Selection.Columns.Count
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-20]設定儲存格中的文字格式設定
[樣本05-20-01] 對齊文本
Sub HorizontalAlign()
MsgBox "將所選儲存格範圍中的文本左靠右對齊方式設為置中"
Selection.HorizontalAlignment = xlHAlignCenter
End Sub
Sub VerticalAlign()
MsgBox "將所選儲存格範圍中的文本上下對齊設為置中"
Selection.RowHeight = 36
Selection.VerticalAlignment = xlVAlignCenter
End Sub
[樣本05-20-02] 縮排文本(InsertIndent方法)
Sub Indent()
MsgBox "將所選儲存格範圍中的文本縮排值加1"
Selection.InsertIndent 1
MsgBox "將縮排值恢複"
Selection.InsertIndent -1
End Sub
[樣本05-20-03] 設定文本方向(Orientation屬性)
Sub ChangeOrientation()
MsgBox "將所選儲存格中的文本順時針旋轉45度"
Selection.Orientation = 45
MsgBox "將文本由橫向改為縱向"
Selection.Orientation = xlVertical
MsgBox "將文本方向恢複原值"
Selection.Orientation = xlHorizontal
End Sub
[樣本05-20-04]自動換行(WrapText屬性)
Sub ChangeRow()
Dim i
MsgBox "將所選儲存格設定為自動換行"
i = Selection.WrapText
Selection.WrapText = True
MsgBox "恢複原狀"
Selection.WrapText = i
End Sub
[樣本05-20-05]將比儲存格列寬長的文本縮小到能容納列寬大小(ShrinkToFit屬性)
Sub AutoFit()
Dim i
MsgBox "將長於列寬的文本縮到與列寬相同"
i = Selection.ShrinkToFit
Selection.ShrinkToFit = True
MsgBox "恢複原狀"
Selection.ShrinkToFit = i
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-21]設定條件式格式設定(FormatConditions屬性)
Sub FormatConditions()
MsgBox "在所選儲存格範圍中將儲存格值小於10的儲存格中的文本變為紅色"
Selection.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlLessEqual, Formula1:="10"
Selection.FormatConditions(1).Font.ColorIndex = 3
MsgBox "恢複原狀"
Selection.FormatConditions(1).Font.ColorIndex = xlAutomatic
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-22]插入批註(AddComment方法)
Sub EnterComment()
MsgBox "在目前的儲存格中輸入批註"
ActiveCell.AddComment ("Hello")
ActiveCell.Comment.Visible = True
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-23]隱藏/顯示儲存格批註
Sub CellComment()
MsgBox "切換目前的儲存格批註的顯示和隱藏狀態"
ActiveCell.Comment.Visible = Not (ActiveCell.Comment.Visible)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-24]改變所選儲存格的顏色
Sub ChangeColor()
Dim iro As Integer
MsgBox "將所選儲存格的顏色改為紅色"
iro = Selection.Interior.ColorIndex
Selection.Interior.ColorIndex = 3
MsgBox "將所選儲存格的顏色改為藍色"
Selection.Interior.Color = RGB(0, 0, 255)
MsgBox "恢複原狀"
Selection.Interior.ColorIndex = iro
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-25]改變儲存格的圖案
Sub ChangePattern()
Dim p, pc, i
MsgBox "依Pattern常數值的順序改變所選儲存格的圖案"
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 "常數值 " & i
Next i
MsgBox "恢複原狀"
Selection.Interior.Pattern = p
Selection.Interior.PatternColorIndex = pc
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-26]合併儲存格
Sub MergeCells()
MsgBox "合併儲存格A2:C2,並將文本設為置中對齊"
Range("A2:C2").Select
With Selection
.MergeCells = True
.HorizontalAlignment = xlCenter
End With
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-27]限制儲存格移動的範圍
Sub ScrollArea1()
MsgBox "將儲存格的移動範圍限制在儲存格範圍B2:D6中"
ActiveSheet.ScrollArea = "B2:D6"
End Sub
Sub ScrollArea2()
MsgBox "解除移動範圍限制"
ActiveSheet.ScrollArea = ""
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-28]擷取儲存格的位置(Address屬性)
Sub GetAddress()
MsgBox "顯示所選儲存格範圍的地址"
MsgBox "絕對位址:" & Selection.Address
MsgBox "行的絕對位址:" & Selection.Address(RowAbsolute:=False)
MsgBox "列的絕對位址:" & Selection.Address(ColumnAbsolute:=False)
MsgBox "以R1C1形式顯示:" & Selection.Address(ReferenceStyle:=xlR1C1)
MsgBox "相對位址:" & Selection.Address(False, False)
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[樣本05-29]刪除儲存格範圍(Delete方法)
Sub DeleteRange()
MsgBox "刪除儲存格範圍C2:D6後,右側的儲存格向左移動"
ActiveSheet.Range("C2:D6").Delete (xlShiftToLeft)
End Sub

 

小結
下面對Range對象的一些常用屬性和方法進行簡單的小結。
1、Activate與Select
實驗下面的過程:
Sub SelectAndActivate()
Range("B3:E10").Select
Range("C5").Activate
End Sub
其結果如所示:

圖05-01:Select與Activate
Selection指儲存格範圍B3:E10,而ActiveCell則是儲存格C5;ActiveCell代表單個的儲存格,而Selection則可以代表單個儲存格,也可以代表儲存格範圍。
2、Range屬性
可以使用Application對象的Range屬性引用Range對象,如
Application.Range(“B2”) ‘代表當前工作表中的儲存格B2
若引用當前工作表中的儲存格,也可以忽略前面的Application對象。
Range(“A1:D10”) ‘代表當前工作表中的儲存格範圍A1:D10
Range(“A1:A10,C1:C10,E1:E10”) ‘代表當前工作表中非連續的三個地區組成的儲存格範圍
Range屬性也接受指向儲存格範圍對角的兩個參數,如:
Range(“A1”,”D10”) ‘代表儲存格範圍A1:D10
當然,Range屬性也接受儲存格範圍名稱,如:
Range(“Data”) ‘代表名為Data的資料區域
Range屬性的參數可以是對象也可以是字串,如:
Range(“A1”,Range(“LastCell”))
3、儲存格參照的捷徑
可以在引用地區兩側加上方括弧來快速前導參照地區,如:
[B2]
[A1:D10]
[A1:A10,C1:C10,E1:E10]
[Data]
但其引用的是絕對地區。
4、Cells屬性
可以使用Cells屬性來引用Range對象。如:
ActiveSheet.Cells
Application.Cells ‘引用當前工作表中的所有儲存格
Cell(2,2)
Cell(2,”B”) ‘前導參照B2
Range(Cells(1,1),Cells(10,5)) ‘前導參照地區A1:E10
若想在一個儲存格範圍中迴圈時,使用Cells屬性是很方便的。
也可以使用Cells屬性進行相對參照,如:
Range(“D10:G20”).Cells(2,3) ‘表示前導參照地區D10:G20中第2行第3列的儲存格,即儲存格F11
也可使用語句:Range(“D10”).Cells(2,3)達到同樣的引用效果。
5、Offset屬性
Offset屬性基於目前的儲存格按所給參數進行位移,與Cells屬性不同的是,它基於0即基準儲存格為0,如:
Range(“A10”).Cells(1,1)和Range(“A10”).Offset(0,0)都表示儲存格A10
當想引用於基準儲存格範圍同樣大小的儲存格範圍時,則Offset屬性是有用的。
6、Resize屬性
可使用Resize屬性擷取相對於原儲存格範圍左上方儲存格指定大小的地區。
7、SpecialCells方法
SpecialCells方法對應於“定位條件”對話方塊,05-02所示:
 圖05-02:“定位條件”對話方塊
8、CurrentRegion屬性
使用CurrentRegion屬性可以選取目前的儲存格所在地區,即周圍是空行和空列所圍成的矩形地區,等價於“Ctrl+Shift+*”快速鍵。
9、End屬性
End屬性所代表的操作等價於“Ctrl+方向箭”的操作,使用常量xlUp、xlDown、xlToLeft和xlToRight分別代表上、下、左、右箭。
10、Columns屬性和Rows屬性
Columns屬性和Rows屬性分別返回儲存格範圍中的所有列和所有行。
11、Areas集合
在多個非連續的儲存格範圍中使用Columns屬性和Rows屬性時,只是返回第一個地區的行或列,如:
Range(“A1:B5,C6:D10,E11:F15”).Rows.Count
將返回5。
此時應使用Areas集合來返回地區中每個塊的地址,如:
For Each Rng In Range(“A1:B5,C6:D10,E11:F15”).Areas
MsgBox Rng.Address
Next Rng
12、Union方法和Intersect方法
當想從兩個或多個儲存格範圍中產生一個儲存格範圍時,使用Union方法;當找到兩個或多個儲存格範圍共同擁有的儲存格範圍時,使用Intersect方法。

 

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/cnjack/archive/2009/10/26/4729917.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.