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 までしか扱えません。少なくとも、整数のみを扱っている限り、そこで丸めを行っても何も失われないことが保証されます。
答え2
Excel は 15 桁までしか保存できません。最大数は 999999999999999 です。16 桁の数字を入力しようとすると、16 桁目から最後の数字が 0 で切り上げられます。
答え3
答え4
変数型を使用しますDecimal
。数値を宣言することはできませんDecimal
が、変数に格納することはできますVariant
。
Dim value1 as Variant
value1 = CDec(copyrng2.value)
注記: 扱っている数値が大きい場合 (125000000000000)、小数点以下を保存しようとすると、Excel はその数値を小数点第 1 位に丸めるようです。