我可以在 Excel VBA 变量中存储的最大值(数字)是多少?

我可以在 Excel VBA 变量中存储的最大值(数字)是多少?

我正在使用 Microsoft Office Excel 2007。

假设我有数字 12500000000000。

Dim value1 as long

value1 = CLng(copyrng2.value)

'where copyrng2 is a range (cell) variable containing 12500000000000

上述代码将会因为溢出而失败。

我可以将该数字存储在任何 Excel (VBA) 变量中吗?如果不行,我该如何存储它,最好采用可以执行计算的格式(整数、长整型等)?

答案1

现有的答案是正确的,因为您需要使用双倍的数据类型。问题解决了,现在我将介绍一些技术细节。

Double 数据类型可以存储的最大数字(也是 Excel 可以处理的最大数字)是 1.79769313486231570 • 10 308。但是,您可以在单元格中输入的最大数字(不使用公式)是 9.99999999999999 • 10 307。请注意,当您处理如此巨大的数字时,您将损失大量精度 - 将一个相对较小的数字添加到如此大的数字上很可能什么也不做。浮点可能会有点奇怪。

与 Double 的范围相比,Long 数据类型的最大大小只是沧海一粟;有符号的 64 位整数最多只能达到 9,223,372,036,854,775,807。至少可以保证在那里舍入不会有任何损失,只要您只处理整数即可。

资料来源:Excel 规范和限制数据类型摘要

答案2

Excel 只能存储 15 位数字。最大数字为 9999999999999999。如果您尝试输入 16 位数字,它会从第 16 位开始将最后一个数字四舍五入为 0。

答案3

你需要使用双倍的而不是长的。 和B2喜欢:

在此处输入图片描述

此代码将引发错误:

Sub dural()
    Dim d As Long
    d = Range("B2").Value
End Sub

但是此代码不会:

Sub BigNumber()
    Dim d As Double
    d = Range("B2").Value
    MsgBox d
End Sub

在此处输入图片描述

答案4

使用Decimal变量类型。您不能将数字声明为,Decimal但可以将其存储在Variant变量中。

Dim value1 as Variant
value1 = CDec(copyrng2.value)

笔记: 对于要处理的较大数字(12500000000000),如果您尝试存储小数,Excel 似乎会将该数字四舍五入到小数点后 1 位。

相关内容