カテゴリ: Excel VBA 更新日: 2026/02/12

Excel VBAの定数Constの使い方!定数化で保守しやすいコードを書く方法

Excel VBAの定数Constの使い方!定数化で保守しやすいコードを書く方法
Excel VBAの定数Constの使い方!定数化で保守しやすいコードを書く方法

先生と生徒の会話形式で理解しよう

生徒

「先生、VBAのプログラムの中で、消費税率の『0.1』という数字を何度も書いているのですが、もし税率が変わったら全部書き直さないといけないんですか?」

先生

「それは大変ですよね。そんな時こそ『定数(Const)』の出番です。一箇所変えるだけで、プログラム全体の数字を自動的に更新できる仕組みがあるんですよ。」

生徒

「定数……?変数とは違うんですか?」

先生

「良いところに気づきましたね。変数は中身が変わる箱ですが、定数は『一度決めたら変えない決まり事』を入れる箱なんです。具体的な書き方を学んでいきましょう!」

1. 定数(Const)とは?変えない値を管理する仕組み

1. 定数(Const)とは?変えない値を管理する仕組み
1. 定数(Const)とは?変えない値を管理する仕組み

Excel VBA(エクセル・ブイビーエー)における定数(Const)とは、プログラムの実行中にその値が絶対に変わらないデータのことを指します。プログラミングでは、後から変更される可能性がある数値や文字を、直接コードの中に書き込む(ハードコーディングと呼びます)のは避けるべきとされています。

例えば、消費税率、特定のファイルの保存先パス、会社の規定で決まっている基準値などです。これらに「定数」として名前を付けてあげることで、プログラムが読みやすくなり、修正が必要になった際も一箇所の書き換えだけで済むようになります。これを専門用語で保守性(ほしゅせい)が高いコードと呼びます。

2. 定数の基本の書き方とルール

2. 定数の基本の書き方とルール
2. 定数の基本の書き方とルール

定数を宣言するときは、Dim の代わりに Const(コンスト) というキーワードを使います。パソコン初心者の方でも覚えやすい、シンプルなルールがあります。

基本的な書き方は以下の通りです。


Sub ConstBasicSample()
    ' 消費税率を定数として宣言します
    Const TAX_RATE As Double = 0.1
    
    Dim price As Long
    price = 1000
    
    ' 計算に定数を使用します
    MsgBox "税込価格は " & price * (1 + TAX_RATE) & " 円です。"
End Sub

定数名は、変数と区別しやすくするために大文字で書くのが一般的なプログラミングの習慣です。これにより、後からコードを読み返したときに「これは書き換えちゃいけない定数なんだな」と一目で判断できるようになります。

3. なぜ変数(Dim)ではなく定数(Const)を使うのか?

3. なぜ変数(Dim)ではなく定数(Const)を使うのか?
3. なぜ変数(Dim)ではなく定数(Const)を使うのか?

「変数でも代用できるのでは?」と思うかもしれません。しかし、定数を使うことには大きなメリットが3つあります。

  • 間違いを防げる: 定数は一度決めたらプログラムの途中で値を上書きできません。間違えて計算中に税率を書き換えてしまうようなバグ(不具合)を未然に防げます。
  • 意味がわかりやすい: 単なる「0.1」という数字よりも「TAX_RATE」という名前がついている方が、何のための数字か誰が見てもわかります。
  • 修正が一瞬で終わる: 税率が「0.1」から「0.15」に変わったとき、コード内に散らばった数字を探して修正する必要はありません。宣言部分を一行直すだけです。

4. 定数のスコープ(有効範囲)を理解しよう

4. 定数のスコープ(有効範囲)を理解しよう
4. 定数のスコープ(有効範囲)を理解しよう

定数にも、変数と同じようにスコープ(有効範囲)があります。どこでその定数を使いたいかによって、宣言する場所を変える必要があります。

プログラミング未経験の方にとって「範囲」という考え方は少し難しいかもしれませんが、家のルール(その部屋だけか、家全体か)をイメージするとわかりやすいでしょう。


' モジュール全体のどこからでも使える定数
Const CLUB_NAME As String = "VBA学習部"

Sub WelcomeMessage()
    ' このマクロ内だけで有効な定数
    Const GREETING As String = "こんにちは!"
    
    MsgBox GREETING & CLUB_NAME & "へようこそ。"
End Sub

一つのマクロだけで使うなら Sub の中に、複数のマクロで共通して使いたいならモジュールの最上部(宣言セクション)に書くようにしましょう。

5. 実務で役立つ!マジックナンバーを排除する

5. 実務で役立つ!マジックナンバーを排除する
5. 実務で役立つ!マジックナンバーを排除する

プログラムの中に直接書かれた、意味のわからない数字のことをマジックナンバーと呼びます。例えば、エクセルの「3列目」を指定したいときに、ただ「3」と書くのではなく、定数を使って意味を持たせます。


Sub InputData()
    ' 列番号に名前を付けることでミスを防ぐ
    Const COL_PRICE As Integer = 3
    Const COL_NAME As Integer = 2
    
    ' 2行目の名前列と価格列に値を入力
    Cells(2, COL_NAME).Value = "エクセル教本"
    Cells(2, COL_PRICE).Value = 2500
