excel vba获取单元格地址的方法
CONCATENATE函数可以连接字符串。
注意,在sheet中获取单元格地址的可以用如下函数实现:SUBSTITUTE(ADDRESS(row(),COLUMN(),4),1, ""),其中那个4代表返回当前单元格的地址的相对引用。
其中worksheet的address函数说明如下:
语法
ADDRESS(row_num,column_num,[abs_num],[a1],[sheet_ text])
ADDRESS函数语法具有以下参数:
row_num必需。一个数值,指定要在单元格引用中使用的行号。
column_num必需。一个数值,指定要在单元格引用中使用的列号。
abs_num可选。一个数值,指定要返回的引用类型。
A1可选。一个逻辑值,指定A1或R1C1引用样式。在A1样式中,列和行将分别按字母和数字顺序添加标签。在R1C1引用样式中,列和行均按数字顺序添加标签。如果参数A1为TRUE 或被省略,则ADDRESS函数返回A1样式引用;如果为FALSE,则ADDRESS函数返回R1C1
样式引用。
注意:要更改Excel使用的引用样式,请单击“文件”选项卡,单击“选项”,然后单击“公式”。在“使用公式”下,选中或清除“R1C1引用样式”复选框。
sheet_text可选。一个文本值,指定要用作外部引用的工作表的名称。例如,公式=ADDRESS(1,1,,,"Sheet2")返回Sheet2!$A$1。如果忽略参数sheet_text,则不使用任何工作表名称,并且该函数所返回的地址引用当前工作表上的单元格。SUBSTITUTE(text,old_text,new_text,[instance_num]) SUBSTITUTE函数语法具有下列参数:
?文本必需。需要替换其中字符的文本,或对含有文本(需要替换其中字符)的单元格的引用。
?old_text必需。需要替换的文本。
?new_text必需。用于替换old_text的文本。
?Instance_num可选。指定要用new_text替换old_text的事件。如果指定了instance_num,则只有满足要求的old_text被替换。否则,文本中出现的所有old_text 都会更改为new_text。
vba中是activecell.address(注意vba中的address与sheet中的address用法不同)https://www.360docs.net/doc/b74507508.html,/thread-579677-1-1.html
Range.Address属性
返回一个String值,它代表宏语言的区域引用。
语法
表达式.Address(RowAbsolute,ColumnAbsolute,ReferenceStyle,External,RelativeTo)
表达式一个代表Range对象的变量。
参数
说明
如果引用包含多个单元格,RowAbsolute和ColumnAbsolute将应用于所有的行和列。
示例
下例对工作表Sheet1中的同一单元格地址使用了四种不同的表达方式。示例中的注释为将要显示于消息框中的地址。
?2010MicrosoftCorporation。保留所有权利。
PublicSubabc()
Fork=1To26
Sheet3.Cells(6,5*k+4)=""
mystr="="
Sheet3.Cells(5,5*k+4)="本段负荷(kW)"
'Sheet3.Cells(5,5*k+4).Interior.Color=RGB(255,192,0)
'Sheet3.Cells(6,5*k+4).Interior.Color=RGB(255,192,0)
Sheet3.Cells(6,5*k+1).Interior.Color=RGB(0,176,240)
Sheet3.Cells(6,5*k+1).Locked=True
Fori=kTo26
Ifi<>kThen
mystr=mystr&"+"&WorksheetFunction.Substitute(Sheet3.Cells(6,5*i+4).Address,"$","")'行地址和列地址均为相对引用
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address(RowAbsolute:=False)'行地址为相对引用,列地址为绝对引用
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address(ColumnAbsolute:=False)'列地址为相对引用,行地址为绝对引用
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address'列地址和行地址都为绝对引用
Else
mystr=mystr&WorksheetFunction.Substitute(Sheet3.Cells(6,5*i+4).Address,"$","")
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address(RowAbsolute:=False)'行地址为相对引用,列地址为绝对引用
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address(ColumnAbsolute:=False)'列地址为相对引用,行地址为绝对引用
'mystr=mystr&"+"&Sheet3.Cells(6,5*i+4).Address'列地址和行地址都为绝对引用
EndIf
Nexti
Sheet3.Cells(6,5*k+1).Formula=mystr
Nextk
EndSub
vba中获得某个单元格地址的行号?一种方法是使用split函数split(cells(i,j).address,"$")(1)。
vba的split函数用法说明
https://www.360docs.net/doc/b74507508.html,/content/15/0216/08/21373269_448910679.shtml
Split函数是在处理字符串时常用的一个函数,它的作用是将字符串按特定的字符分开,返回的是一个一维数组,数组的起始下标为0,看下面的例子
Subtest()
Dimarr,brr,s,m,n,y
s="abc,d,e,f,g"
arr=Split(s,",")'结果是一个包含5个项的一维数组
m=Split(s,",")(0)'令m为数据的第1个项,为abc,因为数组的第1个数对应的编号是0,依此类推,第2个数对应编号是1···
m=Split(s,",")(1)'令m为数据的第2个项,为d
brr=Split(s,",",2)'将s以逗号分为2项,brr(0)=abc,brr(1)="d,e,f,g"
n=Split(s,",",2)(0)'令n=abc
y=Split(s,",",2)(1)'令y="d,e,f,g"
EndSub
现在有一个字符串“abc,d,e,f,g,h”,arr=Split(s,",")就是将字符串以“,”为分隔符分开,返回的arr是一个一维数组,arr(0)=abc,arr(1)=d,arr(2)=e,arr(3)=f,arr(4)=g,当然在这里split(s,",")(0)与arr(0)是等价的,将split(s",")直接看成一个数组,(0)表示这个数组的第1项。如果不想将s 全部分开,可以在分隔符后面再加上个参数来表示你想分成几份。比如split(s,",",2)这里的2就表示将s分成2份即可,返回结果是"abc"和"d,e,f,g",如果是split(s,",",3)那么结果就是"abc","d","e,f,g"三个值了。