変数の宣言と値の代入

変数とは、値を一時的に保存していくための入れ物です。計算の途中の値を一時的に保存したりするのに使います。 VBA では変数はいきなり使うこともできますが、変数を宣言した上で利用することが推奨されています。ここでは VBA で変数を宣言する方法、および変数への値の代入の仕方について解説します。

(2022 年 06 月 13 日公開 / 2022 年 06 月 13 日更新)

変数を宣言する

変数を利用するにはまずどんな変数をこれから使うのか事前に宣言しておく必要があります。変数を宣言するには次のように記述します。

Dim 変数名

Dim のあとに変数を識別する変数名を記述して変数を宣言します。

変数名には英数字、漢字、アンダーバーなどが利用できます。ただし先頭はアルファベットや漢字など文字でなければなりません。

正しい変数名:

Dim var
Dim 変数12
Dim product_name

誤った変数名:

Dim 10Test  '数字から始まってはいけない
Dim book@   '使用できない記号 @ が使われている

VBA では複数の変数を使うことができます。変数毎に異なる値を保管することができます。複数の変数を使用する場合は、それぞれ異なる変数名を指定して変数を宣言してください。

Sub プロシージャ名()
    Dim name
    Dim old
    Dim address
End Sub

複数の変数をまとめて宣言することもできます。まとめて宣言する場合は変数名をカンマ(,)で区切って続けて記述します。

Sub プロシージャ名()
    Dim name, old, address
End Sub

データ型を指定して変数を宣言する

なお変数を宣言するときに変数に格納できるデータ型を指定して宣言することもできます。

Dim 変数名 As データ型

データ型を指定せずに変数を宣言した場合は、データ型としてどんな値やオブジェクトでも代入できる Variant 型を指定したものとして扱われます。データ型を指定して変数を宣言して利用する方法については「VBAのデータ型と変数のデータ型の指定」でで詳しく解説します。

変数に値を代入する

変数は値を格納するための一時的な入れ物です。宣言した変数には値を代入することができます。変数に値を代入するには次のように記述します。

Dim 変数名

変数名 = 値

値を代入する時は、左側に変数名、右側に代入する値を記述し、イコール( = )で結びます。これは左辺と右辺が等しいと書いているのではなく、右辺の値を左辺へ代入するという意味です。

例えば変数 x に 10 という値を代入したい場合には次のように記述します。

Sub プロシージャ名()
    Dim x
    x = 10
End Sub

これで変数 x に 10 という値が代入されました。

複数の変数を宣言している場合、それぞれの変数には異なる値を代入することができます。

Sub プロシージャ名()
    Dim x
    Dim y

    x = 10
    y = 8
End Sub

変数に代入した値はあとから取り出すで使うことができます。また値を直接記述する代わりに値が代入された変数を記述することもできます。例えば次のようなプログラムを例に見てみます。

Sub プロシージャ名()
    Range("A1").Value = 10
    Range("A2").Value = 10
    Range("A3").Value = 10
End Sub

A1, A2, A3 のセルの Value プロパティにそれぞれ数値の 10 代入しています。これを変数を使って次のように記述することができます。

Sub プロシージャ名()
    Dim x
    x = 10

    Range("A1").Value = x
    Range("A2").Value = x
    Range("A3").Value = x
End Sub

変数 x には 10 が代入されています。プログラムで A1, A2, A3 のセルの Value プロパティにそれぞれ変数 x を代入しました。変数 x には 10 が代入されているので、結果的に 3 つのセルの Value プロパティには 10 が代入されます。

数値の 10 を直接代入する代わりに変数を使って代入しておくことで、あとで代入する値を変更したい場合は x = 10 の部分だけを修正するだけで済みます。

実際に先ほどのプログラムをコードウィドウで記述したあと実行してみました。

変数に値を代入する(1)

Excel のシートを確認してみると、 A1, A2, A3 セルに数値の 10 がそれぞれ入力されていることが確認できます。

変数に値を代入する(2)

なお変数にオブジェクトを代入する場合は Set 文を使用する必要があります。詳しくは「変数にオブジェクトを代入する(Set文)」を参照されてください。

変数を宣言せずに使用するとどうなるか

VBA では変数を使用する場合は事前に変数を宣言しておく必要がありますが、実は宣言を行わなくても変数を使用することができます。次のサンプルを見てください。

Sub プロシージャ名()
    x = 10
    Range("A1").Value = x
End Sub

変数 x に 10 を代入していますが、変数 x は事前に変数の宣言が行われていません。この場合でもエラーにはなりません。

実際に先ほどのプログラムをコードウィドウで記述したあと実行してみました。

変数を宣言せずに使用するとどうなるか(1)

Excel のシートを確認してみると、 A1 セルに数値の 10 が入力されていることが確認できます。

変数を宣言せずに使用するとどうなるか(2)

このように VBA では変数の宣言を行わなくても変数を使用することができます。ただケアレスミスを無くすためにもあらかじめプログラムの中で使用する変数は宣言されておくことをお勧めします。なお宣言していない変数を使用するとエラーになるように設定を変更することもできます。設定方法については「VBAで変数の宣言を強制する」を参照されてください。

変数の宣言と同時に初期値を代入について

他のプログラミング言語では変数の宣言と同時に初期値を代入できるものがありますが、 VBA では変数の宣言と同時に初期値を代入することはできません。そのため、次のように記述してしまうとエラーとなります。

Dim 変数名 = 値

例えば次のようなプログラムを記述してみます。

Sub プロシージャ名()
    Dim x = 10  ' 変数の宣言と同時に初期値を代入
    Range("A1").Value = x
End Sub

このプログラムを実行すると構文エラーとなります。

変数の宣言と同時に初期値を代入について(1)

そのため VBA では変数の宣言と初期値の代入はそれぞれ別の行で記述されてください。

Sub プロシージャ名()
    Dim x    ' 変数を宣言
    x = 10   ' 初期値を代入
    Range("A1").Value = x
End Sub

-- --

VBA で変数を宣言する方法、および変数への値の代入の仕方について解説しました。

( Written by Tatsuo Ikura )

広告