首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel:解析单元格并创建函数

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

Stack Overflow用户
提问于 2010-11-28 10:28:19
回答 2查看 930关注 0票数 1

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

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)。

这有可能吗?有人知道怎么写这个函数吗?

我不能在不同的细胞中分割值,因为它们有几百个。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-25 13:06:31

这可以用VBA函数EVALUTE来完成。

简单的例子:

代码语言:javascript
复制
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

代码语言:javascript
复制
=ev(A2,C2,D2,E2)

返回计算值。

您需要使用一个ParamArray,而不是变量A、B、C,以便允许任意数量的变量。

一个稍微完整的版本:

代码语言:javascript
复制
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中的变量名称

代码语言:javascript
复制
=ev(A2,C1:E1,C2:E2)
票数 0
EN

Stack Overflow用户

发布于 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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4296355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档