End Sub

こうしておけば、後で「価格の列が4列目に変わった」という時も、定数の「3」を「4」に変えるだけで、プログラム全体の修正が完了します。パソコンの画面上で修正箇所を探し回るストレスから解放されます。

6. 列挙型(Enum)との使い分け

6. 列挙型(Enum)との使い分け
6. 列挙型(Enum)との使い分け

関連する複数の定数をまとめたいとき、VBAにはEnum(エニュム/列挙型)というさらに便利な機能があります。例えば、曜日やステータスなど、セットで管理したい数値に名前を付けるのに最適です。


' モジュールの最上部で宣言します
Enum WorkStatus
    Waiting = 1
    Doing = 2
    Finished = 3
End Enum

Sub CheckStatus()
    Dim currentStatus As Integer
    currentStatus = Doing ' 数字の2の代わりに名前を使える
    
    If currentStatus = Doing Then
        MsgBox "現在、作業進行中です。"
    End If
End Sub

Enumを使うと、コードを打っている最中に候補が自動で表示されるため、入力ミスを減らせるという強力なメリットがあります。定数の応用編として覚えておくと便利です。

7. 条件分岐(If文)やループと定数を組み合わせる

7. 条件分岐(If文)やループと定数を組み合わせる
7. 条件分岐(If文)やループと定数を組み合わせる

定数は、これまでに学んだ「条件分岐」や「ループ処理」と組み合わせることで真価を発揮します。合格点や繰り返し回数の上限を定数にしておくことで、マクロの挙動をコントロールしやすくなります。


Sub LoopWithConst()
    ' 合格点と最大行数を定数化
    Const PASS_SCORE As Integer = 70
    Const MAX_ROW As Integer = 10
    
    Dim i As Integer
    For i = 1 To MAX_ROW
        ' もしセルの値が合格点以上なら色を塗る
        If Cells(i, 1).Value >= PASS_SCORE Then
            Cells(i, 1).Interior.Color = vbCyan
        End If
    Next i
End Sub

このように、マクロのルール(仕様)を定数に集約させておくことで、「ルールが変わったら定数を直す」という単純な作業だけでマクロをメンテナンスできるようになります。

8. 定数を使う際の注意点

8. 定数を使う際の注意点
8. 定数を使う際の注意点

非常に便利な定数ですが、初心者の方がハマりやすい注意点がいくつかあります。

  • 関数や計算式は使えない: Const MY_DATE = Date のように、実行しないと値が決まらないものは定数にはできません。定数には「100」や「"東京"」のような決まった値を書く必要があります。
  • 上書き禁止: プログラムの途中で TAX_RATE = 0.08 のように値を入れ直そうとすると、VBAがエラーを出して止まります。それが定数の役割ですが、もし途中で値を変える必要があるなら、それは定数ではなく「変数(Dim)」を使いましょう。

定数を上手に使いこなせるようになると、あなたの書くVBAコードはプロ級の「読みやすさ」と「直しやすさ」を手に入れることができます。まずは、よく使う固定の数値から定数化してみる練習をしてみてくださいね!

カテゴリの一覧へ
新着記事
New1
Office Scripts
Office Scriptsで日付判定!Excel条件付き書式を自動化して期限管理をラクにする方法
New2
Office Scripts
Office Scripts普及の歴史とMicrosoftの方向性!Excel自動化が進化してきた流れをやさしく解説
New3
Excel VBA
Excel VBA関数を用途別に作成!計算・文字列処理の基本を初心者向けに解説
New4
Office Scripts
Office Scriptsで条件付き書式を自動化!数値変化に応じてExcelの書式を自動更新する方法
人気記事
No.1
Java&Spring記事人気No1
Excel VBA
Excelマクロのセキュリティ設定の基本!安全に実行するための信頼センター設定まとめ
No.2
Java&Spring記事人気No2
Office Scripts
Office Scriptsでできること・できないことを完全整理!Excel自動化の基本と限界をやさしく解説
No.3
Java&Spring記事人気No3
Excel VBA
目的別にモジュールを分割する方法!処理単位で整理して見やすくするテクニック
No.4
Java&Spring記事人気No4
Excel VBA
Excel VBAとOffice Scriptsの違いを比較!初心者でもわかる学ぶべきスキル
No.5
Java&Spring記事人気No5
Excel VBA
Excel VBA基本文法の総まとめ!初心者が必ず押さえるべき20の基礎ポイント完全ガイド
No.6
Java&Spring記事人気No6
Office Scripts
Office Scriptsで条件付き書式を自動化!Excel自動化初心者向けスクリプト操作の基本
No.7
Java&Spring記事人気No7
Excel VBA
Excel VBAの開発環境を最速で整える!VBEの開き方から基本操作まで完全ガイド
No.8
Java&Spring記事人気No8
Excel VBA
Excel VBAプロジェクト構成とモジュール管理を完全解説!初心者でも迷わない基本の考え方