Excel评估公式错误
我的VBA代码是
Function yEval(entry As String) yEval = Evaluate(entry) Application.Volatile End Function
在单元格f4 Sheet1中我有公式=yEval(Sheet2!E19)
sheet1上的单元格d4包含数字12 Sheet2!I19包含string$ Q
如果Sheet2!e19有stringINDIRECT(“pries!”&Sheet2!I19&12)或INDIRECT(“pries!”&Sheet2!I19&Sheet1!d4)或INDIRECT(“pries!”&Sheet2!I19&“Sheet1!D”&row()+ 12)公式返回结果从表撬!$ Q12
如果Sheet2!e19有stringINDIRECT(“pries!”&Sheet2!I19&address(row(),4))或INDIRECT(“pries!”&Sheet2!I19&“Sheet1!D”&row())忽略row()函数
如何使这个公式根据行号改变d4部分,如果行是5则d5
INDIRECT("pries!"&Sheet2!I19&Sheet1!d4)
有趣的问题…要进一步了解这个问题,请从直接或观看窗口中尝试:
?[indirect("rc",0)] ?[index(a:a,row())] ?[offset(a1,row()-1,column()-1)]
奇怪的是,无论哪个细胞处于活动状态,它们都评估为A1
。 当返回值是一个范围引用时,这是Evaluate
的一个怪癖或[]
引用被相对于A1处理而不是活动(调用)单元。 您可以将row()
等同于相对于A1计算的RC符号中的row(RC)
。
但是,请注意,在上面的三个公式中将&""]
更改为&""]
会导致第一个错误,而最后两个错误的结果是预期结果,因此row()
相对于活动单元格进行计算。 因此,当返回值不是范围参考时,Evaluate的function似乎不同。
更新
基于这些观察,您可以使用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))