Excel评估公式错误

时间:2012-06-08 08:54:17

标签: excel formula evaluate

我的VBA代码是

Function yEval(entry As String)
yEval = Evaluate(entry)
Application.Volatile
End Function
在单元格f4中的Sheet1中的

我有公式=yEval(Sheet2!E19) sheet1上的单元格d4包含数字12 Sheet2!I19包含字符串$ Q

  

如果Sheet2!e19有字符串INDIRECT(“pries!”& Sheet2!I19& 12)或   间接(“pries!”& Sheet2!I19& Sheet1!d4)或   间接(“pries!”& Sheet2!I19&“Sheet1!D”& row()+ 12)公式返回   板材撬开的结果!$ Q12

     

如果Sheet2!e19有字符串   INDIRECT(“pries!”& Sheet2!I19& address(row(),4))或   INDIRECT(“pries!”& Sheet2!I19&“Sheet1!D”& row())公式返回   结果0似乎忽略了row()函数

如何使用此公式来根据行号更改d4部分,如果行为5则为d5

INDIRECT("pries!"&Sheet2!I19&Sheet1!d4)

1 个答案:

答案 0 :(得分:1)

有趣的问题......为了进一步了解这个问题,请从即时或观察窗口尝试这些:

?[indirect("rc",0)]
?[index(a:a,row())]
?[offset(a1,row()-1,column()-1)]

奇怪的是,无论哪个细胞活跃,它们都会评估为A1。这是Evaluate[]的怪癖,当返回值是范围引用时,引用相对于A1而不是活动(调用)单元格进行处理。您可以将row()视为与相对于A1评估的RC符号中的row(RC)等效。

但请注意,在上述三个公式中将]更改为&""]会导致第一个错误,但最后两个中的预期结果会导致row()现在被评估为相对错误到活跃的细胞。因此,当返回值不是范围引用时,似乎Evaluate的功能不同。

更新

根据这些观察结果,您可以使用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))