2017-05-26 80 views
0

例如,如果我有一个像这样的复杂函数:=IFERROR(CELL("address",INDEX(D:D,MATCH(A2;D3:D$750;0)+ROW(A2);1;1));"")我想将它转换为指向由该公式返回的单元格的超链接。是的,我知道这可以通过用=HYPERLINK("[file_name.xlsm]" & %formula%)来包装它,但首先,它看起来非常难看,并且难以阅读稀疏的大数据,其次 - 在Excel之间复制这样的数据块是非常不方便的实例(然后替换文件名)。Excel中的自定义函数用于单元超级链接创建

所以我不知道 - 是有可能这样的输出转换成细胞链接,当前文件和片材来代替“[long_file_name.xlsm] $ d $ 156”可读的文本,如“D156”?

P.S.显然我可以创建一个返回当前文件名的自定义函数,并将相同的公式放入HYPERLINK函数的第二个参数中,但显然这将是反效果的,特别是当我有大量数据时。所以我想把所有这一切换成1个功能...

P.P.S.不知道这是否合适(对于这个问题它有点偏离),但如果可以使用宏而不是自定义函数完成相同的功能,那将很好。因此,宏应该在当前所选范围内找到所有重复项,并在每个重复项的下一次出现时创建超链接(在具有相同偏移量的单元格中,偏移量+1,即当前活动后的下一张)。其余的我可以自己管理。


UPD1: 获取文件名不是一个问题,因为我在PS中说,我可以写这样的功能:

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

不完全确定你在问什么,但我认为= CELL(“文件名”)无线会帮助你。这将返回文件名和表单。只需从返回的内容中提取表单名称和文件名称即可。也可以切换/粘贴到其他工作簿/工作表。

+0

直到最后(至少到第一个P.S.结束)读取问题,获取文件名不是问题,我需要将第一个参数传递为HYPERLINK函数的第二个参数。 –

0

嗯,我没有找到一种方法来发送多个参数与其他函数的单一结果,但我发现了一种方法来做我想做的事情。它看起来像一个肮脏的黑客,但我不知道,也许这是在Excel VBA中做事情的方式......

所以首先它需要在模块的顶部添加一个公共变量:

Public sBuff As String 

接下来,这两个函数应公共变种声明后说:

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())

是的,它的丑陋,但作为魔术对我=)