Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba excel公式的递归树求值_Vba_Excel_Dependencies - Fatal编程技术网

Vba excel公式的递归树求值

Vba excel公式的递归树求值,vba,excel,dependencies,Vba,Excel,Dependencies,我有一个顶部单元格,其中包含一个引用其他单元格的公式。 这些单元格包含引用其他单元格的公式 我想计算顶部的单元格,同时在整个计算树中用另一个单元格(如A5)替换出现的每个单元格(如A4) 我知道您可以浏览受抚养人树,但在执行替换后是否可以评估公式?是的,您可以使用应用程序。评估评估公式。看这个例子 Sub Sample() Dim frmla As String frmla = Range("E1").Formula frmla = Replace(frmla, "A

我有一个顶部单元格,其中包含一个引用其他单元格的公式。 这些单元格包含引用其他单元格的公式

我想计算顶部的单元格,同时在整个计算树中用另一个单元格(如A5)替换出现的每个单元格(如A4)


我知道您可以浏览受抚养人树,但在执行替换后是否可以评估公式?

是的,您可以使用
应用程序。评估
评估公式。看这个例子

Sub Sample()
    Dim frmla As String

    frmla = Range("E1").Formula

    frmla = Replace(frmla, "A2", "A1")

    MsgBox Application.Evaluate(frmla)
End Sub

为什么不将计算设置为手动,对单元格进行更改,然后调用Application.Calculate
使用Excel内置的依赖项跟踪功能似乎更简单、更安全,而不是试图重新发明它。

好的,但它是否构成了一个新的依赖项跟踪功能?这是关键。假设A2,从你们的例子来看,取决于A4,我想计算E1,用A5替换A4,实际上,如果我有这个值,我可以用结果替换它。。。。但我非常担心这可能会破坏数组公式等。我的意思是,我可以链接这些调用吗?@Siddarth,是的,但除了非常简单的情况外,很难遍历依赖关系树:想想间接、偏移、VLOOKUP、命名范围、命名公式,易变的自定义项等+1@charleswillams:我再次同意你的观点:)困难但并非不可能;)我希望能够保持原来的配方。我喜欢这个公式,但是我想用n个参数来代替1个参数。显然,嵌套调用的级别并不惊人(如4或5),但足以让手工制作的解决方案(复制所有相关单元格的n倍)变得痛苦。必须有一个库用于excel中的依赖项遍历。excel是关于依赖关系图的,如果没有任何依赖关系图的话,我会感到饥饿和恐惧……我不理解这个问题:为什么有人想做一件困难的工作来复制excel已经做过的事情?我不想做它想做的事,但我确实想做99%。我只想更改它在计算单元格的表达式树时使用的一些终端节点的值。这就是为什么我希望有一种方法可以利用它,只改变我感兴趣的部分,但我不知道怎么做。你可以改变数据点,使用范围。计算或表格。计算或应用。计算,阅读计算结果并将其存储在某处。这将比尝试行走、更改和评估依赖树更容易、更快、更可靠。这类事情不时会出现。请参见此处的注释:。基本上,查尔斯是对的。像
INDIRECT
和VBA UDF之类的东西意味着您必须使用运行时输入解析和计算公式,以便在一般情况下遍历依赖项。但Excel就是这样做的@的确,这就是为什么我希望能够重用它的一部分。我可能会找到一个库,让我这样做,同时我只是复制细胞和最小化树的深度。这严重拖累了我对工作表未来发展的思考,但这是lifenicolas,您还没有真正说明您的应用程序是什么。如果只想在它所依赖的一个单元格中为多个值重新计算“顶部单元格”,那么Excel已经有了一个名为“数据表”的内置功能来实现这一点。这是“数据”菜单下“假设”分析的一部分。还可以看到:@jtolle这似乎就是我要寻找的精神。没有公式本身的重复,只是不同的评估上下文。我需要更深入地了解。thks