了解です✨
では、今までの内容を実際に「クリックして動作を確認できる」
練習用マクロ付き Excel ファイルとして作る手順をまとめます。
目的
このファイルでは、「変数のスコープ(有効範囲)」の違いを実際に体験できます。
各ボタンをクリックすると、メッセージボックスで動作結果が確認できます。
作成手順
① 新しい Excel ファイルを作成
- Excel を開く
- 「新しいブック」を作成
- ファイル名を例として「VBA_スコープ練習.xlsm」で保存 ⚠️ 拡張子は
.xlsm(マクロ有効ブック)にしてください。
② VBAエディタを開く
Alt + F11キーを押して VBE(Visual Basic Editor) を開く- メニューの「挿入」→「標準モジュール」をクリック
- 自動生成された「Module1」に以下のコードを貼り付けます。
コード全文
'=============================
' Excel VBA 変数スコープ 練習用
'=============================
' --- モジュールレベル変数 ---
Dim num As Integer
' --- ローカル変数の例 ---
Sub Sample1()
Dim num As Integer
num = 10
MsgBox "Sample1 の num = " & num, vbInformation, "ローカル変数(Sample1)"
End Sub
Sub Sample2()
' ローカル変数を宣言していない → エラーになる例
On Error Resume Next
MsgBox "Sample2 の num = " & num, vbInformation, "ローカル変数アクセス"
If Err.Number <> 0 Then
MsgBox "エラー!Sample2 からは num が見えません。", vbExclamation, "スコープ外"
Err.Clear
End If
End Sub
' --- モジュール変数の例 ---
Sub Sample3()
num = 10
MsgBox "Sample3 の num = " & num, vbInformation, "モジュール変数の設定"
End Sub
Sub Sample4()
num = num + 5
MsgBox "Sample4 の num = " & num, vbInformation, "モジュール変数の参照"
End Sub
' --- ローカル変数とモジュール変数の同名例 ---
Sub Sample5()
Dim num As Integer
num = 50
MsgBox "Sample5 のローカル num = " & num, vbInformation, "ローカル優先"
End Sub
Sub Sample6()
MsgBox "Sample6 のモジュール num = " & num, vbInformation, "モジュール変数の値"
End Sub
VB③ Excelシートにボタンを配置
- Excel画面に戻る (
Alt + Q) - 「開発タブ」が表示されていない場合:
- [ファイル] → [オプション] → [リボンのユーザー設定]
- 「開発」にチェック → OK
- 開発タブ →「挿入」→「フォームコントロールのボタン」をクリック
- シート上にボタンを配置
- 表示された「マクロの登録」で以下を選択して接続。
| ボタン名 | 割り当てマクロ |
|---|---|
| ▶ Sample1 | Sample1 |
| ▶ Sample2 | Sample2 |
| ▶ Sample3 | Sample3 |
| ▶ Sample4 | Sample4 |
| ▶ Sample5 | Sample5 |
| ▶ Sample6 | Sample6 |
ボタンの文字を右クリック→「テキストの編集」で名前を付けましょう。
④ 動作確認
それぞれのボタンをクリックして実験!
| 試す順序 | 内容 | 結果のポイント |
|---|---|---|
| ① Sample1 | ローカル変数定義 | num = 10 |
| ② Sample2 | 他のSubからアクセス | エラーになる |
| ③ Sample3 | モジュール変数に代入 | num = 10(共有変数) |
| ④ Sample4 | その値を利用 | num = 15(引き継ぎ) |
| ⑤ Sample5 | 同名ローカル変数 | num = 50(別物) |
| ⑥ Sample6 | モジュール変数確認 | num = 15(変化なし) |
(任意)リセット用マクロ
試すたびにモジュール変数を初期化したい場合は、これも追加できます👇
Sub ResetNum()
num = 0
MsgBox "モジュール変数 num を 0 にリセットしました。", vbInformation, "リセット完了"
End Sub
ボタン「🔄 Reset」などに割り当てておくと便利です。
まとめ
| 宣言方法 | 有効範囲 | 特徴 |
|---|---|---|
Dim(プロシージャ内) | そのSubだけ | 一時的に使う値に最適 |
Dim(モジュール上部) | モジュール内全体 | Sub間で共有できる |
Public | 全モジュール | 全体設定やカウンタなどに利用 |
Static(補足) | Sub内で宣言、値保持 | 次回呼び出し時も値が残る |

