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.获取单元格的行号
每个单元格均有一个固定的地址,地址编号由列号和行号组成。如A1B2等。一个地址唯一代表一个单元格。要在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小时内删除。