1、问题描述
如下图所示,名称列可能是动态赋值的,名称列的内容有对应新的sheet页,如名称为PJ1及其PJ1的sheet页,最终需要获取PJ1的sheet页的B1单元格的内容。
如下图所示,是要获取PJ1的sheet页的B1的值。
2、解决办法
如下图所示,使用excel的ADDRESS()函数,可以动态拼接出要获取所在的sheet页B1单元格的地址,使用excel的INDIRECT()函数,获取动态地址对应单元格的内容。
如上图所示,ADDRESS(1,2,1,TRUE,B4),可以拼接出'PJ1'!$B$1动态地址;使用INDIRECT(ADDRESS(1,2,1,TRUE,B4)),可以获取动态地址'PJ1'!$B$1,即名称PJ1的sheet页对应B1单元格的内容。
3、函数说明
(1)、ADDRESS(1,2,1,TRUE,B4),即获取当前sheet页B4单元格的值(即PJ1)对应的sheet页中的第1行第2列的值动态地址,即'PJ1'!$B$1。
ADDRESS(row_num, column_num, [abs_num], [A1], [sheet_text])
//row_num 必需。 一个数值,指定要在单元格引用中使用的行号。
//column_num 必需。 一个数值,指定要在单元格引用中使用的列号。
//abs_num 可选。 一个数值,指定要返回的引用类型。
//返回的引用类型
//1 或省略,绝对值
//2 绝对行号,相对列标
//3 相对行号,绝对列标
//4 相对值
//A1 可选。 一个逻辑值,指定 A1 或 R1C1 引用样式。
//在 A1 样式中,列和行将分别按字母和数字顺序添加标签。
//在 R1C1 引用样式中,列和行均按数字顺序添加标签。
//如果参数 A1 为 TRUE 或被省略,则 ADDRESS 函数返回 A1 样式引用;
//如果为 FALSE,则 ADDRESS 函数返回 R1C1 样式引用。
//如 A1 样式为$B$1,即获取B1单元格的值。
//如 R1C2 样式,即获取第1行第2列对应单元格的值。
//sheet_text 可选。 一个文本值,指定引用的sheet页的名称。
注意:excel中$B$1表示列和行绝对引用,即将此内容复制到其他单元格或下拉单元格时,还一直获取的是B1单元格的值;$B1表示B列是绝对引用,行不是绝对应用,单元格下拉时,可能会变成B2、B3等,用于设置ADDRESS()的abs_num参数,即设置返回值引用类型。
(2)、INDIRECT('PJ1'!$B$1),即获取名称为PJ1的sheet页中B1单元格的值。