【问题标题】:how to calc 3*2*5+6 in a cell with out Equal [duplicate]如何在不相等的单元格中计算 3 * 2 * 5 + 6 [重复]
【发布时间】:2021-12-08 10:02:59
【问题描述】:

可以计算表达式的函数,例如 (2 * 5 + 6=16

10*3*0.75=22.5) 不等同。

我用 execl 做的,但它不兼容

=IFERROR(LEFT(G2170,FIND("*",SUBSTITUTE(UPPER(G2170),"C","*"))-1)*RIGHT(G2170,LEN(G2170)-FIND("*",SUBSTITUTE(UPPER(G2170),"C","*"))),IF(LEN(G2170)=10,LEFT(G2170,1)*MID(G2170,3,2)+MID(G2170,6,2)+MID(G2170,9,2),IF(LEN(G2170)=8,LEFT(G2170,1)*MID(G2170,3,3)+RIGHT(G2170,2),IF(LEN(G2170)=7,LEFT(G2170,1)*MID(G2170,3,2)+RIGHT(G2170,2),IF(LEN(G2170)=9,LEFT(G2170,2)*MID(G2170,4,1)*RIGHT(G2170,4),IF(LEN(G2170)=5,LEFT(G2170,1)*MID(G2170,3,1)*RIGHT(G2170,1)))))))

【问题讨论】:

标签: excel vba


【解决方案1】:

您可以编写一个简单的用户定义函数来评估这些字符串:

Option Explicit

Public Function EvaluateString(ByVal Formula As String)
    EvaluateString = Application.ThisCell.Parent.Evaluate(Formula)
End Function

代码需要在一个模块中

它可以用作公式,如EvaluateString(A1)A1 可以是 Excel 能够评估的任何公式。如果公式包含其他公式,例如 SUM 包含单词,则无论您的 Excel 使用哪种本地化版本,Evaluate 都必须是英文公式版本,仅处理英文公式。

如果公式包含对其他单元格的引用,您可能需要创建此函数Application.Volatile。如果肯定没有参考,请避免这种情况。可变函数将对您的工作表产生很大的计算影响(每次在工作表上计算任何内容时都会计算得到)。

【讨论】:

  • 仅供参考,这使用默认的Application.Evaluate,如果没有单元格引用,这很好,但任何单元格引用总是引用 ActiveSheet,因此当不同的工作表处于活动状态时结果可能是错误的。也许Application.ThisCell.Parent.Evaluate() 可能更安全(使用 UDF 将上下文强制到工作表)?
  • @TimWilliams 绝对有道理。我确定了答案。谢谢。
  • ...确实如此。参考文献在Further note to worksheet related evaluation发布添加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多