我有一些单元格,例如,这个值:
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)。
这有可能吗?有人知道怎么写这个函数吗?
我不能在不同的细胞中分割值,因为它们有几百个。
谢谢。
发布于 2011-02-25 13:06:31
这可以用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)发布于 2010-11-29 05:19:52
萨拉丁·阿卡拉的评论指出了你最简单的解决办法。为A、B和C定义一些命名公式(参见Excel帮助主题“使用名称”),然后任何其他单元格都可以包含使用这些命名值的公式。
如果这还不够,例如,如果您真的想在一个单元格中查看和编辑公式,然后在另一个单元格中计算公式的值,则可以使用Excel的内置计算器,而不必自己解析公式。最简单的方法是通过Evaluate对象的Application方法。(再一次,请看帮助。)Charles在他的网站上有一个计算Excel表达式的示例代码:http://www.decisionmodels.com/calcsecretsh.htm
除此之外,您还可以使用Application.Evaluate计算带有(标量)参数的表达式,而无需定义任何名称,也不需要实际解析公式,只需进行一些基本的字符串替换。网络上有几个例子,但道格詹金斯的一个很好的例子是:http://newtonexcelbach.wordpress.com/2008/04/22/evaluate-function/
https://stackoverflow.com/questions/4296355
复制相似问题