Excel 对命名范围上的函数求值,这些函数本身通过“求值”定义

Excel 对命名范围上的函数求值,这些函数本身通过“求值”定义,excel,excel-2010,evaluate,named-ranges,vba,Excel,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 经营范围:第1页 参考:=行

在Excel 2010中

给定一个命名范围的名称,我试图计算这个命名范围上的公式,而它本身已经通过evaluate定义。最好举个例子:

使用此vba函数:

Function eval(str As String) As Variant
    eval = ActiveSheet.Evaluate(str)
End Function
并定义命名范围_xyz(公式选项卡>名称管理器,或Alt、I、N、D)(此处下划线是为了避免以后与单元格名称冲突):

名称:_xyz

经营范围:第1页

参考:
=行(Sheet1!$A$1:$A$10)

如果使用公式
=\u xyz
(然后按Ctrl-Shift-Enter键)在Sheet1中的某个位置创建一个数组公式(作为垂直的1列行),我们将得到值1、2、3。。。10在一列中

然后,诸如
=平均值(_xyz)
=最大值(_xyz)
之类的公式起作用(各自的结果为5.5和10)。给定指定范围的名称(此处为“xyz”)和相应的函数(平均值或最大值):
=eval(“平均值(xyz)”)
返回5.5,而
=eval(“最大值(xyz)”)
返回10。到目前为止还不错

现在我将一个新的命名范围_xyz2定义为:

名称:_xyz2

经营范围:第1页

指:
=EVALUATE(“\u xyz*\u xyz”)

如果使用公式
=\u xyz2
(然后按Ctrl-Shift-Enter键)在Sheet1中的某个位置创建一个数组公式(作为垂直的1列行),我们将得到值1、4、9。。。100(即_xyz值的平方)

=AVERAGE(_xyz2)
=MAX(_xyz2)
这样的公式都能很好地工作(各自的结果为38.5和100),但是
=eval(“AVERAGE(_xyz2)”)和
=eval(“MAX(_xyz)”
这样的公式现在返回#值

我尝试过其他类型的求值函数。例如:

Function eval2(str As String) As Variant
    eval2 = Application.WorksheetFunction.Average(ActiveSheet.Evaluate(str))
End Function
。。。希望
=eval2(“\u-xyz2”)
能起作用,但它不起作用(
=eval2(\u-xyz”)


是否有一个函数,Excel或VBA,它将字符串“_xyz2”作为输入并返回适当的结果(在我们的示例中,平均值和最大值函数分别为38.5和100)?

如果将_xyz定义为
=_xyz*_xyz
,但如果定义为
=EVALUATE(_xyz*_xyz”)


我怀疑这会碰到Evaluate无法调用自身的问题

我同意如果xyz2被定义为=xyz*xyz,它确实有效。但是我需要以某种方式将这个公式链接到一个单元格值,这样_xyz2的定义会随着单元格值的改变而自动更新。这就是为什么我首先要使用EVALUATE,我不知道如果没有EVALUATE,如何为_xyz2生成一个类似=_xyz*_xyz的定义。是的,我可以走vba路线,在给定单元格每次更改时捕获工作表更改事件和更改_xyz2定义,但我试图避免这种方法。我不确定我是否理解:如果_xyz指向某个范围,则对_xyz2(定义为=_xyz*_xyz)的任何引用将在_xyz范围内的单元格更改时更新。您确定需要使用Evaluate吗?很抱歉造成混淆,我要动态更新的是_xyz2的定义。理想情况下,我希望在单元格中输入“_xyx*_xyz”,以某种方式链接到命名范围_xyz2。然后任意更改这个单元格值,比如说“ln(xyx)+sin(xyz)”,我希望立即用这个新的单元格值更新xyz2定义。EVALUATE允许我这样做,但也有其他限制,特别是它可能无法调用自己,正如您所提到的,我不知道如何将第三个命名为范围引用_xyz2定义为,比方说,=xyz2*5。这似乎不起作用。我认为您想要做的是突破一个基本限制,即单个Excel单元格只能包含标量值,而不能包含数组/向量(没有很多技巧)。如果xyz及其后代总是一个标量,那么我认为它是可行的。