VBA 長整数型(変数の宣言)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 7月 14, 2022

長整数(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

上記のコードを実行すると、以下のようなメッセージボックスが表示されます。

vba integer intexample msgbox

超長整数(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

小数点以下の数値は切り捨てられ、次のようなメッセージが返されます。

vba integer passing decimal round down msgbox

ところが、この下のコードを見てください。

Sub LngExampleB() 
'long型変数の宣言 
   Dim lngA as Long 
'long型変数に値を代入
   lngA = 3524.52 
'メッセージボックスの表示
   MsgBox lngA
 End Sub

以下のようなメッセージボックスが返されます(切り上げ)。

vba integer passing decimal round up msgbox

十進/倍精度浮動小数点データ型

小数点以下の桁数を格納したい場合は、小数点以下の桁数を許容する変数を宣言する必要があります。 使用できるデータ型は、単精度浮動小数点型(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桁まで保持可能です。

vba integer double example

モジュールレベル、グローバルレベルでの Long型変数の宣言

これまでの例では、Long型変数をプロシージャ内で宣言していました。プロシージャで宣言された変数は、そのプロシージャ内でのみ使用することができます。

vba long declare

その代わり、Long型変数をモジュールレベルまたはグローバルレベルで宣言することができます。

モジュールレベル

モジュールレベルの変数は、コードモジュールの先頭でDimステートメントを使用して宣言します。

vba module declare module

これらの変数は、そのコードモジュール内の任意のプロシージャで使用することができます。

グローバルレベル

グローバルレベルの変数もコードモジュールの先頭で宣言されます。ただし、Dimステートメントの代わりに、Publicステートメントを使用して、Long型変数がVBAプロジェクト全体で使用可能であることを示します。

Public lngA as Long

vba long declare public

モジュールレベルでlong型変数を宣言し、それを別のモジュールで使用しようとすると、エラーが発生します。

vba long declare error

しかし、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

これを実行すると、以下のような結果となります。

vba long convert long to string

次のプロシージャも試してみましょう。

Sub TestLongtoCurrencyString()
'文字列変数を宣言
Dim strMoney As String
'long型を宣言し、値を入力する
Dim lngValue As Long
lngValue = 44055
'longを通貨記号付きとしてフォーマットされた文字列に変換する
strMoney = Format(lngValue, "$#,##0")
'結果を表示する
MsgBox strMoney
End Sub

結果は以下のようになります。

vba long convert to currency string

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples