![我可以在 Excel VBA 变量中存储的最大值(数字)是多少?](https://linux22.com/image/1484129/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Excel%20VBA%20%E5%8F%98%E9%87%8F%E4%B8%AD%E5%AD%98%E5%82%A8%E7%9A%84%E6%9C%80%E5%A4%A7%E5%80%BC%EF%BC%88%E6%95%B0%E5%AD%97%EF%BC%89%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
我正在使用 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
答案4
使用Decimal
变量类型。您不能将数字声明为,Decimal
但可以将其存储在Variant
变量中。
Dim value1 as Variant
value1 = CDec(copyrng2.value)
笔记: 对于要处理的较大数字(12500000000000),如果您尝试存储小数,Excel 似乎会将该数字四舍五入到小数点后 1 位。