在Excel 2010中。
给定一个命名范围的名称,我试图评估这个命名范围的公式,当它本身已经通过evaluate定义时。举个例子可能更好:
使用此vba函数:
Function eval(str As String) As Variant
eval = ActiveSheet.Evaluate(str)
End Function
定义命名范围_xyz(公式选项卡>名称管理器,或Alt,I,N,D)(下划线是为了避免以后与单元名称冲突):
名称:_xyz
范围:Sheet1
指:=ROW(Sheet1!$A$1:$A$10)
如果在Sheet1中创建一个数组公式(作为垂直的1列行)并使用公式= _xyz
(然后按Ctrl-Shift-Enter),我们得到值1,2,3 ...列中的10个。
然后=AVERAGE(_xyz)
或=MAX(_xyz)
等公式起作用(各自的结果为5.5和10)。同样的等效eval函数,给定命名范围的名称(此处为" _xyz")和相应的函数(平均值或最大值):=eval("AVERAGE(_xyz)")
返回5.5,=eval("MAX(_xyz)")
返回10到目前为止一切顺利。
现在我将一个新的命名区域_xyz2定义为:
名称:_xyz2
范围:Sheet1
指:=EVALUATE("_xyz*_xyz")
如果在Sheet1中创建一个数组公式(作为垂直的1列行)并使用公式= _xyz2
(然后按Ctrl-Shift-Enter),我们得到值1,4,9 ...列中的100(即_xyz值的平方)。
=AVERAGE(_xyz2)
或=MAX(_xyz2)
等公式都运行良好(各自的结果为38.5和100),然而 eval函数不再有效:公式如{ {1}}和=eval("AVERAGE(_xyz2)")
现在返回#VALUE!。
我尝试过其他类型的eval函数。例如:
=eval("MAX(_xyz)")
...希望Function eval2(str As String) As Variant
eval2 = Application.WorksheetFunction.Average(ActiveSheet.Evaluate(str))
End Function
可行,但它不会(=eval2("_xyz2")
效果很好)。
是否有一个函数,Excel或VBA,它接受字符串" _xyz2"作为输入并返回适当的结果(在我们的例子中,平均值和最大值函数为38.5和100)?
答案 0 :(得分:1)
如果_xyz2定义为=_xyz*_xyz
,则对我有效,但如果定义为=EVALUATE("_xyz*_xyz")
则不行。
我怀疑这会导致评估无法自行调用的问题