非易失性评估

时间:2019-05-08 08:21:20

标签: vba

我有一个工作表,其中所有方程式都在其中。在其他工作表中,我想计算不同变量的函数值。假设在Sheet2中,我在A1中的公式为= 125 * B1 ^ 2 + 20 * B1 + 222。在工作表A1的Sheet1中,我具有= eval(SUBSTITUTE(FORMULATEXT(Sheet2!A1),“ B1”,“ ”&CELL(“ address”,C10)))),所以基本上我更改了变量的值单元格C10中有不同。

我的评估函数是:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Application.ThisCell.Parent.Evaluate(Ref)
End Function

问题是计算需要永远的时间,而我想在没有Volatile选项的情况下获得相同的结果,但是不知道如何实现。

1 个答案:

答案 0 :(得分:2)

使用自Excel 4.0遗留下来的secret, built in EVALUATE function,而不是创建自定义Eval函数

创建一个名为“ EvaluatedFormula”之类的命名范围,并将“ Refers to:”设置为=EVALUATE(SUBSTITUTE(FORMULATEXT(Sheet2!$A$1),"B1","C" & ROW()))

然后,在单元格A10中,只需键入=EvaluatedFormula,然后输入BOOM!完成。这可以在不到一秒钟的时间内计算出9,000多个行-比您的Eval UDF

快得多