Excel VBA | 定数を定義する

Excel VBA VBA
スポンサーリンク

初心者向けにやさしく、例題を交えて丁寧に説明します。読みやすく、すぐ試せるサンプルと練習問題(解答付き)を付けます。さあ始めましょう!

定数(Const)って何? なぜ使うの?

定数とは「プログラム中で(あとから)変わらない値」に名前をつけたものです。
同じ値を何度も書く代わりに「意味のある名前」を使うことで、

  • コードが読みやすくなる(TAX の方が 0.08 より分かりやすい)
  • ミス(数字のタイプミス)を防げる
  • 値を変える必要ができたときに、定義箇所だけ変えれば済む

というメリットがあります。


定数の基本構文

Const 定数名 As データ型 =
VB

例:

Const TAX As Double = 0.08
Const APP_NAME As String = "売上集計ツール"
VB
  • Const で始める。必ず値を設定する必要がある(後で代入できない)。
  • データ型は指定しても省略してもよい(省略すると Variant)。初学者は型を書く習慣を付けると良い。
  • 定数名は変数の命名規則と同じ(英数字とアンダースコア。先頭は文字)。慣例的に大文字で書く場合が多い。

スコープ(どこで使えるか)の違い — よくあるパターン

  1. プロシージャ(Sub / Function)内で定義
    → そのプロシージャ内だけで使える(ローカル)
Sub ExampleLocal()
    Const TAX As Double = 0.08
    Dim price As Double
    price = 100 * (1 + TAX)
    MsgBox price  ' 108 を表示
End Sub
VB
  1. モジュールの先頭(プロシージャの外)で定義
    → そのモジュール内(同じモジュールファイルにあるすべてのSub/Function)で使える
' Module1
Option Explicit
Const TAX As Double = 0.08

Sub A()
    MsgBox 100 * (1 + TAX)
End Sub

Sub B()
    MsgBox 200 * (1 + TAX)
End Sub
VB
  1. Public(モジュールレベル、他モジュールからも使える)
    Public Const を標準モジュールの先頭に置くと、プロジェクト内のどのモジュールからも使える
' Module: GlobalConsts (標準モジュール)
Public Const TAX As Double = 0.08

' 他のモジュールからも TAX が使える
VB

補足:Public は標準モジュール(普通のコードモジュール)で使うのが一般的。クラスモジュールやシートモジュールでは注意が必要です(まずは標準モジュールで使う習慣を)。


実践例:税込価格を計算するマクロ(モジュールレベル定数)

' Module: Calc
Option Explicit
Public Const TAX_RATE As Double = 0.1   ' 消費税率 10%

Sub ShowTaxIncluded()
    Dim price As Double
    price = 1500
    MsgBox "税込価格: " & Format(price * (1 + TAX_RATE), "#,##0")  ' 1650 を表示
End Sub
VB

覚えておくべき重要なポイント(初心者がやりがちなミス)

  • 定数は再代入できない
    TAX = 0.05 のように書くと「コンパイルエラー: 定数に代入できません」となります。
  • 定義は必ず値をセットすること(宣言だけで値無しは不可)。
  • 定数の初期化には“変数の値”は使えない(つまり Const A = B のように、Bが変数だとダメ)。ただし定数同士を使った単純な式はOK(例えば Const A = 1, B = A + 1 のような定義は言語仕様によるが避けた方が無難)。
  • スコープに注意:モジュールの外で定義した定数は、そのモジュール外でも使えるかどうかを確認(Publicかどうか)。
  • 名前の衝突:同一名の定数を別のスコープで定義すると、使う場所によってどちらが見えるかが変わる。分かりやすい名前空間(モジュール名+意味のある名前)を心掛ける。

具体的に試せる練習問題

練習1(超かんたん)

説明:セル A1 に入っている金額に税率をかけて税込価格をセル B1 に出すマクロを作る。税率は定数 TAX で定義する(税率 8%)。

コード例(回答):

Sub CalcTaxFromCell()
    Const TAX As Double = 0.08
    Dim amount As Double
    amount = Range("A1").Value
    Range("B1").Value = amount * (1 + TAX)
End Sub
VB

期待動作:A1 に 100 を入れてマクロ実行 → B1 に 108 が入る。


練習2(モジュールレベルの定数を使う)

説明:Const TAX_RATE As Double = 0.1 をモジュール先頭に置き、CalcInvoice という Sub が A2:A4 の金額を合計して税込合計を C1 に出力する。

コード例(回答):

' Module: Invoice
Option Explicit
Public Const TAX_RATE As Double = 0.1

Sub CalcInvoice()
    Dim total As Double
    total = Application.WorksheetFunction.Sum(Range("A2:A4"))
    Range("C1").Value = total * (1 + TAX_RATE)
End Sub
VB

期待動作:A2:A4 の合計に 10% を乗じた値が C1 に入る。


練習3(ミス確認)

説明:以下のコードを実行して何が起きるか考えてみよう。

Sub TestConst()
    Const X As Integer = 10
    X = 20
End Sub
VB

回答:X = 20 の行で コンパイルエラー(定数に代入できません) が発生する。


定数を使うべき場面(実用的アドバイス)

  • 「魔法の数字(magic number)」がコード中に何度も出てくるとき:例えば税率、郵便料金の閾値、最大試行回数など。
  • 複数の場所で共通の設定値を使いたいとき(Public Const にしておけば一箇所変更で全体に反映)。
  • プログラムの可読性を上げたいとき:If score >= PASS_SCORE Then の方が If score >= 60 Then より意味が伝わる。

命名ルールのコツ(読みやすさ重視)

  • 定数は大文字で書く(慣習):MAX_ROWSTAX_RATE
  • 接頭辞で用途を分ける:例 CFG_(設定)、ERR_(エラーコード)など(大きなプロジェクト向け)
  • 単語を _(アンダースコア)で区切ると読みやすい:DEFAULT_TIMEOUT

よくある質問(FAQ)

Q
「Const と Public Const の違いは?」
A

Const をモジュール先頭に置くとそのモジュール内で有効。Public Const にするとプロジェクト全体(他のモジュール)から参照可能。

Q
「Const に文字列を入れるときはどうする?」
A

値はダブルクォーテーションで囲む。例:Const APP_TITLE As String = "勤怠管理"

Q
「Const は大きなデータにも使える?」
A

定数は小さな設定値に使うのが普通。大量データや変更が前提のデータは定数にしない(外部ファイルやシートで管理する方が良い)。


まとめ

  • Const は「変わらない値に名前をつける」仕組み。
  • 読みやすさ・保守性が上がるので積極的に使おう。
  • スコープ(プロシージャ内 / モジュール / Public)に注意。
  • 定数は再代入できない、初期化は必須、変数の値を初期化に使えない点を覚える。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました