VBA 長整数型(変数の宣言)
In this Article
長整数(Long)データ型変数
VBAのLongデータ型は、整数型よりも大きいデータ値(-2,147,483,648~2,147,483,648)を格納するために使用されます。 整数(小数点以下なし)のみ格納可能です。 Long型変数を宣言するには、Dimステートメント(Dimensionの略)を使用します。
Dim lngA as Long
そして、変数に値を代入するには、単に等号を使用します。
lngA = 30000
これをプロシージャに書くと、次のようになります。
Sub lngExample()
'Long型変数の宣言
Dim lngA as Long
'Long型変数に値を入れる
lngA = 30000
'メッセージボックスの表示
MsgBox lngA
End Sub
上記のコードを実行すると、以下のようなメッセージボックスが表示されます。
超長整数(LongLong)データ型
LongLongデータ型は、64ビット版のMicrosoft Officeでのみ利用可能です。 64ビットマシンで32ビット版のOfficeを実行している場合、このデータ型は使用できません。 9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの範囲の数値をサポートしています。
Dim lngA as LongLong
LongPtr データ型
LongPtrデータ型は、64ビット版のMicrosoft OfficeをサポートするためにVBAに導入されました。 32ビットシステムではLongとして扱われ、64ビットシステムではLongLongとして扱われます。
Dim lngA as LongPtr
注:LongPtrはExcel 2007以前では使用できません。
10進数値とLongデータ型
Long型変数に小数の値を格納することはできません。Long型変数に小数を渡すと、小数は丸められて取り除かれます。 したがって、仮に以下のようなプロシージャを実行したとします。
Sub LngExampleB()
'Long型変数を宣言
Dim lngA as Long
'Long型変数に値を代入
lngA = 3524.12
'メッセージボックスの表示
MsgBox lngA
End Sub
小数点以下の数値は切り捨てられ、次のようなメッセージが返されます。
ところが、この下のコードを見てください。
Sub LngExampleB()
'long型変数の宣言
Dim lngA as Long
'long型変数に値を代入
lngA = 3524.52
'メッセージボックスの表示
MsgBox lngA
End Sub
以下のようなメッセージボックスが返されます(切り上げ)。
十進/倍精度浮動小数点データ型
小数点以下の桁数を格納したい場合は、小数点以下の桁数を許容する変数を宣言する必要があります。 使用できるデータ型は、単精度浮動小数点型(Single)、倍精度浮動小数点型(Double)、通貨型(Currency)の3つです。
Dim sngPrice as Single
Dim dblPrice as Double
Dim curPrice as Currency
Singleデータ型は、doubleやcurrencyデータ型とは若干異なる小数点の丸め方をするので、正確さを期すにはSingleではなく、doubleを使うのが望ましいでしょう。 Doubleは小数点以下12桁まで、CurrencyとSingleは共に小数点以下4桁まで保持可能です。
モジュールレベル、グローバルレベルでの Long型変数の宣言
これまでの例では、Long型変数をプロシージャ内で宣言していました。プロシージャで宣言された変数は、そのプロシージャ内でのみ使用することができます。
その代わり、Long型変数をモジュールレベルまたはグローバルレベルで宣言することができます。
モジュールレベル
モジュールレベルの変数は、コードモジュールの先頭でDimステートメントを使用して宣言します。
これらの変数は、そのコードモジュール内の任意のプロシージャで使用することができます。
グローバルレベル
グローバルレベルの変数もコードモジュールの先頭で宣言されます。ただし、Dimステートメントの代わりに、Publicステートメントを使用して、Long型変数がVBAプロジェクト全体で使用可能であることを示します。
Public lngA as Long
モジュールレベルでlong型変数を宣言し、それを別のモジュールで使用しようとすると、エラーが発生します。
しかし、Public キーワードを使用して long 型変数を宣言していれば、エラーは発生せず、プロシージャは完全に実行されます。
文字列として格納されたLongのフォーマット
長いデータ型を文字列に変換する場合、例えば日付や通貨記号を表示したいことがあります。
このような場合には、Format関数を使います。 次のように行います。
Sub TestLongToString()
'文字列変数を宣言する
Dim strDate As String
'Long型を宣言し、値を入力する
Dim lngDate As Long
lngDate = 44055
'longを日付としてフォーマットされた文字列に変換する
strDate = Format(lngDate, "dd mmmm yyyy")
'結果を表示する
MsgBox strDate
End Sub
これを実行すると、以下のような結果となります。
次のプロシージャも試してみましょう。
Sub TestLongtoCurrencyString()
'文字列変数を宣言
Dim strMoney As String
'long型を宣言し、値を入力する
Dim lngValue As Long
lngValue = 44055
'longを通貨記号付きとしてフォーマットされた文字列に変換する
strMoney = Format(lngValue, "$#,##0")
'結果を表示する
MsgBox strMoney
End Sub
結果は以下のようになります。