如何评估Excel

时间:2015-07-08 21:48:15

标签: excel vba formula units-of-measurement evaluate

如果我在单元格中键入公式1/4*pi()*($A$1)^2作为字符串并假设我的值为$ A $ 1,我在第三个单元格中使用以下VBA函数来评估公式:

Public Function E(byval TextFormula as String) as Variant
  E = Evaluate(TextFormula)
End Function  

有没有办法使用数学字符,如•,√,¼,π,²等,这样我的打字公式看起来更合适?甚至将'['和']'翻译为'('和')'。我可以使用REPLACE()函数为简单字符迭代数组替换但是像π这样的扩展字符呢?

对于非常敏锐的宏观者......

如同在(2*3) + (2.5*4)中显示中间步骤(迭代),在第一次迭代中评估为6 + 10,然后在下一次迭代中评估16。 Asside:我希望迭代在每组添加/减少之前停止,因为我有时想知道单个评估项的相对大小是什么,以查看我的公式的哪一部分控制结果。

对于超级天才......

混合单位怎么样?例如输入560{lbs}/[1.23{m}*3.4{'}]并将结果以###{psf}为例。我认为单位可以用下划线描述,例如34_kN,但我认为像34{kN/m^2}这样的复合单位需要开始和结束描述。需要有一种方法来强制输出到所需的单位(即mm而不是in),比如可能在工作表中提前设置所需的单位,然后它至少会尝试转换为其中一个单位。我想在这个阶段你会向我收取代码费用;)

我喜欢使用Excel进行工程计算,因为我只使用更简单的公式(没有微积分!)而且我不想在Excel和Mathcad应用程序之间不断切换但只使用一个。

肖恩

1 个答案:

答案 0 :(得分:0)

那些命令很高。以下子项可能会让您对第一个问题有所了解:

Sub test()
    Dim R As Range
    Set R = Range("A1")
    R.Value = "A = pr2"
    R.Characters(5, 1).Font.Name = "Symbol"
    R.Characters(7, 1).Font.Superscript = True
End Sub

运行它,然后查看A1的内容

就你的第二个问题而言 - 确定你可以做到,但你需要编写一个完整的表达式解析器。从头编写一个是相当复杂的(至少有几百行代码),最好通过使用类创建自定义树数据类型然后编写递归下降解析器来将字符串解析为表达式树来完成。虽然我没有时间也没有这样做的倾向,但是可行。

我不太确定你的最后一个问题是什么,尽管我的直觉反应是它比你的第二个问题容易,因为不需要真正的解析,并且很容易创建一个字典转换因子。