Excel 对命名范围上的函数求值,这些函数本身通过“求值”定义
在Excel 2010中 给定一个命名范围的名称,我试图计算这个命名范围上的公式,而它本身已经通过evaluate定义。最好举个例子: 使用此vba函数: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页 参考:=行
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及其后代总是一个标量,那么我认为它是可行的。