Excel超链接虽然目标正确,但仍无法跳转到动态引用
我正在编写一个公式,让用户能够使用Excel的 HYPERLINK函数自动选择一个动态范围,具体如下:(为了清晰,将LET语句分行)
=IFERROR(
HYPERLINK(
LET(testNameCell, INDIRECT("R" & XMATCH(TRUE, ISBLANK(INDIRECT("A1:A" & ROW())), 0, -1) + 1& "C1", FALSE),
LET(levelCol,XMATCH(LEFT(OFFSET(testNameCell,1,COLUMN()-1),2) & " Proposed", INDIRECT(ROW(testNameCell)+1 & ":" & ROW(testNameCell)+1), 0, 1),
LET(targetRange, ADDRESS(ROW(testNameCell) + 2,levelCol) & ":" & ADDRESS(ROW(), levelCol),
SUBSTITUTE(TEXTAFTER(CELL("filename"), "\", -1), "]", "]'")& "'!" & targetRange))),
"Select"),
"")
该公式最终计算得到 =IFERROR(HYPERLINK("[Workbook Name]'Worksheet Title'!$C$10:$C$21", "Select"), ""),看起来会生成一个有效的超链接单元格,但点击该单元格却没有任何反应。
奇怪的是,把公式改成只输出地址 [Workbook Name]'Worksheet Title'!$C$10:$C$21,并写一个HYPERLINK引用该单元格的值,效果却很完美(成功选中目标范围),这表明我原来公式中对HYPERLINK的实现有问题。我正在做的项目禁止使用VBA代码,因此非常欢迎任何非VBA的解决方案!
编辑:@Makyukh Bhattacharya——情况是,“L2 XR”底部单元格包含文本输出,而“L1 XR”底部单元格在其公式中尝试链接到这个文本输出,但“L1 XR”不起作用。然而,包含“test”的单元格包含公式“=HYPERLINK("[address of L2 XR bottom cell]", "test")”,并且工作正常,按预期选择了范围。因此我不确定这是单引号的问题,因为从其他单元格引用文本地址时它工作正常。此外,我还按你描述的修改了原始的“Select”单元格公式,但行为没有改变。
编辑2:@MGonet:我在反复试验后发现,一旦在超链接目标中包含来自ADDRESS() 或CELL("filename") 的值,链接就会失效——以纯文本字符串的形式却能工作。不寻常的是,现在把targetRange包裹在VALUETOTEXT函数中,反而会抛出“Reference isn't valid.”错误,而不是什么都不做。
解决方案
通过以下步骤解决:
- 将所有
LET()的实例替换为显式定义的函数 - 在返回要高亮显示的最后一个单元格的
MATCH(TRUE, ISBLANK([range])函数之前,添加一个隐式交叉引用标记@,用于在我调用的INDIRECT()函数中定义要高亮的范围
最终可用的公式如下:
=IFERROR(
HYPERLINK("#'" & TEXTAFTER(CELL("filename", $A$1), "]", -1)
& "'!R" & ROW()+2
& "C" & MATCH(LEFT(INDIRECT("R4C" & COLUMN(), FALSE), 2)
& " Proposed", INDIRECT(ROW()+1 & ":" & ROW() + 1), 0)
& ":R" & ROW() + MATCH(TRUE, ISBLANK(@INDIRECT("A" & ROW()
& ":A" & ROW() + 999)), 0)-2 & "C"
& MATCH(LEFT(INDIRECT("R4C" & COLUMN(), FALSE), 2)
& " Proposed", INDIRECT(ROW()+1 & ":" & ROW() + 1), 0))
, "Select")
HYPERLINK() 函数抛出一个 #N/A! 错误,但被 IFERROR() 函数捕获,使用 "Select" 作为友好名称。感觉有点像走捷径,但它确实能工作,所以我也不打算过分纠结。
