我的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)
答案 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))