Excel:parsing单元格并创build一个函数

我有一些单元格,例如,这个值:

5 * A-2 * B-4 * C

在其他单元格中,我会把A,B和C的值。我想使额外的单元格,将计数的价值。 所以,举例来说,如果在某些单元格中写入A的值是2,B的值是3,C的值是1,那么我想要一个额外的单元格来计算并将值0(这就是结果5 * 2-2 * 3-4 * 1)。 可能的variables是A,B和C,但它们不必包含在每个单元格中(例如,某个单元格可能只是5 * A-3 * C)。

那可能吗? 有谁知道如何编写该function?

PS我不能在不同的单元格中分解manualy值,因为有数百个。

谢谢。

这可以通过VBA函数EVALUTE完成

简单的例子:

 Function ev(f As Variant, A As Range, B As Range, C As Range) As Variant Dim s As String s = f s = Replace(s, "A", "~A~") s = Replace(s, "B", "~B~") s = Replace(s, "C", "~C~") s = Replace(s, "~A~", A.Address) s = Replace(s, "~B~", B.Address) s = Replace(s, "~C~", B.Address) ev = Evaluate(s) End Function 

例如,如果您的expression式在A2中,并且A,B,C的值在C2:E2中

 =ev(A2,C2,D2,E2) 

返回计算的值

你会想使用一个ParamArray而不是A,B,C的variables值来允许任意数量的variables。

稍微更完整的版本:

 Function ev(expr As Variant, VarNames As Range, varValues As Range) As Variant Dim s As String Dim i As Long s = expr For i = 1 To VarNames.Columns.Count s = Replace(s, VarNames.Cells(1, i), "~" & VarNames.Cells(1, i) & "~") Next For i = 1 To VarNames.Columns.Count s = Replace(s, "~" & VarNames.Cells(1, i) & "~", varValues.Cells(1, i).Address) Next ev = Evaluate(s) End Function 

用法:

与上面相同的数据加上C1:E1中的variables名称

 =ev(A2,C1:E1,C2:E2) 

萨拉丁·阿卡拉的评论指出了最简单的解决scheme。 为A,B和C定义一些命名公式(请参阅Excel帮助主题“使用名称”)。然后,任何其他单元格可以包含使用这些命名值的公式。

如果这还不够,例如,如果您确实希望在单元格中查看和编辑公式,然后在另一个单元格中计算公式的值,则可以使用Excel的内置评估程序,而无需亲自分析公式。 最简单的方法是通过Application对象的Evaluate方法。 (同样,请参阅帮助。)Charles Williams在其网站上有一个示例代码,用于评估Excelexpression式: http : //www.decisionmodels.com/calcsecretsh.htm

除此之外,您可以使用Application.Evaluate通过(标量)参数计算expression式,而无需定义任何名称,并且仍然不需要实际parsing公式,只需进行一些基本的stringreplace即可。 在网上有几个例子,但Doug Jenkins的一个很好的例子是: http : //newtonexcelbach.wordpress.com/2008/04/22/evaluate-function/