Excel VBA | 変数スコープ 練習用 Excel ファイル を作る

Excel VBA VBA
スポンサーリンク

了解です✨
では、今までの内容を実際に「クリックして動作を確認できる」
練習用マクロ付き Excel ファイルとして作る手順をまとめます。

目的

このファイルでは、「変数のスコープ(有効範囲)」の違いを実際に体験できます。
各ボタンをクリックすると、メッセージボックスで動作結果が確認できます。


作成手順

① 新しい Excel ファイルを作成

  1. Excel を開く
  2. 「新しいブック」を作成
  3. ファイル名を例として「VBA_スコープ練習.xlsm」で保存 ⚠️ 拡張子は .xlsm(マクロ有効ブック)にしてください。

② VBAエディタを開く

  1. Alt + F11 キーを押して VBE(Visual Basic Editor) を開く
  2. メニューの「挿入」→「標準モジュール」をクリック
  3. 自動生成された「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シートにボタンを配置

  1. Excel画面に戻る (Alt + Q)
  2. 「開発タブ」が表示されていない場合:
    • [ファイル] → [オプション] → [リボンのユーザー設定]
    • 「開発」にチェック → OK
  3. 開発タブ →「挿入」→「フォームコントロールのボタン」をクリック
  4. シート上にボタンを配置
  5. 表示された「マクロの登録」で以下を選択して接続。
ボタン名割り当てマクロ
▶ Sample1Sample1
▶ Sample2Sample2
▶ Sample3Sample3
▶ Sample4Sample4
▶ Sample5Sample5
▶ Sample6Sample6

ボタンの文字を右クリック→「テキストの編集」で名前を付けましょう。


④ 動作確認

それぞれのボタンをクリックして実験!

試す順序内容結果のポイント
① 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内で宣言、値保持次回呼び出し時も値が残る

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました