• ベストアンサー

long型 #が付く場合とつかない場合の違い

Sub test() Dim i As Long i = 2000000000 i = 3000000000# End Sub こうすると、2000000000が末尾にシャープはつかないのに、 3000000000だとシャープが付きます。 なぜですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

長整数型(Long)は4バイト(32ビット)で、表せる数値の範囲は、 -2^31~2^31-1 = -2,147,483,648~2,147,483,647 です。 まず、「#」はDouble(倍精度浮動小数点型)を表す型宣言文字です。 定数に「#」が付いて、VBEはDouble型と解釈しています。 ここで、下のように「Option Explicit」を無効にして、 ・「test1」を行うと、変数iはLong型の宣言をしていますが、Double型の数値を代入しているのでオーバーフローします。 ・「test3」のように「Dim文を無効にする」とLong型からDouble型に自動的に変わります。 型宣言文字は昔からありますが、今では、「Double型ですよ」と教えてくれている程度に捉えています。「Option Explicit」は必ず有効にしています。 'Option Explicit Sub test()   Dim i As Long   i = 2147483647     MsgBox TypeName(i) '→ Long End Sub Sub test1()   Dim i As Long   i = 2147483648#     MsgBox TypeName(i) '→ オーバーフロー End Sub Sub test2()   'Dim i As Long   i = 2147483647     MsgBox TypeName(i) '→ Long End Sub Sub test3()   'Dim i As Long   i = 2147483647     MsgBox TypeName(i) '→ Long   i = 2147483648#     MsgBox TypeName(i) '→ Double End Sub

gtobyqddudwi
質問者

お礼

回答頂きありがとうございました。

その他の回答 (1)

回答No.1

long型の記憶領域のサイズは4バイトなので、-2,147,483,648から2,147,483,647までが有効範囲です。 試しに、 i=2147483647 i=2147483648 と記述して、違いを確認してみてください。

gtobyqddudwi
質問者

お礼

回答頂きありがとうございました。