在excel宏中将字符串转换为long

时间:2011-10-03 02:41:22

标签: excel excel-vba vba

如何在excel宏中将字符串转换为long。 CLng给出了类型不匹配错误

Dim wStr As String
Dim w As Long

wStr = "=RAND() * 0.3 + 0.35"
w = CLng(wStr)

2 个答案:

答案 0 :(得分:4)

尝试以下w的公式。

w = CLng(Evaluate(wStr))

或者忘记尝试使用“Excel公式”,然后直接使用随机函数对应的VBA

w = CLng(Rnd() * 0.3 + 0.35)

答案 1 :(得分:4)

错误的根本原因是CDbl期望数字值或看起来的字符串就像一个数字。字符串"=RAND() * 0.3 + 0.35"本身看起来不像数字,即使它评估到数字。

你到底想要实现的目标是什么?

如果要获得公式= RAND()* 0.3 + 0.35的长整数结果,请使用

Dim w as Long
w = Rnd() * 0.3 + 0.35

如果要模拟单元格公式,请使用

Dim w as Long
w = Application.Evaluate("=RAND() * 0.3 + 0.35")

至于公式本身,为什么这个构造?它将在[0.35,0.65]范围内返回Single,当舍入为Long时,将返回0或1,每个概率为50%。
为什么不使用

w = Rnd()

w = Application.Evaluate("=RAND()")

w = Application.WorksheetFunction.RandBetween(0, 1)

还是有其他原因我错过了?