[英]Excel Evaluate formula error
我的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)或INDIRECT(“ pries!”&Sheet2!I19&Sheet1!d4)或INDIRECT(“ 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)
有趣的問題...要進一步了解該問題,請在即時窗口或監視窗口中嘗試以下操作:
?[indirect("rc",0)]
?[index(a:a,row())]
?[offset(a1,row()-1,column()-1)]
奇怪的是,無論哪個單元處於活動狀態,它們都將評估為A1
。 如果返回值是范圍引用,則相對於A1而不是活動(調用)單元格對待引用是對Evaluate
或[]
的怪癖。 您可以認為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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.