vba引用单元格
篇一:VBA代码中引用Excel工作表中单元格区域的方式小
结
在VBA代码中引用Excel工作表中单元格区域的方式小
结
问题一:在VBA代码中~如何引用当前工作表中的单个
单元格(例如引用单元格C3), 回答:可以使用下面列举的
任一方式对当前工作表中的单元格(C3)进行引用。
(1) Range("C3")
(2) [C3]
(3) Cells(3, 3)
(4) Cells(3, "C")
(5) Range("C4").Offset(-1)
Range("D3").Offset(, -1)
Range("A1").Offset(2, 2)
(6) 若C3为当前单元格~则可使用:ActiveCell
(7) 若将C3单元格命名为“Range1”~则可使用:
Range("Range1")或[Range1]
(8) Cells(4, 3).Offset(-1)
---------------------------------------------------
----------------------------- 问题二:在VBA代码中~
我要引用当前工作表中的B2:D6单元格区域~有哪些方式,
回答:可以使用下面列举的任一方式对当前工作表中单元格
区域B2:D6进行引用。
(1) Range(“B2:D6”)
(2) Range("B2", "D6")
(3) [B2:D6]
(4) Range(Range("B2"), Range("D6"))
(5) Range(Cells(2, 2), Cells(6, 4))
(6) 若将B2:D6区域命名为“MyRange”~则又可以使用
下面的语句引用该区域: ? Range("MyRange")
? [MyRange]
(7) Range("B2").Resize(5, 3)
(8) Range("A1:C5").Offset(1, 1)
(9) 若单元格B2为当前单元格~则可使用语句:
Range(ActiveCell, ActiveCell.Offset(4,
2))
(10) 若单元格D6为当前单元格~则可使用语句:
Range("B2", ActiveCell)
---------------------------------------------------
----------------------------- 问题三:在VBA代码中~如何使用变量实现对当前工作表中不确定单元格区域的引用, 回答:有时~我们需要在代码中依次获取工作表中特定区域内的单元格~这通常可以采取下面的几种方式:
(1) Range(“A” & i)
(2) Range(“A” & i & “:C” & i)
(3) Cells(i,1)
(4) Cells(i,j)
其中~i、j为变量~在循环语句中指定i和j的范围后~依次获取相应单元格。
---------------------------------------------------
----------------------------- 问题四:在VBA代码中~如何扩展引用当前工作表中的单元格区域,
回答:可以使用Resize属性~例如:
(1) ActiveCell.Resize(4, 4)~表示自当前单元格开始创建一个4行4列的区域。
(2) Range("B2").Resize(2, 2)~表示创建B2:C3单元格区域。
(3) Range("B2").Resize(2)~表示创建B2:B3单元格区域。
(4) Range("B2").Resize(, 2)~表示创建
B2:C2单元格区域。
如果是在一个单元格区域(如B3:E6)~或一个命名区域中(如将单元格区域B3:E6命名为“MyRange”)使用Resize属性~则只是相对于单元格区域左上角单元格扩展区域~例如: 代码Range("C3:E6").Resize(, 2)~表示单元格区域C3:D6~并且扩展的单元格区域可不在原单元格区域内。
因此~可以知道Resize属性是相对于当前活动单元格或某单元格区域中左上角单元格按指定的行数或列数扩展单元格区域。
---------------------------------------------------
----------------------------- 问题五:在VBA代码中~如何在当前工作表中基于当前单元格区域或指定单元格区域处理其它单元格区域,
回答:可以使用Offset属性~例如:
(1) Range("A1").Offset(2, 2)~表示单元格C3。
(2) ActiveCell.Offset(, 1)~表示当前单元格下一列的单元格。
(3) ActiveCell.Offset(1)~表示当前单元格下一行的单元格。
(4) Range("C3:D5").Offset(, 1)~表示单
元格区域D3:E5~即将整个区域偏移一列。 从上面的代码示
例可知~Offset属性从所指定的单元格开始按指定的行数和
列数偏移~从而到达目的单元格~但偏移的行数和列数不包
括指定单元格本身。
---------------------------------------------------
----------------------------- 问题六:在VBA代码中~
如何在当前工作表中引用交叉区域,
回答:可以使用Intersect方法~例如:
Intersect(Range("C3:E6"), Range("D5:F8"))~表示单元格区域D5:E6~即单
元格区域C3:E6与D5:F8相重迭的区域。
---------------------------------------------------
----------------------------- 问题七:在VBA代码中~
如何在当前工作表中引用多个区域,
回答:
(1) 可以使用Union方法~例如:
Union(Range("C3:D4"), Range("E5:F6"))~表示单元格区域C3:D4和
E5:F6所组成的区域。 Union方法可以将多个非连续区域连
接起来成为一个区域~从而可以实现对多个非连续区域一起
进行操作。
(2) 也可以使用下面的代码:
Range("C3:D4, E5:F6")或[C3:D4, E5:F6]
注意:Range("C3:D4", "F5:G6")~表示单元格区域C3:G6~即将两个区域以第一个区域左上角单元格为起点~以第二个区域右下角单元格为终点连接成一个新区域。
同时~在引用区域后使用Rows属性和Columns属性时~注意下面代码的区别:
?Range("C3:D4",
"F8:G10").Rows.Count~返回的值为8,
?Range("C3:D4,F8:G10").Rows.Count~返回的值为2~即只计算第一个单元格区域。
---------------------------------------------------
-----------------------------
问题八:在VBA代码中~如何引用当前工作表中活动单元格或指定单元格所在的区域(当前区域),
回答:可以使用CurrentRegion属性~例如:
(1) ActiveCell.CurrentRegion~表示活动单元格所在的当前区域。
(2) Range("D5").CurrentRegion~表示单元
格D5所在的当前区域。
当前区域是指周围由空行或空列所围成的区域。该属性的详细使用参见《CurrentRegion属性示例》一文。
---------------------------------------------------
----------------------------- 问题九:在VBA代码中~如何引用当前工作表中已使用的区域,
回答:可以使用UsedRange属性~例如:
(1) Activesheet.UsedRange~表示当前工作表中已使用的区域。
(2) Worksheets("sheet1").UsedRange~表示工作表sheet1中已使用的区域。
与CurrentRegion属性不同的是~该属性代表工作表中已使用的单元格区域~包括显示为空行~但已进行过格式的单元格区域。该属性的详细使用参见《解析UsedRange属性》一文。
---------------------------------------------------
----------------------------- 问题十:如何在单元格区域内指定特定的单元格,
回答:可以使用Item属性~例如:
(1) Range("A1:B10").Item(5,3)指定单元格
C5~这个单元格处于以区域中左上角单元格A1(即区域中第1行第1列的单元格)为起点的第5行第3列。因为Item属性为默认属性~因此也可以简写为:
Range("A1:B10")(5,3)。
如果将A1:B10区域命名为”MyRange”~那么Range("MyRange")(5,3)也指定单元格C5。
(2) Range("A1:B10")(12,13)指定单元格M12~即用这种方式引用单元格~该单元格不必一定要包含在区域内。
同时~也不需要索引数值是正值~例如:
? Range("D4:F6")(0,0)代表单元格C3,
? Range("D4:F6")(-1,-2)代表单元格A2。
而Range("D4:F6")(1,1)代表单元格D4。
(3) 也可以在单元格区域中循环~例如:
Range("D4:F6")(2,2)(3,4)代表单元格H7~即该单元格位于作为左上角单元格E5的第3行第4列(因为E5是开始于区域中左上角单元格D4起的第2行第2列)。
(4) 也能使用一个单个的索引数值进行引用。计数方式为从左向右~即在区域中的第一行开始从左向右计数~第一行结束后~然后从第二行开始从左到右接着计数~依次类推。(注:从区域中第一行第一个单元格开始计数~当第一行结束时~转入第二行最左边的单元格~这样按一行一行从左向
右依次计数。以单元格区域中第1个单元格开始~按上述规则依次为第2个单元格、第3个单元格?.等等)~例如:
Range("A1:B2")(1) 代表单元格A1,
Range("A1:B2")(2) 代表单元格B1,
Range("A1:B2")(3) 代表单元格A2,
Range("A1:B2")(4) 代表单元格B2。
这种方法可在工作表中连续向下引用单元格(即不一定是在单元格区域内~但在遵循相同的规律)~例如:
Range("A1:B2")(5)代表单元格A3,
Range("A1:B2")(14)代表单元格B7~等等。
也可以使用单个的负数索引值。
这种使用单个索引值的方法对遍历列是有用的~例如~Range("D4")(1)代表单元格D4~Range("D4")(2)代表单元格D5~Range ("D4")(11)代表单元格D14~等等。
同理~稍作调整后也可遍历行~例如:
Range("D4").Columns(2)代表单元格E4~Range("D4").Columns(5)指定单元格H4~等等。
(5)当与对象变量配合使用时~Item属性能提供简洁并有效的代码~例如:
Set rng = Worksheets(1).[a1]
定义了对象变量后~像单元格方法一样~Item属性允许
使用两个索引数值引用工作表中的任一单元格~例如~rng(3,4)指定单元格D3。(By Chip Pearson)
---------------------------------------------------
----------------------------- 问题十一:在VBA代码中~如何引用当前工作表中的整行或整列,
回答:见下面的示例代码:
(1) Range("C:C").Select~表示选择C列。
Range("C:E").Select~表示选择C列至E列。
(2) Range("1:1").Select~表示选择第一行。
Range("1:3").Select~表示选择第1行至第3行。
(3) Range("C:C").EntireColumn~表示C列,
Range("D1").EntireColumn~表示D列。
同样的方式~也可以选择整行~然后可以使用如AutoFit方法对整列或整行进行调整。
---------------------------------------------------
----------------------------- 问题十二:在VBA代码中~如何引用当前工作表中的所有单元格,
回答:可以使用下面的代码:
(1) Cells~表示当前工作表中的所有单元格。
(2) Range(Cells(1, 1), Cells(Cells.Rows.Count, Cells. Columns.Count))~其中Cells.Rows表示工作表所
有行~Cells. Columns表示工作表所有列。
-------------------------------------------------------------------------------- 问题十三:在VBA代码中~
如何引用工作表中的特定单元格区域,
回答:在工作表中~您可能使用过“定位条件”对话框。
可以通过选择菜单“编辑——定位”~单击“定位”对话框
中的“定位条件”按钮显示该对话框。这个对话框可以允许
用户选择特定的单元格。例如:
(1)
Worksheets("sheet1").Cells.SpecialCells(xlCellTypeAllFormatConditions)~表示工作表sheet1中由
带有条件格式的单元格所组成的区域。
(2)
ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks)~表示当前工作表中活动单元格所在区域中所有空白单
元格所组成的区域。
当然~还有很多常量和值的组合~可以让您实现特定单
元格的查找并引用。参见《探讨在工作表中找到最后一行》
一文。
---------------------------------------------------
----------------------------- 问题十四:在VBA代码中~如何引用其它工作表或其它工作簿中的单元格区域,
回答:要引用其它工作表或其它工作簿中的单元格区域~只需在单元格对象前加上相应的引
用对象即可~例如:
(1) Worksheets(“Sheet3”).Range(“C3:D5”)~表示引用工作表sheet3中的单元格区域C3:D5。
(2)
Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”)~表示引用MyBook工作簿中工作表Sheet1上的单元格B2。
---------------------------------------------------
----------------------------- 问题十五:还有其它的一些情形吗,
回答:列举如下:
(1) Cells(15)~表示单元格O1~即可在Cells属性中指定单元格数字来选择单元格~其计数顺序为自左至右、从上到下~又如Cells(257)~表示单元格B1。
(2) Cells(, 256)~表示单元格IV1~但是如果Cells(,
257)~则会返回错误。
---------------------------------------------------
----------------------------- 结语
我们用VBA对Excel进行处理~一般是对其工作表中的数据进行处理~因此~引用单元格区域是ExcelVBA编程中最基本的操作之一~只有确定了所处理的单元格区域~才能使用相应的属性和方法进行下一步的操作。
上面列举了一些引用单元格区域的情形和方式~可以看出~引用单元格区域有很多方式~有一些可能不常用~可以根据工作表的所处的环境和个人编程习惯进行选择使用。
当然~在编写程序时~也可能会将上面的一些属性联合使用~以达到选取特定操作对象的目的~例如Offset属性、Resize属性、CurrentRegion属性、UsedRange属性等的组合。
找到最后一行的一些方法探讨
使用End属性
在ExcelVBA中~使用End(xlUp)查找最后一行是最常使用且最为简单的方法~它假设要有一列总包含有数据(数字、文本和公式等)~并且在该列中最后输入数据的单元格的下一行不会包含数据~因此不必担心会覆盖掉已有数据。但该方法有两个缺点:
(1) 仅局限于查找指定列的最后一行。
(2) 如果该列中最后一行被隐藏~那么该隐藏行将被视
作最后一行。因此~在最后一行被隐藏时~其数据可能会被
覆盖。但该列中间的隐藏行不会影响查找的结果。
[示例代码01]
Sub EndxlUp_OneColLastRow()
If Range("A" & Rows.Count).End(xlUp)
= Empty Then GoTo Finish
'获取最后一行
MsgBox "最后一行是第" & Range("A" & Rows.Count).End(xlUp).Row
& “行.”Exit Sub
Finish:
MsgBox "没有发现公式或数据! "
End Sub
[示例代码02]
Sub NextRowInColumnUsedAsSub()
'包含所有数据和公式~忽略隐藏的最后一行
篇二:
Excel之VBA编程之引用单元格、区域的各种方法(上篇)
总结Excel之VBA编程之引用单元格、区域的各种方法
(上篇)
Excel单元格引用、区域的引用~在VBA编程中~有着重要的意义。掌握单元格、区域的引用方法~可方便我们对数据进行相应的处理。下面~是单元格、区域的引用方法之总结~希望对您有帮助。
?用范围来引用单元格及区域
可使用 Range 属性来引用 A1 引用样式中的单元格或单元格区域。下述子程序将单元格区域 A1:D5 的字体设置为加粗。
Workbooks("Book2").Sheets("Sheet2&qu
ot;).Range("A1:D5") .Font.Bold = True
下表演示了使用 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 列
?用编号引用单元格
通过使用行列编号~可用 Cells 属性来引用单个单元
格。该属性返回代表单个单元格的 Range 对象。下例中~
Cells(6,1) 返回 Sheet1 上的单元格 A6~然后将 Value
属性设置为 10。
Worksheets("Sheet1").Cells(6, 1).Value = 10
因为可用变量替代编号~所以 Cells 属性非常适合于在
单元格区域中循环~如下例所示。Dim Counter As Integer
For Counter = 1 To 20
Worksheets("Sheet1").Cells(Counter,
3).Value = Counter
Next Counter
注意如果要同时更改某一单元格区域中所有单元格的属
性或对其应用方法~可使用 Range 属性。
?引用行和列
可用 Rows 属性或 Columns 属性来处理整行或整列。这
两个属性返回代表单元格区域的 Range 对象。下例中~用
Rows(1) 返回 Sheet1 上的第一行~然后将单元格区域的
Font 对象的 Bold 属性设置为 True。
Worksheets("Sheet1").Rows(1).Font.Bold
= True
下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。
引用 含义
------------------------
Rows(1) 第一行
Rows工作表上所有的行
Columns(1)第一列
Columns("A")第一列
Columns 工作表上所有的列
若要同时处理若干行或列~请创建一个对象变量并使用 Union 方法~将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
?用快捷记号引用单元格
可用方括号将 A1 引用样式或命名区域括起来~作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号~如下例所示。
Worksheets("Sheet1").[A1:B5].ClearContent
s
[MyRange].Value = 30
?引用命名区域
用名称比用 A1 样式记号更容易标识单元格区域。若要
命名选定的单元格区域~请单击编辑栏左端的名称框~键入
名称~再按 Enter。
?引用命名区域
下例引用了名为“MyBook.xls”的工作簿中的名为
“MyRange”的单元格区域。
Range("MyBook.xls!MyRange").Font.Italic =
True
下例引用名为“Report.xls”的工作簿中的特定工作表
单元格区域“Sheet1!Sales”。
Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin
若要选定命名区域~请用 GoTo 方法~该方法将激活工
作簿和工作表~然后选定该区域。Application.Goto Reference:="MyBook.xls!MyRange"
Selection.ClearContents
下例显示对于活动工作簿将如何编写相同的过程。
Application.Goto Reference:="MyRange"
Selection.ClearContents
在命名区域中的单元格上循环
下例用 For Each...Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值~就将该单元格的颜色更改为黄色。
Const Limit As Integer = 25
For Each c In Range("MyRange")
If c.Value > Limit Then
c.Interior.ColorIndex = 27
End If
Next c
篇三:EXCEL VBA选择单元格
单元格区域引用方式的小结
2008-11-29 12:10:20 阅读97 评论0字号:大中小 订阅
在使用ExcelVBA进行编程时~我们通常需要频繁地引用单元格区域~然后再使用相应的属性和方法对区域进行操作。所谓单元格区域~指的是单个的单元格、或者是由多个单元格组成的区域、或者是整行、整列等。下面~我们设定一些情形~以问答的形式对引用单元格区域的方式进行归纳。
---------------------------------------------------
-----------------------------
问题一:在VBA代码中~如何引用当前工作表中的单个
单元格(例如引用单元格C3), 回答:可以使用下面列举的
任一方式对当前工作表中的单元格(C3)进行引用。
(1) Range("C3")
(2) [C3]
(3) Cells(3, 3)
(4) Cells(3, "C")
(5) Range("C4").Offset(-1)
Range("D3").Offset(, -1)
Range("A1").Offset(2, 2)
(6) 若C3为当前单元格~则可使用:ActiveCell
(7) 若将C3单元格命名为“Range1”~则可使用:
Range("Range1")或[Range1]
(8) Cells(4, 3).Offset(-1)
---------------------------------------------------
-----------------------------
问题二:在VBA代码中~我要引用当前工作表中的B2:D6
单元格区域~有哪些方式, 回答:可以使用下面列举的任
一方式对当前工作表中单元格区域B2:D6进行引用。
(1) Range(“B2:D6”)
(2) Range("B2", "D6")
(3) [B2:D6]
(4) Range(Range("B2"), Range("D6"))
(5) Range(Cells(2, 2), Cells(6, 4))
(6) 若将B2:D6区域命名为“MyRange”~则又可以使用
下面的语句引用该区域:
? Range("MyRange")
? [MyRange]
(7) Range("B2").Resize(5, 3)
(8) Range("A1:C5").Offset(1, 1)
(9) 若单元格B2为当前单元格~则可使用语句:
Range(ActiveCell, ActiveCell.Offset(4, 2))
(10) 若单元格D6为当前单元格~则可使用语句:
Range("B2", ActiveCell)
--------------------------------------------------------------------------------
问题三:在VBA代码中~如何使用变量实现对当前工作
表中不确定单元格区域的引用,
回答:有时~我们需要在代码中依次获取工作表中特定
区域内的单元格~这通常可以采取下面的几种方式:
(1) Range(“A” & i)
(2) Range(“A” & i & “:C” & i)
(3) Cells(i,1)
(4) Cells(i,j)
其中~i、j为变量~在循环语句中指定i和j的范围后~依次获取相应单元格。
-------------------------------------------------
-------------------------------
问题四:在VBA代码中~如何扩展引用当前工作表中的单元格区域,
回答:可以使用Resize属性~例如:
(1) ActiveCell.Resize(4, 4)~表示自当前单元格开始创建一个4行4列的区域。
(2) Range("B2").Resize(2, 2)~表示创建B2:C3单元格区域。
(3) Range("B2").Resize(2)~表示创建B2:B3单元格区域。
(4) Range("B2").Resize(, 2)~表示创建B2:C2单元格区域。
如果是在一个单元格区域(如B3:E6)~或一个命名区域中(如将单元格区域B3:E6命名为“MyRange”)使用Resize属
性~则只是相对于单元格区域左上角单元格扩展区域~例如:
代码Range("C3:E6").Resize(, 2)~表示单元格区域C3:D6~并且扩展的单元格区域可不在原单元格区域内。
因此~可以知道Resize属性是相对于当前活动单元格或某单元格区域中左上角单元格按指定的行数或列数扩展单元格区域。
---------------------------------------------------
-----------------------------
问题五:在VBA代码中~如何在当前工作表中基于当前单元格区域或指定单元格区域处理其它单元格区域, 回答:可以使用Offset属性~例如:
(1) Range("A1").Offset(2, 2)~表示单元格C3。
(2) ActiveCell.Offset(, 1)~表示当前单元格下一列的单元格。
(3) ActiveCell.Offset(1)~表示当前单元格下一行的单元格。
(4) Range("C3:D5").Offset(, 1)~表示单元格区域D3:E5~即将整个区域偏移一列。
从上面的代码示例可知~Offset属性从所指定的单元格
开始按指定的行数和列数偏移~从而到达目的单元格~但偏
移的行数和列数不包括指定单元格本身。
---------------------------------------------------
-----------------------------
问题六:在VBA代码中~如何在当前工作表中引用交叉
区域,
回答:可以使用Intersect方法~例如:
Intersect(Range("C3:E6"), Range("D5:F8"))~表示单元格区域D5:E6~即单
元格区域C3:E6与D5:F8相重迭的区域。
---------------------------------------------------
-----------------------------
问题七:在VBA代码中~如何在当前工作表中引用多个
区域,
回答:
(1) 可以使用Union方法~例如:
Union(Range("C3:D4"), Range("E5:F6"))~表示单元格区域C3:D4和
E5:F6所组成的区域。
Union方法可以将多个非连续区域连接起来成为一个区
域~从而可以实现对多个非连续区域一起进行操作。
(2) 也可以使用下面的代码:
Range("C3:D4, E5:F6")或[C3:D4, E5:F6]
注意:Range("C3:D4", "F5:G6")~表示单元格区域C3:G6~即将两个区域以第一个区域左上角单元格为起点~以第二个区域右下角单元格为终点连接成一个新区域。
同时~在引用区域后使用Rows属性和Columns属性时~注意下面代码的区别:
?Range("C3:D4",
"F8:G10").Rows.Count~返回的值为8,
?Range("C3:D4,F8:G10").Rows.Count~返回的值为2~即只计算第一个单元格区域。 引用多个单元格区域
使用适当的方法可以很容易地同时引用多个单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域,用 Areas 属性可引用工作表上选定的一组单元格区域。
使用 Range 属性
通过在两个或多个引用之间放置逗号~可使用 Range 属性来引用多个单元格区域。下例清除了 Sheet1 上三个单元格区域的
。
Sub ClearRanges()
Worksheets("Sheet1").Range("C5:D9,G9
:H16,B14:D18"). _
ClearContents
End Sub
命名区域使得用 Range 属性处理多个单元格区域更为
容易。下例可在三个命名区域处于同一工作表时运行。
Sub ClearNamed()
Range("MyRange, YourRange, HisRange").ClearContents
End Sub
使用 Union 方法
用 Union 方法可将多个单元格区域组合到一个 Range
对象中。下例创建了名为 myMultipleRange 的 Range 对
象~并将其定义为单元格区域 A1:B2 和 C3:D4 的组合~然
后将该组合区域的字体设置为加粗。
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 = True
End Sub
使用 Areas 属性
可用 Areas 属性引用选定的单元格区域或多块选定区
域中的区域集合。下述过程计算选定区域中的块数目~如果
有多个块~就显示一则警告消息。
Sub FindMultiple()
If Selection.Areas.Count > 1 Then
MsgBox "Cannot do this to a multiple selection."
End If
End Sub
---------------------------------------------------
-----------------------------
问题八:在VBA代码中~如何引用当前工作表中活动单
元格或指定单元格所在的区域(当前区域), 回答:可以使
用CurrentRegion属性~例如:
(1) ActiveCell.CurrentRegion~表示活动单元格所在
的当前区域。
(2) Range("D5").CurrentRegion~表示单元
格D5所在的当前区域。
当前区域是指周围由空行或空列所围成的区域。该属性的详细使用参见《CurrentRegion属性示例》一文。 ---------------------------------------------------
-----------------------------
问题九:在VBA代码中~如何引用当前工作表中已使用的区域,
回答:可以使用UsedRange属性~例如:
(1) Activesheet.UsedRange~表示当前工作表中已使用的区域。
(2) Worksheets("sheet1").UsedRange~表示工作表sheet1中已使用的区域。
与CurrentRegion属性不同的是~该属性代表工作表中已使用的单元格区域~包括显示为空行~但已进行过格式的单元格区域。该属性的详细使用参见《解析UsedRange属性》一文。
---------------------------------------------------
-----------------------------
问题十:如何在单元格区域内指定特定的单元格,
回答:可以使用Item属性~例如:
(1) Range("A1:B10").Item(5,3)指定单元格
C5~这个单元格处于以区域中左上角单元格A1(即区域中第1行第1列的单元格)为起点的第5行第3列。因为Item属性为默认属性~因此也可以简写为:
Range("A1:B10")(5,3)。
如果将A1:B10区域命名为”MyRange”~那么Range("MyRange")(5,3)也指定单元格C5。
(2) Range("A1:B10")(12,13)指定单元格M12~即用这种方式引用单元格~该单元格不必一定要包含在区域内。
同时~也不需要索引数值是正值~例如:
? Range("D4:F6")(0,0)代表单元格C3,
? Range("D4:F6")(-1,-2)代表单元格A2。
而Range("D4:F6")(1,1)代表单元格D4。
(3) 也可以在单元格区域中循环~例如:
Range("D4:F6")(2,2)(3,4)代表单元格H7~即该单元格位于作为左上角单元格E5的第3行第4列(因为E5是开始于区域中左上角单元格D4起的第2行第2列)。
(4) 也能使用一个单个的索引数值进行引用。计数方式为从左向右~即在区域中的第一行开始从左向右计数~第一行结束后~然后从第二行开始从左到右接着计数~依次类推。(注:从区域中第一行第一个单元格开始计数~当第一行结束时~转入第二行最左边的单元格~这样按一行一行从左向
右依次计数。以单元格区域中第1个单元格开始~按上述规则依次为第2个单元格、第3个单元格….等等)~例如:
Range("A1:B2")(1) 代表单元格A1,
Range("A1:B2")(2) 代表单元格B1,
Range("A1:B2")(3) 代表单元格A2,
Range("A1:B2")(4) 代表单元格B2。
这种方法可在工作表中连续向下引用单元格(即不一定是在单元格区域内~但在遵循相同的规律)~例如: Range("A1:B2")(5)代表单元格A3,
Range("A1:B2")(14)代表单元格B7~等等。
也可以使用单个的负数索引值。
这种使用单个索引值的方法对遍历列是有用的~例如~Range("D4")(1)代表单元格D4~Range("D4")(2)代表单元格D5~Range ("D4")(11)代表单元格D14~等等。
同理~稍作调整后也可遍历行~例如:
Range("D4").Columns(2)代表单元格E4~Range("D4").Columns(5)指定单元格H4~等等。
(5)当与对象变量配合使用时~Item属性能提供简洁并有效的代码~例如:
Set rng = Worksheets(1).[a1]
定义了对象变量后~像单元格方法一样~Item属性允许
使用两个索引数值引用工作表中的任一单元格~例如~
rng(3,4)指定单元格D3。(By Chip Pearson)
---------------------------------------------------
-----------------------------
问题十一:在VBA代码中~如何引用当前工作表中的整行或整列,
回答:见下面的示例代码:
(1) Range("C:C").Select~表示选择C列。
Range("C:E").Select~表示选择C列至E列。
(2) Range("1:1").Select~表示选择第一行。
Range("1:3").Select~表示选择第1行至第3行。
(3) Range("C:C").EntireColumn~表示C列,
Range("D1").EntireC
olumn~表示D列。
同样的方式~也可以选择整行~然后可以使用如AutoFit方法对整列或整行进行调整。
---------------------------------------------------
-----------------------------
问题十二:在VBA代码中~如何引用当前工作表中的所
有单元格,
回答:可以使用下面的代码:
(1) Cells~表示当前工作表中的所有单元格。
(2) Range(Cells(1, 1), Cells(Cells.Rows.Count, Cells. Columns.Count))~其中Cells.Rows表示工作表所
有行~Cells. Columns表示工作表所有列。
--------------------------------------------------------------------------------
问题十三:在VBA代码中~如何引用工作表中的特定单
元格区域,
回答:在工作表中~您可能使用过“定位条件”对话框。
可以通过选择菜单“编辑——定位”~单击“定位”对话框
中的“定位条件”按钮显示该对话框。这个对话框可以允许
用户选择特定的单元格。例如:
(1)
Worksheets("sheet1").Cells.SpecialCells(xlCellTypeAllFormatConditions)~表示工作表sheet1中由
带有条件格式的单元格所组成的区域。
(2)
ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks)~表示当前工作表中活动单元格所在区域中所有空白单
元格所组成的区域。
当然~还有很多常量和值的组合~可以让您实现特定单元格的查找并引用。参见《探讨在工作表中找到最后一行》一文。
---------------------------------------------------
-----------------------------
问题十四:在VBA代码中~如何引用其它工作表或其它工作簿中的单元格区域,
回答:要引用其它工作表或其它工作簿中的单元格区域~只需在单元格对象前加上相应的引用对象即可~例如:
(1) Worksheets(“Sheet3”).Range(“C3:D5”)~表示引用工作表sheet3中的单元格区域C3:D5。
(2)
Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”)~表示引用MyBook工作簿中工作表Sheet1上的单元格B2。
---------------------------------------------------
-----------------------------
问题十五:还有其它的一些情形吗,
回答:列举如下:
(1) Cells(15)~表示单元格O1~即可在Cells属性中指定单元格数字来选择单元格~其计数顺序为自左至右、从上到下~又如Cells(257)~表示单元格B1。
(2) Cells(, 256)~表示单元格IV1~但是如果Cells(, 257)~则会返回错误。
---------------------------------------------------
-----------------------------
结语
我们用VBA对Excel进行处理~一般是对其工作表中的数据进行处理~因此~引用单元格区域是ExcelVBA编程中最基本的操作之一~只有确定了所处理的单元格区域~才能使用相应的属性和方法进行下一步的操作。
上面列举了一些引用单元格区域的情形和方式~可以看出~引用单元格区域有很多方式~有一些可能不常用~可以根据工作表的所处的环境和个人编程习惯进行选择使用。
当然~在编写程序时~也可能会将上面的一些属性联合使用~以达到选取特定操作对象的目的~例如Offset