変数のスコープ(適用範囲)
ここでは、以下の4つのタイプの変数について記載します。
- パブリック変数:別のモジュールからでもスコープ可能です。変数の値が保持されます。
- プライベート変数:自モジュール内のみスコープ可能です。変数の値が保持されます。
- 静的変数:プロシージャー内のみスコープ可能です。変数の値が保持されます。
- ローカル変数:プロシージャー内のみスコープ可能です。変数の値は保持されません。
それぞれの変数について、実際にプログラムを動かして確認していきます。
パブリック変数
実行プログラム
Module1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Option Explicit Public pubVar As Long ' パブリック変数 Sub Sample1_2_1() pubVar = pubVar + 1 Debug.Print "[Sample1_2_1] pubVar:" & CStr(pubVar) End Sub Sub Sample1_2_2() pubVar = pubVar + 1 Debug.Print "[Sample1_2_2] pubVar:" & CStr(pubVar) End Sub |
Module2
1 2 3 4 5 6 7 8 9 |
Option Explicit Sub Sample1_2_3() pubVar = pubVar + 1 Debug.Print "[Sample1_2_3] pubVar:" & CStr(pubVar) End Sub |
実行結果
プライベート変数
実行プログラム
Module1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Option Explicit Private priVar As Long ' プライベート変数 Sub Sample1_2_4() priVar = priVar + 1 Debug.Print "[Sample1_2_4] priVar:" & CStr(priVar) End Sub Sub Sample1_2_5() priVar = priVar + 1 Debug.Print "[Sample1_2_5] priVar:" & CStr(priVar) End Sub |
Module2
1 2 3 4 5 6 7 8 9 |
Option Explicit Sub Sample1_2_6() priVar = priVar + 1 Debug.Print "[Sample1_2_6] priVar:" & CStr(priVar) End Sub |
実行結果
静的変数
実行プログラム
Module1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Option Explicit Sub Sample1_2_7() Static staVar As Long ' 静的変数 staVar = staVar + 1 Debug.Print "[Sample1_2_7] staVar:" & CStr(staVar) End Sub Sub Sample1_2_8() staVar = staVar + 1 Debug.Print "[Sample1_2_8] staVar:" & CStr(staVar) End Sub |
Module2
1 2 3 4 5 6 7 8 9 |
Option Explicit Sub Sample1_2_9() staVar = staVar + 1 Debug.Print "[Sample1_2_9] staVar:" & CStr(staVar) End Sub |
実行結果
ローカル変数
実行プログラム
Module1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Option Explicit Sub Sample1_2_10() Dim locVar As Long ' ローカル変数 locVar = locVar + 1 Debug.Print "[Sample1_2_10] locVar:" & CStr(locVar) End Sub Sub Sample1_2_11() locVar = locVar + 1 Debug.Print "[Sample1_2_11] locVar:" & CStr(locVar) End Sub |
Module2
1 2 3 4 5 6 7 8 9 |
Option Explicit Sub Sample1_2_12() locVar = locVar + 1 Debug.Print "[Sample1_2_12] locVar:" & CStr(locVar) End Sub |
実行結果
データ型
データ型 | サイズ | 説明 | |
---|---|---|---|
バイト型 | Byte | 1byte | 0 ~ 255 (正の整数) |
ブール型 | Boolean | 2byte | True または False |
整数型 | Integer | 2byte | -32,768 ~ 32,767 |
長整数型 | Long | 4byte | -2,147,483,648 ~ 2,147,483,647 |
単精度浮動小数点型 | Single | 4byte | 負:-3.402823E38 ~ -1.401298E-45 正:1.401298E-45 ~ 3.402823E38 |
倍精度浮動小数点型 | Double | 8byte | 負:-1.79769313486231E308~-4.94065645841247E-324 正:4.94065645841247E-324~1.79769313486232E308 |
通貨型 | Currency | 8byte | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
日付型 | Date | 8byte | 西暦100年1月1日 ~ 西暦9999年12月31日 |
オブジェクト型 | Object | 4byte | 割り当てたオブジェクトと同じ処理が可能 |
文字列型 | String | – | 0 ~ 2,147,483,648文字(Unicode) |
バリアント型 | Variant | – | 任意の種類のデータを格納できる型 |