我有一些单元格,例如,这个值:
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值,因为它们有数百个。
感谢。
答案 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)