web-dev-qa-db-ja.com

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

Microsoft Office Excel2007を使用しています。

私の番号が12500000000000だとします。

Dim value1 as long

value1 = CLng(copyrng2.value)

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

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

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

3
D.chan

Doubleデータ型を使用する必要があるという点で、既存の答えは正しいです。これで問題が解決しました。次に、技術的な詳細をいくつか紹介します。

Doubleデータ型が格納できる最大数(Excelが処理できる最大数)は1.79769313486231570•10です。308。ただし、(数式なしで)セルに入力できる最大数は9.99999999999999•10です。307。非常に大きな数で作業していると、かなりの精度が失われることに注意してください。その大きさのものに比較的小さな数を追加すると、何もしない可能性が高くなります。 浮動小数点は少し奇妙になる可能性があります。

Longデータ型の最大サイズは、Doubleの範囲と比較して海の低下です。符号付き64ビット整数は、最大9,223,372,036,854,775,807までしか使用できません。少なくとも、整数のみを扱っている限り、そこでの丸めで何も失うことはありません。

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

2
Ben N

Longではなく、Doubleを使用する必要があります。 B2のように:

enter image description here

このコードはエラーをスローします:

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

enter image description here

0
Gary's Student

Decimal変数タイプを使用します。数値をDecimalとして宣言することはできませんが、Variant変数に格納することはできます。

Dim value1 as Variant
value1 = CDec(copyrng2.value)

注:処理している大きな数値(12500000000000)で小数を格納しようとすると、Excelはその数値を小数点以下1桁に丸めるように見えます。

0
ChrisB

Excelは15桁しか保存できません。最大の数値は999999999999999です。16桁の数値を入力しようとすると、最後の数値が16桁目から0で丸められます。

0
Raju Ghimire