Excel VBA – 以VBA计算
简单的问题。 我有一个string表示一个公式。
喜欢
Dim formula As String formula = Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000) 'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)" MsgBox (formula) 'Evaluate(formula) not working sadly
现在我想在VBA中进行评估并返回结果。 我没有得到评估工作的计算。
processFormula是一个生成公式的函数,它返回一个String。 所以一个string被放入replace函数,用一个数字代替'##'。 这里没什么神奇的。 关于debugging器公式是一个带有上述值的string(它直接从debugging器复制)。
有一个简单而简单的方法吗?
谢谢,我希望它不是重复的。
你应该用小数点replace小数点的逗号
Dim formula As String formula = replace(Replace(processFormula(2016, 9000, constants, formulaRow), "##", 9000),",",".") 'formula has the value "(1007,27*((9000 - 8820)/10000)+1400)*((9000 - 8820)/10000)" MsgBox (formula) Evaluate(formula) 'should work now ;o)
应该没有问题:
Sub eval() MsgBox Evaluate((100 * 20) / 30 * 500) End Sub
它与等效的单元格公式相匹配。 注意这不是一样的:
(100*20)/(30*500)
编辑#1:
这也适用:
Sub eval2() Dim s As String s = "((100 * 20) / 30 * 500)" MsgBox Evaluate(s) End Sub
使用下面的子。
Sub Calculate() Dim x As Double x = ((100 * 20) / 30 * 500) Range("A1") = x MsgBox x End Sub