では、先ほどの「定数の定義」を学べる 練習用 Excel マクロ付きファイル を、
初心者でもそのまま作れるように、ステップ形式で丁寧に説明します。
ステップ 1:新しい Excel ファイルを作る
- Excel を開く
- 空白のブックを新規作成
- 名前を付けて保存(例:
Const_Scope_Practice.xlsm)
※拡張子は「.xlsm」(マクロ有効ブック)にすること!
ステップ 2:開発タブを有効化(まだ出ていない場合)
- メニューの「ファイル」→「オプション」
- 「リボンのユーザー設定」を開く
- 右側の一覧で「開発」をチェック
- OK をクリック
ステップ 3:VBAエディタを開く
- 「開発」タブ → 「Visual Basic」をクリック
- VBAエディタが開く
- 「挿入」→「標準モジュール」を選ぶ
→ 「Module1」が追加される
ステップ 4:コードを貼り付ける
以下のコードを「Module1」に貼り付けてください。
Option Explicit
' ======== モジュールレベル定数 ========
Const TAX_MODULE As Double = 0.1 ' このモジュール内で共通
' ======== Public定数(全体で共通) ========
Public Const TAX_PUBLIC As Double = 0.08
Public Const APP_TITLE As String = "定数学習シート"
' ======== プロシージャ ========
Sub ローカル定数の例()
Const TAX_LOCAL As Double = 0.05 ' このSubの中だけ有効
MsgBox "【ローカル定数】TAX_LOCAL = " & TAX_LOCAL, vbInformation, APP_TITLE
End Sub
Sub モジュール定数の例()
MsgBox "【モジュール定数】TAX_MODULE = " & TAX_MODULE, vbInformation, APP_TITLE
End Sub
Sub パブリック定数の例()
MsgBox "【Public定数】TAX_PUBLIC = " & TAX_PUBLIC, vbInformation, APP_TITLE
End Sub
Sub エラー例_再代入()
Const TAX_LOCAL As Double = 0.05
' ↓再代入しようとするとエラー(実行時ではなくコンパイル時に検出される)
' TAX_LOCAL = 0.07
End Sub
VBステップ 5:ボタンを作ってマクロを実行
- Excel に戻る
- 「開発」タブ →「挿入」→「フォームコントロールのボタン」
- シート上にボタンを4つ並べて配置
- それぞれ次のように設定
| ボタン名 | 割り当てるマクロ | 説明 |
|---|---|---|
| 「① ローカル定数」 | ローカル定数の例 | Sub内のみ有効な定数を表示 |
| 「② モジュール定数」 | モジュール定数の例 | モジュール共通定数を表示 |
| 「③ Public定数」 | パブリック定数の例 | 全体共通定数を表示 |
| 「④ 再代入エラー」 | エラー例_再代入 | 再代入するとどうなるか確認(※コメント解除要) |
ステップ 6:試してみよう!
- 各ボタンをクリックしてメッセージを確認
- それぞれの定数のスコープ(有効範囲)が違うことを体感できる
エラー例_再代入のコメントを外して実行すると、「Const は変更できません」というコンパイルエラーが出る
補足:Public定数を他のモジュールから使う場合
- 新しいモジュールを追加(
Module2) - 次のコードを入れて実行してみましょう👇
Sub Public定数確認()
MsgBox "他モジュールからでも使える → " & TAX_PUBLIC
End Sub
VB→ これで「Public定数」が他のモジュールでも有効なことを確認できます!
学習ポイントまとめ
| 種類 | 定義場所 | 有効範囲 | 再代入 | 使いどころ |
|---|---|---|---|---|
| Const(ローカル) | Sub内 | そのSubだけ | ❌ | 一時的な固定値 |
| Const(モジュール) | Sub外(モジュール先頭) | モジュール全体 | ❌ | 同一モジュールで共通設定 |
| Public Const | Sub外+Public | 全モジュール | ❌ | 全体設定や共通値 |
オプション:説明付き「学習支援モード」を追加
ボタンを押すと説明も一緒に表示する拡張コードも作れます👇
(例:「ローカル定数=このプロシージャ内だけで有効です」というメッセージ付き)
このバージョンでは、
ボタンをクリックすると単に値を表示するだけでなく、
「どのスコープで有効か」「何ができないか」 を丁寧に表示します。
目的
- 定数の 3種類(ローカル/モジュール/Public) の違いを視覚的に理解する
- メッセージボックスで 値+説明 を自動表示
- 誤用(再代入など)の挙動も安全に体験できる
コード全体(Module1 に貼り付け)
Option Explicit
' =============================
' 💡 定数の定義エリア
' =============================
' モジュール全体で共通
Const TAX_MODULE As Double = 0.1
Const MODULE_NAME As String = "Module1"
' 他のモジュールからも使える(全体共通)
Public Const TAX_PUBLIC As Double = 0.08
Public Const APP_TITLE As String = "定数の学習支援モード"
' =============================
' 🧩 ローカル定数の例
' =============================
Sub ローカル定数の例_説明付き()
Const TAX_LOCAL As Double = 0.05
Dim msg As String
msg = "【ローカル定数】" & vbCrLf & vbCrLf & _
"Const TAX_LOCAL As Double = 0.05" & vbCrLf & vbCrLf & _
"▶ この定数は「この Sub の中だけ」で有効です。" & vbCrLf & _
"▶ 他の Sub では参照できません。" & vbCrLf & _
"▶ 値を変更しようとするとエラーになります。" & vbCrLf & vbCrLf & _
"計算例:100 * (1 + TAX_LOCAL) = " & (100 * (1 + TAX_LOCAL))
MsgBox msg, vbInformation, APP_TITLE
End Sub
' =============================
' 🧩 モジュール定数の例
' =============================
Sub モジュール定数の例_説明付き()
Dim msg As String
msg = "【モジュール定数】" & vbCrLf & vbCrLf & _
"Const TAX_MODULE As Double = 0.1" & vbCrLf & _
"(Module1 の先頭で定義)" & vbCrLf & vbCrLf & _
"▶ このモジュール内の全 Sub で使えます。" & vbCrLf & _
"▶ 他のモジュールからは使えません。" & vbCrLf & _
"▶ 定義を1か所にまとめると保守しやすいです。" & vbCrLf & vbCrLf & _
"計算例:200 * (1 + TAX_MODULE) = " & (200 * (1 + TAX_MODULE))
MsgBox msg, vbInformation, APP_TITLE
End Sub
' =============================
' 🧩 Public定数の例
' =============================
Sub Public定数の例_説明付き()
Dim msg As String
msg = "【Public定数】" & vbCrLf & vbCrLf & _
"Public Const TAX_PUBLIC As Double = 0.08" & vbCrLf & _
"(どのモジュールでも使用可)" & vbCrLf & vbCrLf & _
"▶ 全プロジェクトで共有できます。" & vbCrLf & _
"▶ 共通設定・アプリ名・ファイルパスなどに便利。" & vbCrLf & _
"▶ 同名Public定数の多重定義は避けましょう。" & vbCrLf & vbCrLf & _
"計算例:300 * (1 + TAX_PUBLIC) = " & (300 * (1 + TAX_PUBLIC))
MsgBox msg, vbInformation, APP_TITLE
End Sub
' =============================
' ⚠️ 再代入エラーの体験モード
' =============================
Sub 再代入エラー例_学習用()
Dim msg As String
msg = "【Const再代入テスト】" & vbCrLf & vbCrLf & _
"Const TAX As Double = 0.05" & vbCrLf & _
"TAX = 0.07 ← これはエラーになります!" & vbCrLf & vbCrLf & _
"▶ Constは「定数」なので変更不可です。" & vbCrLf & _
"▶ 実際にこの行のコメントを外して実行してみましょう。" & vbCrLf & _
"(コンパイル時にエラーが出ます)"
MsgBox msg, vbExclamation, APP_TITLE
End Sub
VB動作のイメージ
| ボタン | 実行マクロ | 表示内容 |
|---|---|---|
| 🟦 ① ローカル定数 | ローカル定数の例_説明付き | Sub内限定+計算結果 |
| 🟩 ② モジュール定数 | モジュール定数の例_説明付き | モジュール全体共有の説明+例 |
| 🟨 ③ Public定数 | Public定数の例_説明付き | 全体共有+活用例 |
| 🟥 ④ 再代入テスト | 再代入エラー例_学習用 | エラーが出る理由を安全に表示 |
使い方(ボタン設定)
- Excelに戻る
- 「開発」タブ →「挿入」→「フォームコントロールのボタン」
- 4つボタンを配置して、上の表のマクロを割り当てる
- それぞれのボタンに以下のように名前をつけましょう:
| ボタン名(表示) | 割り当てマクロ名 |
|---|---|
| ① ローカル定数 | ローカル定数の例_説明付き |
| ② モジュール定数 | モジュール定数の例_説明付き |
| ③ Public定数 | Public定数の例_説明付き |
| ④ 再代入エラー | 再代入エラー例_学習用 |
オプション(応用練習)
別モジュールを追加して、Public定数が共有されるか確かめてみましょう:
' --- Module2 ---
Sub Public定数_他モジュールから確認()
MsgBox "他モジュールから参照 → TAX_PUBLIC = " & TAX_PUBLIC, vbInformation, APP_TITLE
End Sub
VB学べることまとめ
| 定数の種類 | 範囲 | 再代入 | 代表的な用途 |
|---|---|---|---|
| ローカル定数 | Sub/Function内 | ❌ | 一時的な固定値 |
| モジュール定数 | 1つのモジュール全体 | ❌ | 同一モジュールの共通設定 |
| Public定数 | 全モジュール | ❌ | アプリ全体設定・共通値 |
| (補足)再代入テスト | – | コンパイルエラー | 変更できないことの理解 |
保存して再利用
- ファイル名例:
VBA_Const_LearningMode.xlsm - 保存しておけば他の授業や教材でも再利用可能。
- メッセージ内容を書き換えれば「If文」「変数スコープ」などの学習支援シートにも転用できます。

