评估命名范围上的函数,通过EVALUATE自己定义
在Excel 2010中。
给定一个命名范围的名称,我试图评估这个命名范围的公式,当它本身已经通过评估定义。 举个例子可能会更好:
使用这个vba函数:
Function eval(str As String) As Variant eval = ActiveSheet.Evaluate(str) End Function
并定义命名范围_xyz(公式选项卡>名称pipe理器,或Alt,I,N,D)(下划线在这里以避免与单元名称冲突):
名称:_xyz
范围:Sheet1
指的是: =ROW(Sheet1!$A$1:$A$10)
如果使用公式= _xyz
(然后按Ctrl-Shift-Enter)在Sheet1(作为垂直的1列行)中的某个位置创build一个数组公式,则可以得到值1,2,3 …… 10柱。
然后公式如=AVERAGE(_xyz)
或=MAX(_xyz)
工作(相应的结果为5.5和10)。 因此,给定名称的范围(这里是“_xyz”)和适当的函数(平均或最大): =eval("AVERAGE(_xyz)")
返回5.5和=eval("MAX(_xyz)")
返回10.到目前为止这么好。
现在我定义一个新的命名范围_xyz2为:
名称:_xyz2
范围:Sheet1
指的是: =EVALUATE("_xyz*_xyz")
如果用公式= _xyz2
(然后按Ctrl-Shift-Enter)在Sheet1的某个位置(作为垂直的1列的行)创build一个数组公式,则可以得到值= _xyz2
… 100列(即_xyz的值的平方)。
公式如=AVERAGE(_xyz2)
或=MAX(_xyz2)
都可以正常工作(相应的结果为38.5和100), 但是 eval函数不再有效:公式如=eval("AVERAGE(_xyz2)")
和=eval("MAX(_xyz)")
现在返回#VALUE !.
我已经尝试了其他types的eval函数。 例如:
Function eval2(str As String) As Variant eval2 = Application.WorksheetFunction.Average(ActiveSheet.Evaluate(str)) End Function
…希望=eval2("_xyz2")
将工作,但它不( =eval2("_xyz")
工作正常)。
有没有函数,Excel或VBA,它将string“_xyz2”作为input,并返回适当的结果(在我们的例子中,平均值和最大值函数为38.5和100)?
如果_xyz2被定义为=_xyz*_xyz
但是如果被定义为=EVALUATE("_xyz*_xyz")
。
我怀疑这会导致评估无法自行调用的问题