Excel VBA 変数に格納できる最大値 (数値) は何ですか?

Excel VBA 変数に格納できる最大値 (数値) は何ですか?

Microsoft Office Excel 2007 を使用しています。

125000000000000 という数字があるとします。

Dim value1 as long

value1 = CLng(copyrng2.value)

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

上記のコードはオーバーフローのため失敗します。

その数値を Excel (VBA) 変数に保存できますか? できない場合は、計算を実行できる形式 (Integer、Long など) で保存するにはどうすればよいでしょうか?

答え1

既存の答えは、ダブルデータ型。これで問題は解決しました。次に技術的な詳細をいくつか説明します。

Double データ型が格納できる最大の数値 (Excel が処理できる最大の数値でもある) は 1.79769313486231570 • 10 308です。ただし、セルに入力できる最大の数値 (数式なし) は 9.99999999999999 • 10 307です。これほど大きな数値を扱う場合、精度がかなり低下することに注意してください。これほど大きな数値に比較的小さな数値を加算しても、何も起こらない可能性が高くなります。浮動小数点は少し奇妙になることがあります。

Long データ型の最大サイズは、Double の範囲と比較するとほんのわずかです。符号付き 64 ビット整数は、最大 9,223,372,036,854,775,807 までしか扱えません。少なくとも、整数のみを扱っている限り、そこで丸めを行っても何も失われないことが保証されます。

出典:Excel の仕様と制限データ型の概要

答え2

Excel は 15 桁までしか保存できません。最大数は 999999999999999 です。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)

注記: 扱っている数値が大きい場合 (125000000000000)、小数点以下を保存しようとすると、Excel はその数値を小数点第 1 位に丸めるようです。

関連情報