例如,如果我有像这样的复杂函数:=IFERROR(CELL("address",INDEX(D:D,MATCH(A2;D3:D$750;0)+ROW(A2);1;1));"")
我想将其转换为指向该公式返回的单元格的超链接。是的,我知道它可以通过=HYPERLINK("[file_name.xlsm]" & %formula%)
包裹它来完成,但首先,它看起来非常难看并且不舒服地读取大的稀疏数据,其次 - 复制这些数据非常不方便 - Excel实例之间的块(然后替换文件名)。
所以我想知道 - 是否可以将此类输出转换为当前文件和工作表的单元格链接,并使用“ D156 ”等可读文本代替“ [long_file_name.xlsm] $ D $ 156 “?
P.S。显然我可以创建一个自定义函数,返回当前文件名并将相同的公式放入HYPERLINK函数的第二个参数中,但显然它会有效,特别是当我有大量的数据时。所以我想将所有这些包装成1个函数......
P.P.S。不确定这是否合适(这个问题有点离谱),但如果使用宏而不是自定义函数可以完成相同的功能,那就没问题了。因此,宏应该找到当前所选范围内的所有重复项,并在每个副本的下一次出现时创建超链接(在具有偏移+1的不同工作表上具有相同偏移的单元格中,当前处于活动状态之后的下一个工作表)。其余的我可以自己管理。
UPD1: 获取文件名不是问题,正如我在P.S.中所说,我可以写一个这样的函数:
Function GetCurFilename()
GetCurFilename= "[" & ActiveWorkbook.Name & "]"
End Function
但我仍然需要以某种方式将第一个HYPERLINK
的第一部分论点作为第二个发送!
UPD2: 我想应该这样做:
Function MakeLinkArgs(cAdrs) As SomeType_interpreted_as_2_arguments
If (cAdrs = "") Then
MakeLinkArgs(1) = ""
MakeLinkArgs(2) = ""
Else
MakeLinkArgs(1) = "[" & ActiveWorkbook.Name & "]" & cAdrs
MakeLinkArgs(2) = Replace(cAdrs, "$", "")
End If
End Function
所以这个函数可以像这样使用:=HYPERLINK( MakeLinkArgs( IFERROR(CELL("address",INDEX(D:D,MATCH(A2;D3:D$750;0)+ROW(A2);1;1));"") ) )
但仍然没有运气找到可以解释为2个参数的类型(不确定是否存在这样的...)
答案 0 :(得分:0)
不完全确定你在问什么,但我认为= CELL(“filename”)会对你有帮助。这将返回文件名和工作表。只需从返回的内容中提取工作表名称和文件名即可。也适用于剪切/粘贴到其他工作簿/工作表。
答案 1 :(得分:0)
好吧,我没有找到一种方法来发送多个参数与其他函数的单个结果,但我找到了一种方法来做我想要的。它看起来像是一个肮脏的黑客,但我不确定,也许这是在Excel VBA中做事的方式......
首先,需要在模块顶部添加一个公共变量:
Public sBuff As String
接下来,应在public var声明后添加这两个函数:
Function MakeCLink(cAdrs)
If (cAdrs = "") Then
MakeCLink = ""
sBuff = ""
Else
MakeCLink = "[" & ActiveWorkbook.Name & "]" & cAdrs
sBuff = Replace(cAdrs, "$", "")
End If
End Function
Function sBuf() As String
sBuf = "" & sBuff
End Function
编译后,它可以在公式中使用:=HYPERLINK( MakeCLink(IFERROR(CELL("address",INDEX(D:D,MATCH(A2,D3:D$750,0)+ROW(A2),1,1)),"")), sBuf() )
是的,它很难看,但对我来说却是神奇的=)