评估命名范围上的函数,它们通过EVALUATE

时间:2017-03-20 14:11:05

标签: excel excel-vba excel-2010 evaluate named-ranges vba

在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)?

1 个答案:

答案 0 :(得分:1)

如果_xyz2定义为=_xyz*_xyz,则对我有效,但如果定义为=EVALUATE("_xyz*_xyz")则不行。
我怀疑这会导致评估无法自行调用的问题