Excel VBA编程 获取单元格行列信息
在VBA中,提供了Select属性来对单元格区域进行选择,并可以对其各种设置,例如指定字体颜、单元格的边框等。除些之外,还提供了其他的一些属性,用来读取这些选择后的单元格的信息,这在编程中非常实用。
1.获取单元格或单元格区域的地址
在VBA代码中,对于某些需要使用所选择的单元格或单元格区域的地址时(在不能输入地址的情况下),可使用Range对象中的Address属性来获取单元格区域的地址。
格式:表达式.Address(RowAbsolute,ColumnAbsolute,
ReferenceStyle,External,RelativeTo)
其中表达式代表一个Range对象的变量,属性中括号内的参数用于返回当前地址的类型,其详细说明如表14.5所示。
表14.5 Address参数说明
对象 | 可选/必选 | 数据类型 | 描述 |
RowAbsolute | 可选 | absolute relative Variant | 如果为 True,则以绝对引用返回引用的行部分。默认值为 True。 |
ColumnAbsolute | 可选 | Variant | 如果为 True,则以绝对引用返回引用的列部分。默认值为 True。 |
ReferenceStyle | 可选 | XlReferenceStyle | 引用样式。默认值为xlA1。 |
External | 可选 | Variant | 如果为 True,则返回外部引用。如果为 False,则返回本地引用。默认值为 False。 |
RelativeTo | 可选 | Variant | 如果RowAbsolute和ColumnAbsolute为False,并且ReferenceStyle为xlR1C1,则必须包括相对引用的起始点。此参数是定义起始点的Range对象。 |
如果引用包含多个单元格,RowAbsolute和ColumnAbsolute 将应用于所有的行和列。对象ReferenceStyle的数据类型XlReferenceStyle是一个枚举类型的数据,包括了两个值,说明如表14.6所示。
表14.6 XlReferenceStyle值的描述
名称 | 值 | 描述 |
xlA1 | 1 | 默认值。使用xlA1返回A1样式的引用。 |
xlR1C1 | -4150 | 使用xlR1C1返回R1C1样式的引用。 |
例如,在工作表Sheet1中,显示引用的单元格的几种不同的样式,过程代码如下:
Sub vRange()
Dim mc As Range
Set mc = Range("A1:E5")
MsgBox mc.Address() '返回 $A$1:$E$5
' 参数RowAbsolute
MsgBox mc.Address(RowAbsolute:=False) '返回 $A1:$E5
'参数ColumnAbsolute
MsgBox mc.Address(ColumnAbsolute:=False) '返回 A$1:E$5
'属性中前两个参数
MsgBox mc.Address(False, False) '返回 A1:E5
'参数External
MsgBox mc.Address(External:=True) '返回 [工作簿对象]Sheel1'!$A$1:$E$5
MsgBox mc.Address(External:=False) '返回 $A$1:$E$5
'参数ReferenceStyle
MsgBox mc.Address(ReferenceStyle:=xlA1) ' $A$1:$E$5
MsgBox mc.Address(ReferenceStyle:=xlR1C1) ' R1C1:R5C5
'参数RelativeTo
MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
RowAbsolute:=False, _
ColumnAbsolute:=False, _
RelativeTo:=Worksheets(1).Cells(3, 3)) '返回 R[-2]C[-2]:R[2]C[2]'
End Sub
2.获取单元格的行号
每个单元格均有一个固定的地址,地址编号由列号和行号组成。如A1,B2等。一个地址唯一代表一个单元格。要在VBA中获取单元格的行号和列号时,可用Range对象的Row、Columns属性。
●Row属性
用于返回所选单元格区域中第一个子区域的第一行的行号,值为Long类型的数据,且属性为只读。语法格式如下:
格式:表达式.Row
表达式代表一个Range对象的变量。
●Columns属性
用于返回指定区域中第一块中的第一列的列号。值为Long类型的数据,且属性为只读。语法格式如下:
格式:表达式.Column
表达式代表一个Range对象的变量。如A列返回1,B列返回2,依此类推。若要返回区域中最后一列的列号,请使用下列语句。
myRange.Columns(myRange.Columns.Count).Column
在如下的过程中,显示当前的工作表中活动单元格的行号和列号。
Sub AcRange()
Dim X, Y As Integer
X = ActiveCell.Row '获取当前行
Y = ActiveCell.Column '获取当前列
MsgBox "当前活动单元格:行(" & Str(X) & ") ,列(" & Str(Y) & ")"
End Sub
3.获取单元格的列标字母
在获取单元格的列标字母时,没有特定的属性。但是可以通过Excel中自带的函数Split将单元格的列标字母截取。
Split函数用于返回一个下标从零开始的一维数组,它包含了指定数目的子字符串。在单元
格按地址返回的一般都是单元格的绝对引用,行和列前有一个“$”字符,在该函数中,可按“$”分组将地址放到数组中。
例如,在下面的过程中,使用Split函数取出当前活动单元格的列标字母。
Sub getCellWord()
'声明数组w
Dim w() As String
'将当前的活动单元格的地址字串按$分组分别放入w中
w = Split(ActiveCell.Address, "$")
MsgBox "当前活动单元格的列标字母:" & w(1)
End Sub
提 示 | 还可以使用其他的字符串截取函数(如Left、Mid等),通过一定的算法取出单元格的列标字母。 |
4.获取单元格区域的起始
可使用Address属性获取当前的单元格区域的地址,该地址由两对单元格引用组成,中间使用冒号(:)分隔,使用Split函数使用冒号将地址字符串分隔,数组中的第一个元素就是单元格区域的起始地址。过程代码如下:
Sub getFirstAdd()
Dim R() As String
R = Split(Selection.Address, ":")
MsgBox "当前活动单元格的列标字母:" &R(0)
End Sub
5.起始行号和终止行号
应用程序中,对单元格区域进行操作时,单元格区域一般都会形成一个矩阵,如A1:D5。
用户对这个区域进行操作时,有可能会用到这个区域的起始和终止行号。要获取这些数据,可以将该区域的地址进行拆分。
例如,在应用程序中,计算单元格区域B2:H13的总行数,代码如下:
Sub getTotleRow()
Dim R() As String
Dim x As Integer, y As Integer
Range("B2:E13").Select
R = Split(Selection.Address, "$")
'获取起始终止行号
MsgBox "起始行号:" & Val(R(2)) & vbCrLf & "终止行号:" & Val(R(4))
MsgBox Range(Selection.Address).Rows.Count '总行数
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论