有趣的问题...为了进一步了解该问题,请从立即窗口或监视窗口中尝试以下操作:
?[indirect("rc",0)]
?[index(a:a,row())]
?[offset(a1,row()-1,column()-1)]
奇怪的是他们都评价为A1
无论哪个单元格处于活动状态。这是一个怪癖Evaluate
or []
当返回值是范围引用时,引用将相对于 A1 而不是活动(调用)单元格进行处理。你可以想到row()
相当于row(RC)
以相对于 A1 评估的 RC 符号表示。
但请注意,改变]
to &""]
在上面的三个公式中,第一个公式会出现错误,但后两个公式会出现预期结果,因此row()
现在相对于活动单元进行评估。因此,当返回值不是范围引用时,Evaluate 的功能似乎有所不同。
Update
基于这些观察,您可以使用 INDEX 作为行引用并将 INDIRECT 移到外部:
Sheet1!F4:=INDIRECT(yEval(Sheet2!E19))
Sheet2!E19:"pries!"&Sheet2!I19&INDEX(Sheet1!D:D,Row())
...或者只使用 RC 样式引用而不需要 UDF:
=INDIRECT("pries!"&Sheet2!I19&INDIRECT("RC4",0))