変数を宣言する

変数を宣言するとき、通常使用するのは Dim ステートメントです。 宣言ステートメントをプロシージャ内に置くと、プロシージャ レベルの変数を作成できます。 または、モジュールの一番先頭の宣言セクション内に置いて、モジュール レベルの変数を作成することもできます。

次の例では、変数を作成し、String データ型を指定します。

Dim strName As String 

このステートメントがプロシージャ内にあると、変数 strName はそのプロシージャでのみ使用できます。 このステートメントがモジュールの宣言セクション内にあると、変数 strName はそのモジュール内のすべてのプロシージャで使用できますが、プロジェクト内の他のモジュールにあるプロシージャでは使用できません。

この変数をプロジェクト内のすべてのプロシージャで使用可能にするには、たとえば次の例のように、変数の前に Public ステートメントを置きます。

Public strName As String 

変数の名前付けについては、「Visual Basic の名前付け規則」を参照してください。

変数は、次のデータ型のいずれかとして宣言できます: BooleanByteIntegerLongCurrencySingleDoubleDateString (可変長の文字列用)、String * length (固定長の文字列用)、ObjectVariant。 データ型を指定しない場合、既定で Variant データ型が割り当てられます。 また、Type ステートメントを使用してユーザー定義型を作成することもできます。

1 つのステートメントで複数の変数を宣言することができます。 データ型を指定するには、各変数のデータ型を参照する必要があります。

次のステートメントでは、変数 intXintYintZInteger 型として宣言されています。

Dim intX As Integer, intY As Integer, intZ As Integer 

次のステートメントでは、intXintYVariant 型として宣言され、intZ のみが Integer 型として宣言されています。

Dim intX, intY, intZ As Integer 

宣言ステートメントでは、必ずしも変数のデータ型を指定する必要はありません。 データ型を省略すると、その変数は Variant 型になります。

上記のステートメントで x および y を整数として宣言する省略形は次のとおりです。

Dim intX%, intY%, intZ as Integer

型の省略形は次のとおりです。% -integer; & -long; @ -currency; # -double; ! -single; $ -string

Public ステートメント

Public ステートメントを使用して、モジュール レベルのパブリック変数を宣言します。

Public strName As String 

パブリック変数は、プロジェクト内のすべてのプロシージャで使用できます。 パブリック変数が標準モジュールまたはクラス モジュールで宣言されている場合は、そのパブリック変数が宣言されているプロジェクトを参照するすべてのプロジェクトでも使用できます。

Private ステートメント

Private ステートメントを使用して、モジュール レベルのプライベート変数を宣言します。

Private MyName As String 

プライベート変数は、同じモジュール内のプロシージャのみで使用できます。

注:

モジュール レベルで使用した場合、Dim ステートメントは Private ステートメントと等価です。 コードを読みやすく、解釈しやすくするには、Private ステートメントを使用できます。

Static ステートメント

Dim ステートメントの代わりに Static ステートメントを使用すると、プロシージャ内で変数が宣言されます。宣言された変数の値は、そのプロシージャに対する複数の呼び出し間で保持されます。

Option Explicit ステートメント

Visual Basic では、変数は、代入ステートメントで使用するだけで、暗黙的に宣言できます。 暗黙的に宣言されたすべての変数は Variant 型になります。 Variant 型の変数には、他のほとんどの変数よりも多いメモリ リソースが必要です。 変数を明示的に宣言して特定のデータ型を割り当てると、アプリケーションの効率が上がります。 すべての変数を明示的に宣言すると、名前の競合エラーやスペル ミスの発生を減らすことができます。

Visual Basic で暗黙の宣言が実行されないようにするには、モジュール内のすべてプロシージャの前に Option Explicit ステートメントを置きます。 このステートメントを使用すると、モジュール内のすべての変数を明示的に宣言することが必要になります。 モジュールに Option Explicit ステートメントが含まれている場合、Visual Basic では、まだ宣言されてない変数名を検出したり、スペル ミスを検出したりすると、コンパイル時エラーが発生します。

Visual Basic のプログラミング環境でオプションを設定すると、すべての新しいモジュールに Option Explicit ステートメントが自動的に組み込まれるようにできます。 Visual Basic の環境オプションを変更する方法についてヘルプが必要な場合は、アプリケーションのドキュメントをご覧ください。 このオプションでは、作成した既存のコードは変更されないことにご注意ください。

注:

固定配列および動的配列を明示的に宣言する必要があります。

自動化用にオブジェクト変数を宣言する

1 つのアプリケーションを使用して別のアプリケーションのオブジェクトを制御する場合は、他方のアプリケーションのタイプ ライブラリに対する参照を設定する必要があります。 参照を設定すると、オブジェクト変数を、その変数の代表的な型に従って宣言できます。 たとえば、Microsoft Word から Microsoft Excel のタイプ ライブラリへの参照を設定した場合、Word 内から Worksheet 型の変数を宣言して、Excel の Worksheet オブジェクトを表すことができます。

別のアプリケーションを使用して Microsoft Access のオブジェクトを制御しているときは、ほとんどの場合に、最も特定性の高い型に従ってオブジェクト変数を宣言することができます。 また、New キーワードを使ってオブジェクトの新しいインスタンスを自動的に作成することもできます。 ただし、それが Microsoft Access のオブジェクトであることを示す必要があります。 たとえば、Visual Basic 内から Access のフォームを表すオブジェクト変数を宣言する場合は、Access の Form オブジェクトを Visual Basic の Form オブジェクトと区別する必要があります。 次の例のように、変数宣言にタイプ ライブラリの名前を含めてください。

Dim frmOrders As New Access.Form 

一部のアプリケーションでは、Access のオブジェクト型を個別に認識しません。 それらのアプリケーションから Access のタイプ ライブラリへの参照を設定したとしても、すべての Access オブジェクトの変数を Object 型として宣言する必要があります。 また、New キーワードを使用してオブジェクトの新しいインスタンスを作成することもできません。

次の例は、Access のオブジェクト型を認識しないアプリケーションから Access の Application オブジェクトのインスタンスを表す変数を宣言する方法を示しています。 その後、このアプリケーションで Application オブジェクトのインスタンスを作成します。

Dim appAccess As Object 
Set appAccess = CreateObject("Access.Application")

アプリケーションがサポートする構文については、そのアプリケーションのドキュメントを参照してください。

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。