excel二十多年前的XLM宏函数还有用吗( 二 )


名称:ThisSheet
引用位置:=GET.CELL(32+0*NOW(),INDIRECT(GetRC,FALSE))
注意,在“引用位置”公式中的INDIRECT(GetRC,FALSE)提取使用该名称的单元格 。
接着,定义名称:GetRC
引用位置:=SUBSTITUTE(REFTEXT(!$A$1),1,””)
确定正在使用的行和列的字母 。
GET.CELL(32,…)获取包含使用上面的INDIRECT提取的单元格所在的工作表的名称,包含有工作簿名 。例如,在工作簿ExcelReveal07.xlsm工作簿的工作表Sheet5任一单元格中,输入公式:=ThisSheet,其结果是:[ExcelReveal07.xlsm]Sheet5,如图5所示 。

excel二十多年前的XLM宏函数还有用吗

文章插图
图5
3-3 在工作簿中创建命名公式,以获取当前工作表之前(即左侧)的工作表名 。
单击“公式”选项卡“定义名称”命令,在“新建名称”对话框中输入以下内容:
名称:PreviousSheet
引用位置:=INDEX(AllSheets,MATCH(ThisSheet,AllSheets,0)-1)
其中,MATCH函数获取当前工作表的索引值,减1得到当前工作表左侧工作表的索引值 。然后,INDEX函数获取该工作表的名称 。如下图6所示 。
【excel二十多年前的XLM宏函数还有用吗】
excel二十多年前的XLM宏函数还有用吗

文章插图
图6
3-4 在工作簿中创建命名公式,以获取当前工作表之后(即右侧)的工作表名 。
单击“公式”选项卡“定义名称”命令,在“新建名称”对话框中输入以下内容:
名称:NextSheet
引用位置:=INDEX(AllSheets,MATCH(ThisSheet,AllSheets,0)+1)
3-5 下面的公式获取当前工作表之前的工作表单元格A1中的值:
=INDIRECT(“‘” & PreviousSheet& “‘!” & CELL(“address”,A1))
下面的公式获取当前工作表之后的工作表单元格A1中的值:
=INDIRECT(“‘” & NextSheet& “‘!” & CELL(“address”,A1))
示例4:给命名公式传递参数
在工作簿中创建命名公式 。
单击“公式”选项卡“定义名称”命令,在“新建名称”对话框中输入以下内容:
名称:Myref
引用位置:
=MID(GET.CELL(6,INDIRECT(GetRC,FALSE)),FIND(“ROW(“,GET.CELL(6,INDIRECT(GetRC,FALSE)))+4,FIND(“)”,GET.CELL(6,INDIRECT(GetRC,FALSE)))-FIND(“ROW(“,GET.CELL(6,INDIRECT(GetRC,FALSE)))-4)
Myref在公式中查找“ROW(”并接受找到的位置与第一个闭括号之间的全部文本作为有效的单元格引用,即评估当前单元格中的公式字符串,提取一个单元格地址 。
注意,在公式中使用了上文创建的名称GetRC 。
下面是一些可能与命名公式Myref结合使用的一些示例 。定义名称:
名称:IsFormula
引用位置:=GET.CELL(48,INDIRECT(Myref))+0*NOW()
名称:CellColor
引用位置:=GET.CELL(63,INDIRECT(Myref))+0*NOW()
名称:RowIsHidden
引用位置:=IF(GET.CELL(17,INDIRECT(Myref))=0,TRUE,FALSE)+0*NOW()
名称:RowHeight
引用位置:=GET.CELL(17,INDIRECT(Myref))+0*NOW()
在工作表中使用:
=IF(ROW(B2),CellColor)
显示单元格B2的背景色的索引值 。
=IF(ROW(B2),RowHeight)
显示单元格B2所在行的行高 。
在VBA中使用XLM宏函数
示例:定位图表中的形状
如下图7所示,在工作表Sheet7中,需要在图表区中将箭头从绘图区的左上角指向第3个柱状顶部中间位置 。
excel二十多年前的XLM宏函数还有用吗

文章插图
图7
代码如下:
excel二十多年前的XLM宏函数还有用吗

文章插图
说明:

推荐阅读