Excel:解析单元格并创建函数

时间:2010-11-28 10:28:20

标签: excel

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

  

5 * A-2 * B-4 * C

在其他单元格中,我会为A,B和C设置值。我想制作额外的单元格来计算值。因此,举一个例子,如果在某些单元格中写入A的值为2,B的值为3,C的值为1,我想要一个额外的单元格来计算并将值0设置为(这就是结果为5 * 2-2 * 3-4 * 1)。可能的变量是A,B和C,但它们不必包含在每个单元格中(例如,某些单元格可能只有5 * A-3 * C)。

这可能吗?有谁知道如何写这个功能?

P.S。我不能在不同的单元格中拆分manualy值,因为它们有数百个。

感谢。

2 个答案:

答案 0 :(得分:1)

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

如果这还不够,例如,如果您真的想在单元格中查看和编辑公式,然后在不同的单元格中计算公式的值,则可以使用Excel的内置求值程序而无需解析亲自配方。最简单的方法是使用Evaluate对象的Application方法。 (再次,请参阅帮助。)Charles Williams在他的网站上有示例代码,用于评估Excel表达式:http://www.decisionmodels.com/calcsecretsh.htm

除此之外,您可以使用Application.Evaluate来计算带有(标量)参数的表达式,而无需定义任何名称,并且仍然无需实际解析公式,只需执行一些基本的字符串替换。网上有几个例子,但Doug Jenkins的一个非常好的例子就在这里:http://newtonexcelbach.wordpress.com/2008/04/22/evaluate-function/

答案 1 :(得分:0)

这可以通过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

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

=ev(A2,C2,D2,E2)

返回计算值

您可能希望使用ParamArray而不是A,B,C变量值来允许任意数量的变量。

稍微完整的版本:

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

=ev(A2,C1:E1,C2:E2)
相关问题