Microsoft Office Excel2007を使用しています。
私の番号が12500000000000だとします。
Dim value1 as long
value1 = CLng(copyrng2.value)
'where copyrng2 is a range (cell) variable containing 12500000000000
上記のコードはオーバーフローのため失敗します。
その数値を任意のExcel(VBA)変数に保存できますか?そうでない場合は、できれば計算を実行できる形式(整数、長整数など)で保存するにはどうすればよいですか?
Doubleデータ型を使用する必要があるという点で、既存の答えは正しいです。これで問題が解決しました。次に、技術的な詳細をいくつか紹介します。
Doubleデータ型が格納できる最大数(Excelが処理できる最大数)は1.79769313486231570•10です。308。ただし、(数式なしで)セルに入力できる最大数は9.99999999999999•10です。307。非常に大きな数で作業していると、かなりの精度が失われることに注意してください。その大きさのものに比較的小さな数を追加すると、何もしない可能性が高くなります。 浮動小数点は少し奇妙になる可能性があります。
Longデータ型の最大サイズは、Doubleの範囲と比較して海の低下です。符号付き64ビット整数は、最大9,223,372,036,854,775,807までしか使用できません。少なくとも、整数のみを扱っている限り、そこでの丸めで何も失うことはありません。
出典: Excelの仕様と制限 、 データ型の概要
Decimal
変数タイプを使用します。数値をDecimal
として宣言することはできませんが、Variant
変数に格納することはできます。
Dim value1 as Variant
value1 = CDec(copyrng2.value)
注:処理している大きな数値(12500000000000)で小数を格納しようとすると、Excelはその数値を小数点以下1桁に丸めるように見えます。
Excelは15桁しか保存できません。最大の数値は999999999999999です。16桁の数値を入力しようとすると、最後の数値が16桁目から0で丸められます。