我正在使用 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 位數。最大的數字為 999999999999999。如果您嘗試輸入 16 位數字,它會從第 16 位開始將最後一個數字四捨五入為 0。
答案3
答案4
使用Decimal
變數類型。您不能將數字聲明為,Decimal
但可以將其儲存在Variant
變數中。
Dim value1 as Variant
value1 = CDec(copyrng2.value)
筆記: 對於您正在處理的大數字 (12500000000000),如果您嘗試儲存小數,Excel 似乎會將該數字四捨五入到小數點後一位。