今回はVBAで用いる変数について説明します。
VBA初心者の頃は、どんな時に変数を定義するべきなのか判断が難しいですが、VBAで複雑な処理を行うためには変数の活用が必要になります。
変数は宣言する場所や方法によって、有効範囲や有効期間が異なるのが特徴です。
その辺りもふまえて「変数の基礎」を学んで、VBAの構文を書いていきましょう。
変数とは
初見だと理解しにくいですが、変数は文字列や数値などの変化する値を格納する箱のイメージです。
変数を使用する際にはDimステートメントを使って、宣言する必要があります。
変数を宣言する際には、以下のようにデータ型を指定します。
Dim 変数名 As データ型
有効範囲と有効期間
VBAは変数を宣言する場所によって有効範囲と有効期間が異なるので、それぞれ説明してきたいと思います。
- 有効範囲
変数を使用できる範囲 - 有効期間
変数に代入した値が保持される期間
プロシージャレベル変数
プロシージャの中で宣言した変数をプロシージャレベル変数と呼び、その宣言をしたプロシージャの中でしか使用できません。
また、プロシージャの終了とともに格納された値は破棄されます。
※プロシージャについての説明は別の記事をぜひ参考にしてみてください。
【エクセルVBA初心者講座】Functionプロシージャの主な使い方について
続きを見る
以下ではtest1の変数Aは使用できますが、test2の変数Aは使用できない(エラーになる)ので注意が必要です。
Sub test1()
Dim A as long
A = 10
Call test2
End Sub
Sub test2()
Range("B1") = A * 2 'test2の変数Aはエラーになる
End Sub
モジュールレベル変数
宣言セクションで宣言した変数をモジュールレベル変数と呼び、モジュール内の全てのプロシージャで使用することができます。
宣言セクションは、各モジュールの一番上の部分のことを指しています。
また、プロシージャが終了しても値は保持され、ブックが閉じられると値が破棄されます。
以下では、宣言セクションで変数Aを宣言しているので、test1とtest2のどちらでも変数Aを使用することが可能です。
Dim A as long
Sub test1()
A = 10
Call test2
End Sub
Sub test2()
Range("B1") = A * 2
End Sub
パブリック変数
宣言セクションでPublicステートメントを使って宣言した変数をパブリック変数と呼び、全てのモジュールで使用することができます。
変数を宣言する際には、以下のようにデータ型を指定します。
Public 変数名 As データ型
また、プロシージャが終了しても値は保持され、ブックが閉じられると値が破棄されます。
以下では、パブリック変数Aを宣言しているので、test1とtest2に加えて異なるモジュールのtest3でも変数Aを使用することが可能です。
Public A as long
Sub test1()
A = 10
Call test2
End Sub
Sub test2()
Range("B1") = A * 2
End Sub
'別のモジュール
Sub test3()
Range("C1") = A * 3
End Sub
変数のおさらい
VBAの変数は、宣言する場所や宣言の方法によって有効範囲や有効期間が異なることを説明しました。
目的にあった方法を選択し、変数を利用してVBAを使いこなしていきましょう!
- プロシージャレベル変数
宣言をしたプロシージャの中でのみ使用可能。
プロシージャの終了とともに格納された値は破棄される。 - モジュールレベル変数
モジュール内の全てのプロシージャで使用可能。
プロシージャが終了しても値は保持され、ブックが閉じられると値が破棄される。 - パブリック変数
全てのモジュールで使用可能。
プロシージャが終了しても値は保持され、ブックが閉じられると値が破棄される。
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る