在Excel宏中将字符串转换为长整型

3
我该如何在Excel宏中将字符串转换为长整型? CLng会给我类型不匹配的错误。
Dim wStr As String
Dim w As Long

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

不匹配是因为“=RAND() * 0.3 + 0.35”不能被解释为一个长整型。CLng只能用于已经是数字的字符串,比如“0.35”。你需要先将表达式“=RAND()…”计算为一个数字,就像RonnieDickinson建议的那样。 - Mathias
2个回答

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)内返回一个单精度浮点数,当舍入为长整型时,以50%的概率返回0或1。
为什么不使用:

w = Rnd()

或者

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

或者

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

或者我漏掉了其他的原因?

4

尝试使用以下公式计算w。

w = CLng(Evaluate(wStr))

或者不要试图使用“Excel公式”,直接使用VBA及其随机函数对应项。
w = CLng(Rnd() * 0.3 + 0.35)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接