NOY*_*OYB 3 vba type-conversion
如何将字符串形式的分数转换为数值?
strFrac = "3/2"
Run Code Online (Sandbox Code Playgroud)
目前通过拆分字符串来获取分子和分母。
Dim x() As String
x = Split(strFrac, "/")
Run Code Online (Sandbox Code Playgroud)
然后使用Val()和划分。
v = Val(x(0)) / Val(x(1))
Run Code Online (Sandbox Code Playgroud)
结果:v = 1.5
有没有更直接的方法?Val("3/2")如果类似的东西能起作用就好了。
你要Application.Evaluate
Sub TEST()
Dim v As Double
Dim strFrac As String
strFrac = "3/2"
v = Application.Evaluate(strFrac)
Debug.Print v
End Sub
Run Code Online (Sandbox Code Playgroud)
Val并没有真正将字符串转换为数字。当遇到非数字字符时,它会停止读取字符串,并返回Double表示从字符串中提取的数值的 。
这对您的目的“有效”,但CDbl转换函数会更合适。
如果您使用 Excel,Scott 的答案会利用 Excel 的计算引擎来逐字逐句地查找Evaluate字符串,这就是您要查找的内容。其副作用是字符串现在可以包含 Excel 函数和单元格引用,并且结果仍将被评估。
如果计算返回错误值(例如Evaluate("12/0")),那么如果将结果直接分配给Double. 相反,将结果分配给 a Variant,并使用该函数验证它不会返回错误IsError- 这将使您避免运行时错误 13 /“类型不匹配”。
如果您不在 Excel 中,则无法执行此操作 - 并且您也不想为此引用 Excel 对象模型 - 因此您的解决方案确实是最简单的。