- ベストアンサー
long型 #が付く場合とつかない場合の違い
Sub test() Dim i As Long i = 2000000000 i = 3000000000# End Sub こうすると、2000000000が末尾にシャープはつかないのに、 3000000000だとシャープが付きます。 なぜですか?
- みんなの回答 (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
その他の回答 (1)
- yaritsusozai
- ベストアンサー率59% (50/84)
long型の記憶領域のサイズは4バイトなので、-2,147,483,648から2,147,483,647までが有効範囲です。 試しに、 i=2147483647 i=2147483648 と記述して、違いを確認してみてください。
お礼
回答頂きありがとうございました。
お礼
回答頂きありがとうございました。