定义⼀个range变量,赋值是⼀定是⼀个区域,要⽤set格式。定义⼀个C列的区域dim a1 as rangeset al=range(\"c:c\")
[⽰例01] 赋值给某单元格[⽰例01-01]Sub test1()
Worksheets(\"Sheet1\").Range(\"A5\").Value = 22MsgBox \"⼯作表Sheet1内单元格A5中的值为\" _& Worksheets(\"Sheet1\").Range(\"A5\").ValueEnd Sub[⽰例01-02]Sub test2()
Worksheets(\"Sheet1\").Range(\"A1\").Value = _Worksheets(\"Sheet1\").Range(\"A5\").ValueMsgBox \"现在A1单元格中的值也为\" & _Worksheets(\"Sheet1\").Range(\"A5\").ValueEnd Sub[⽰例01-03]Sub test3()
MsgBox \"⽤公式填充单元格,本例为随机数公式\"Range(\"A1:H8\").Formula = \"=Rand()\"End Sub[⽰例01-04]Sub test4()
Worksheets(1).Cells(1, 1).Value = 24MsgBox \"现在单元格A1的值为24\"End Sub[⽰例01-05]Sub test5()
MsgBox \"给单元格设置公式,求B2⾄B5单元格区域之和\"ActiveSheet.Cells(2, 1).Formula = \"=Sum(B1:B5)\"End Sub[⽰例01-06]Sub test6()
MsgBox \"设置单元格C5中的公式.\"
Worksheets(1).Range(\"C5:C10\").Cells(1, 1).Formula = \"=Rand()\"End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例02] 引⽤单元格Sub Random()
Dim myRange As Range'设置对单元格区域的引⽤
Set myRange = Worksheets(\"Sheet1\").Range(\"A1:D5\")'对Range对象进⾏操作
myRange.Formula = \"=RAND()\"myRange.Font.Bold = TrueEnd Sub
⽰例说明:可以设置Range对象变量来引⽤单元格区域,然后对该变量所代表的单元格区域进⾏操作。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例03] 清除单元格
[⽰例03-01]清除单元格中的内容(ClearContents⽅法)Sub testClearContents()
MsgBox \"清除指定单元格区域中的内容\"
Worksheets(1).Range(\"A1:H8\").ClearContentsEnd Sub
[⽰例03-02]清除单元格中的格式(ClearFormats⽅法)Sub testClearFormats()
MsgBox \"清除指定单元格区域中的格式\"
Worksheets(1).Range(\"A1:H8\").ClearFormatsEnd Sub
[⽰例03-03]清除单元格中的批注(ClearComments⽅法)
Sub testClearComments()
MsgBox \"清除指定单元格区域中的批注\"
Worksheets(1).Range(\"A1:H8\").ClearCommentsEnd Sub
[⽰例03-04]清除单元格中的全部,包括内容、格式和批注(Clear⽅法)Sub testClear()
MsgBox \"彻底清除指定单元格区域\"Worksheets(1).Range(\"A1:H8\").ClearEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例04] Range和CellsSub test()
'设置单元格区域A1:J10的边框线条样式With Worksheets(1).Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThickEnd WithEnd Sub
⽰例说明:可⽤ Range(cell1, cell2) 返回⼀个 Range 对象,其中cell1和cell2为指定起始和终⽌位置的Range对象。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例05] 选取单元格区域(Select⽅法)Sub testSelect()
'选取单元格区域A1:D5
Worksheets(\"Sheet1\").Range(\"A1:D5\").SelectEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例06] 基于所选区域偏离⾄另⼀区域(Offset属性)[⽰例06-01]Sub testOffset()
Worksheets(\"Sheet1\").ActivateSelection.Offset(3, 1).SelectEnd Sub
⽰例说明:可⽤Offset(row, column)(其中row和column为⾏偏移量和列偏移量)返回相对于另⼀区域在指定偏移量处的区域。如上例选定位于当前选定区域左上⾓单元格的向下三⾏且向右⼀列处单元格区域。[⽰例06-02] 选取距当前单元格指定⾏数和列数的单元格Sub ActiveCellOffice()
MsgBox \"显⽰距当前单元格第3列、第2⾏的单元格中的值\"MsgBox ActiveCell.Offset(3, 2).ValueEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例07] 调整区域的⼤⼩(Resize属性)Sub ResizeRange()
Dim numRows As Integer, numcolumns As IntegerWorksheets(\"Sheet1\").ActivatenumRows = Selection.Rows.Count
numcolumns = Selection.Columns.Count
Selection.Resize(numRows + 1, numcolumns + 1).SelectEnd Sub
⽰例说明:本⽰例调整所选区域的⼤⼩,使之增加⼀⾏⼀列。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例08] 选取多个区域(Union⽅法)Sub testUnion()
Dim rng1 As Range, rng2 As Range, myMultiAreaRange As RangeWorksheets(\"sheet1\").ActivateSet rng1 = Range(\"A1:B2\")Set rng2 = Range(\"C3:D4\")
Set myMultiAreaRange = Union(rng1, rng2)myMultiAreaRange.SelectEnd Sub
⽰例说明:可⽤ Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。如上例创建由单元格区域A1:B2和C3:D4组合定义的对象,然后选定该定义区域。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例09] 激活已选区域中的单元格Sub ActivateRange()
MsgBox \"选取单元格区域B2:D6并将C4选中\"ActiveSheet.Range(\"B3:D6\").SelectRange(\"C5\").ActivateEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例10] 选取指定条件的单元格(SpecialCells⽅法)Sub SelectSpecialCells()
MsgBox \"选择当前⼯作表中所有公式单元格\"
ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas).SelectEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例11] 选取矩形区域(CurrentRegion属性)'选取包含当前单元格的矩形区域'该区域周边为空⽩⾏和空⽩列Sub SelectCurrentRegion()
MsgBox \"选取包含当前单元格的矩形区域\"ActiveCell.CurrentRegion.SelectEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例12] 选取当前⼯作表中已⽤单元格(UsedRange属性)'选取当前⼯作表中已使⽤的单元格区域Sub SelectUsedRange()
MsgBox \"选取当前⼯作表中已使⽤的单元格区域\" _& vbCrLf & \"并显⽰其地址\"
ActiveSheet.UsedRange.Select
MsgBox ActiveSheet.UsedRange.AddressEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例13] 选取最边缘单元格(End属性)'选取最下⽅的单元格Sub SelectEndCell()
MsgBox \"选取当前单元格区域内最下⽅的单元格\"ActiveCell.End(xlDown).SelectEnd Sub
⽰例说明:可以改变参数xlDown以选取最左边、最右边、最上⽅的单元格。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例14]设置当前单元格的前⼀个单元格和后⼀个单元格的值Sub SetCellValue()
MsgBox \"将当前单元格中前⾯的单元格值设为\"\"我前⾯的单元格\"\"\" & vbCrLf _& \"后⾯的单元格值设为\"\"我后⾯的单元格\"\"\"ActiveCell.Previous.Value = \"我前⾯的单元格\"ActiveCell.Next.Value = \"我后⾯的单元格\"End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例15]确认所选单元格区域中是否有公式(HasFormula属性)Sub IfHasFormula()
If Selection.HasFormula = True ThenMsgBox \"所选单元格中都有公式\"Else
MsgBox \"所选单元格中,部分单元格没有公式\"End IfEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例16] 公式单元格操作
[⽰例16-01]获取与运算结果单元格有直接关系的单元格Sub CalRelationCell()
MsgBox \"选取与当前单元格的计算结果相关的单元格\"ActiveCell.DirectPrecedents.SelectEnd Sub
[⽰例16-02]追踪公式单元格Sub Cal1()
MsgBox \"选取计算结果单元格相关的所有单元格\"ActiveCell.Precedents.SelectEnd Sub
Sub TrackCell()
MsgBox \"追踪运算结果单元格\"ActiveCell.ShowPrecedentsEnd Sub
Sub DelTrack()
MsgBox \"删除追踪线\"
ActiveCell.ShowPrecedents Remove:=TrueEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例17] 复制单元格(Copy⽅法)Sub CopyRange()
MsgBox \"在单元格B7中写⼊公式后,将B7的內容复制到C7:D7內\"Range(\"B7\").Formula = \"=Sum(B3:B6)\"
Range(\"B7\").Copy Destination:=Range(\"C7:D7\")End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例18]获取单元格⾏列值(Row属性和Column属性)Sub RangePosition()
MsgBox \"显⽰所选单元格区域的⾏列值\"
MsgBox \"第 \" & Selection.Row & \"⾏ \" & Selection.Column & \"列\"End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例19]获取单元格区域的单元格数及⾏列数(Rows属性、Columns属性和Count属性)Sub GetRowColumnNum()
MsgBox \"显⽰所选取单元格区域的单元格数、⾏数和列数\"MsgBox \"单元格区域中的单元格数为:\" & Selection.CountMsgBox \"单元格区域中的⾏数为:\" & Selection.Rows.CountMsgBox \"单元格区域中的列数为:\" & Selection.Columns.CountEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例20]设置单元格中的⽂本格式[⽰例20-01] 对齐⽂本Sub HorizontalAlign()
MsgBox \"将所选单元格区域中的⽂本左右对齐⽅式设为居中\"Selection.HorizontalAlignment = xlHAlignCenterEnd Sub
Sub VerticalAlign()
MsgBox \"将所选单元格区域中的⽂本上下对齐⽅式设为居中\"Selection.RowHeight = 36
Selection.VerticalAlignment = xlVAlignCenterEnd Sub
[⽰例20-02] 缩排⽂本(InsertIndent⽅法)Sub Indent()
MsgBox \"将所选单元格区域中的⽂本缩排值加1\"Selection.InsertIndent 1MsgBox \"将缩排值恢复\"Selection.InsertIndent -1End Sub
[⽰例20-03] 设置⽂本⽅向(Orientation属性)Sub ChangeOrientation()
MsgBox \"将所选单元格中的⽂本顺时针旋转45度\"Selection.Orientation = 45
MsgBox \"将⽂本由横向改为纵向\"Selection.Orientation = xlVerticalMsgBox \"将⽂本⽅向恢复原值\"
Selection.Orientation = xlHorizontalEnd Sub
[⽰例20-04]⾃动换⾏(WrapText属性)Sub ChangeRow()Dim i
MsgBox \"将所选单元格设置为⾃动换⾏\"i = Selection.WrapTextSelection.WrapText = TrueMsgBox \"恢复原状\"Selection.WrapText = iEnd Sub
[⽰例20-05]将⽐单元格列宽长的⽂本缩⼩到能容纳列宽⼤⼩(ShrinkToFit属性)Sub AutoFit()Dim i
MsgBox \"将长于列宽的⽂本缩到与列宽相同\"i = Selection.ShrinkToFitSelection.ShrinkToFit = TrueMsgBox \"恢复原状\"
Selection.ShrinkToFit = iEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[⽰例21]设置条件格式(FormatConditions属性)Sub FormatConditions()
MsgBox \"在所选单元格区域中将单元格值⼩于10的单元格中的⽂本变为红⾊\"Selection.FormatConditions.Add Type:=xlCellValue, _Operator:=xlLessEqual, Formula1:=\"10\"
Selection.FormatConditions(1).Font.ColorIndex = 3MsgBox \"恢复原状\"
Selection.FormatConditions(1).Font.ColorIndex = xlAutomaticEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例22]插⼊批注(AddComment⽅法)Sub EnterComment()
MsgBox \"在当前单元格中输⼊批注\"ActiveCell.AddComment (\"Hello\")ActiveCell.Comment.Visible = TrueEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例23]隐藏/显⽰单元格批注Sub CellComment()
MsgBox \"切换当前单元格批注的显⽰和隐藏状态\"
ActiveCell.Comment.Visible = Not (ActiveCell.Comment.Visible)End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例24]改变所选单元格的颜⾊Sub ChangeColor()Dim iro As Integer
MsgBox \"将所选单元格的颜⾊改为红⾊\"iro = Selection.Interior.ColorIndexSelection.Interior.ColorIndex = 3
MsgBox \"将所选单元格的颜⾊改为蓝⾊\"Selection.Interior.Color = RGB(0, 0, 255)MsgBox \"恢复原状\"
Selection.Interior.ColorIndex = iroEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例25]改变单元格的图案Sub ChangePattern()Dim p, pc, i
MsgBox \"依Pattern常数值的顺序改变所选单元格的图案\"p = Selection.Interior.Pattern
pc = Selection.Interior.PatternColorIndexFor i = 9 To 16
With Selection.Interior.Pattern = i
.PatternColor = RGB(255, 0, 0)End With
MsgBox \"常数值 \" & iNext i
MsgBox \"恢复原状\"
Selection.Interior.Pattern = p
Selection.Interior.PatternColorIndex = pcEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例26]合并单元格Sub MergeCells()
MsgBox \"合并单元格A2:C2,并将⽂本设为居中对齐\"Range(\"A2:C2\").SelectWith Selection
.MergeCells = True
.HorizontalAlignment = xlCenterEnd WithEnd Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例27]单元格移动的范围Sub ScrollArea1()
MsgBox \"将单元格的移动范围在单元格区域B2:D6中\"ActiveSheet.ScrollArea = \"B2:D6\"End Sub
Sub ScrollArea2()
MsgBox \"解除移动范围\"ActiveSheet.ScrollArea = \"\"End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[⽰例29]删除单元格区域(Delete⽅法)Sub DeleteRange()
MsgBox \"删除单元格区域C2:D6后,右侧的单元格向左移动\"ActiveSheet.Range(\"C2:D6\").Delete (xlShiftToLeft)End Sub
⼩结
下⾯对Range对象的⼀些常⽤属性和⽅法进⾏简单的⼩结。1、Activate与Select试验下⾯的过程:
Sub SelectAndActivate()Range(\"B3:E10\").SelectRange(\"C5\").ActivateEnd 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”).AreasMsgBox Rng.AddressNext Rng
12、Union⽅法和Intersect⽅法
当想从两个或多个单元格区域中⽣成⼀个单元格区域时,使⽤Union⽅法;当找到两个或多个单元格区域共同拥有的单元格区域时,使⽤Intersect⽅法。
因篇幅问题不能全部显示,请点此查看更多更全内容