Excel VBA | 定数を定義する

Excel VBA VBA
スポンサーリンク

では「定数(Const)の定義方法」をテーマにした、
学習支援モード付きの Excel VBA 練習用ファイル(インタラクティブ版)を作ります。


目的

  • 定数の定義方法・スコープ(どこで使えるか)を実際に体験して理解する。
  • ボタンをクリックすると、定義箇所の色が変わり解説が表示される。
  • SelectionChange イベントで、範囲を選ぶと対応する説明が出る。

ファイル構成

  1. シート名定数の学習
  2. ボタン
    • 「ローカル定数を実行」
    • 「モジュール定数を実行」
    • 「説明をリセット」
  3. 説明用セルB8 に説明を表示

完成イメージ

ボタン動作
▶ ローカル定数を実行Sub内に定義したConstを実行。スコープの違いを実体験。
▶ モジュール定数を実行モジュール全体で使えるConstを実行。
🔄 説明をリセット色と説明を初期状態に戻す。

モジュールコード(Module1)

VBAエディタ(Alt + F11)を開き、標準モジュールに貼り付けてください。

Option Explicit

'==============================
' 定数定義(モジュールレベル)
'==============================
Public Const TAX_RATE As Double = 0.1

'==============================
' ローカル定数の例
'==============================
Sub LocalConstExample()
    Const TAX As Double = 0.08
    Dim price As Double
    price = 1000
    MsgBox "ローカル定数の例" & vbCrLf & _
           "税率 (TAX) = " & TAX & vbCrLf & _
           "税込価格 = " & price * (1 + TAX), vbInformation
End Sub

'==============================
' モジュールレベル定数の例
'==============================
Sub ModuleConstExample()
    Dim price As Double
    price = 1000
    MsgBox "モジュール定数の例" & vbCrLf & _
           "税率 (TAX_RATE) = " & TAX_RATE & vbCrLf & _
           "税込価格 = " & price * (1 + TAX_RATE), vbInformation
End Sub

'==============================
' 学習支援:説明表示をリセット
'==============================
Sub ResetExplanation()
    With Worksheets("定数の学習")
        .Range("B8").Value = "セルをクリックすると説明が表示されます"
        .Range("B2:B6").Interior.ColorIndex = xlNone
    End With
End Sub
VB

シートモジュールコード(定数の学習)

シート名「定数の学習」を右クリック →「コードの表示」で貼り付けます。

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim msg As String
    Dim c As Range

    ' 一度全部リセット
    Me.Range("B2:B6").Interior.ColorIndex = xlNone

    ' 範囲ごとの説明
    Select Case True
        Case Not Intersect(Target, Me.Range("B2")) Is Nothing
            msg = "Const 定義の基本形です。定数名・データ型・値を指定します。"
            Me.Range("B2").Interior.Color = RGB(255, 255, 200)

        Case Not Intersect(Target, Me.Range("B3")) Is Nothing
            msg = "ローカル定数:Sub内でのみ使える定数です。他のSubからは見えません。"
            Me.Range("B3").Interior.Color = RGB(200, 255, 200)

        Case Not Intersect(Target, Me.Range("B4")) Is Nothing
            msg = "モジュール定数:モジュール内のすべてのSubで利用可能です。"
            Me.Range("B4").Interior.Color = RGB(200, 220, 255)

        Case Not Intersect(Target, Me.Range("B5")) Is Nothing
            msg = "Public Const:他のモジュールからも参照できます。共通設定値に便利。"
            Me.Range("B5").Interior.Color = RGB(255, 220, 200)

        Case Not Intersect(Target, Me.Range("B6")) Is Nothing
            msg = "定数は変更できません。再代入するとコンパイルエラーになります。"
            Me.Range("B6").Interior.Color = RGB(255, 200, 200)
    End Select

    ' 説明を表示
    If msg <> "" Then
        Me.Range("B8").Value = msg
    End If
End Sub
VB

シート設計(手順)

  1. Excel を開いて、シート名を「定数の学習」に変更
  2. セルに以下を入力
セル内容
B1🧠 定数(Const)の学習モード
B2Const TAX As Double = 0.08
B3Sub LocalConstExample()
B4Public Const TAX_RATE As Double = 0.1
B5モジュール全体で利用可
B6TAX = 0.05 ' ←エラー!'
B8セルをクリックすると説明が表示されます
  1. ボタンを挿入(開発タブ → 挿入 → フォームコントロール → ボタン)
    • ボタン①:「ローカル定数を実行」 → LocalConstExample を割り当て
    • ボタン②:「モジュール定数を実行」 → ModuleConstExample を割り当て
    • ボタン③:「説明をリセット」 → ResetExplanation を割り当て

動作確認

  1. ボタンをクリックするとメッセージボックスで税込価格が表示される。
  2. セルをクリックすると、対応する部分が色付き+説明文が表示される。
  3. 「説明をリセット」で元に戻る。

発展課題(上級者向け)

  • 定数名・型・値を入力するフォームを作って、コードを自動生成する。
  • クリックした定数名に合わせてコードウィンドウを開く(Application.VBE.ActiveWindow活用)。

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