VBAで定数(Const)を使う方法:効率的なコードを書くための秘訣

アイキャッチ VBA

VBAを使用していて、値が変わっては困るものを扱いたいなと思ったことはありませんか?

お悩みpoint
悩む人
  • 変数では値が変わってしまう可能性がある。
    変わることがなく、安心して使えるものはない??。

この記事では、エクセルVBAの定数の使い方について詳しく説明します。

基本的な使い方から、メリット・デメリット、注意点まで、初心者でもすぐに実践できる内容です。

ぜひ最後までお読みください。


【 この記事の概要 】

  よく使う度    3.5  
  難しさ     2.0  
  覚えておくと安心度    4.0  

この記事を見てできるようになること

この記事を読むことで、以下のことができるようになります

この記事を見てできるようになること

定数(Const)とは?

VBAにおける定数(Const)とは、一度設定すると変更できない値のことを指します。

定数を使用することで、コード内のハードコーディングされた値を一元管理でき、コードの読みやすさやメンテナンスのしやすさが向上します。

定数と変数の違い

VBAでは、よく似たものとして「定数(Const)」と「変数(Variable)」という2つの異なるデータ保持方法があります。
これらの違いを理解し、使い分けることが重要になります。

値の変更宣言方法用途
定数(Const)変更不可Constキーワード変わらない値を保持する場合に使用
変数(Variable)変更可能Dimキーワード変わる可能性のある値を保持する場合に使用

変数については、別記事で解説を行っています。
合わせてご覧ください。

定数の宣言方法

定数は、Constキーワードを使用して宣言します。

解説
  • Const
    • 定数は、Constステートメントを使用して宣言します。
  • 定数
    • 任意の名前をつけることができます。
      プログラム内でこの名前を使用してデータにアクセスします。
      日本語の指定も問題ありません。
      同じ適用範囲内で、同じ名前は使用することができません。
  • As
    • 定数のデータ型を指定するために使用します。
      指定しなければ、定数の型は Variant になります。
  • 定数の型
    • 定数に格納するデータの種類を指定します。
      詳細は、事項で解説を行います。
      例えば、長整数型(Long)、文字列型(String)などがあります。
    • 定数に格納したい値を入力します。

以下の例では、実際に定数を宣言する方法を示します。

Const Tax_Rate As Double = 0.08

Const Max_Retries As Long = 5

Const Welcome_Message As String = "Welcome to VBA programming!"

上記のコードでは、「Tax_Rate」「Max_Retries」「Welcome_Message」という3つの定数がそれぞれ異なるデータ型で宣言されています。

より詳しい情報は、Microsoft公式 – Const ステートメントを参照してみてください。

定数の型の種類

定数では型を指定することで、格納するデータの種類を決定します。
定数の型は以下の通りです。

たくさんあり、最初は全部覚えるのは大変だと思います。
まず、黄色マーカーのものを覚え、あとは必要に応じて学習していくという方法で問題ありません。

型名説明
Integer整数型。
-32,768から32,767の範囲の整数を格納できます。
Long長整数型。
-2,147,483,648から2,147,483,647の範囲の整数を格納できます。
Single単精度浮動小数点型。
小数点を含む数値を格納できます。
Double倍精度浮動小数点型。
高精度の小数点を含む数値を格納できます。
String文字列型。
文字列を格納できます。
Boolean論理型。
TrueまたはFalseの値を格納できます。
Date日付型。
日付や時刻を格納できます。
Currency通貨型。
通貨値を格納できます。
小数点以下4桁までの数値を格納でき、通貨計算に適しています。
Decimal10進型。
10進数の値を格納でき、固定小数点計算に適しています。
Variant汎用型。
どの型のデータでも格納できますが、他の型よりもメモリを多く使用します。
また、変数の型を宣言しなければ、自動でVariantになります。

定数を使用するメリット

定数を使用することで、コードがより読みやすく、メンテナンスがしやすくなります。
ここでは具体的なメリットを紹介します。

1. コードの可読性向上

定数を使用すると、意味のある名前を付けることができるため、コードが何をしているのかが一目で分かります。

例えば、消費税率「TaxRate」を定数に使用した例を見てみましょう。


定数を使用しない場合

Dim Price As Double
Dim Tax As Double

Price = 1000
Tax = Price * 0.08

このように消費税率「0.08」をコード内に直接書く場合、その数字が何を意味しているのか一目では分かりません。


定数を使用する場合

Const TaxRate As Double = 0.08
Dim Price As Double
Dim Tax As Double

Price = 1000
Tax = Price * TaxRate

一方で、定数を使って「TaxRate」という名前を付けると、その意味が明確になります。

このように、定数を使用することでコードの意味が明確になり、保守やレビューがしやすくなります。

2. コードのメンテナンス性向上

定数を一元管理することで、値の変更が容易になります。

定数は一度設定すると変更が容易で、一箇所変更するだけで、コード全体に反映されます。
※定数を使用していないと、複数個所変更するのは大変ですよね。


定数を使用しない場合

Const TaxRate As Double = 0.08  '// 〇〇年〇月〇日 値を変更

もし定数を使わずに複数個所で「0.08」を直接使用していた場合、それらをすべて探し出して修正する必要があります。


定数を使用する場合

Const TaxRate As Double = 0.10  ' 消費税率を10%に変更

一方、定数を使っている場合は、定数の値を一度変更すれば、コード全体に反映されるため、変更箇所を探す手間が省けます。

このように、定数を使うことでコード全体のメンテナンスが容易になります。

定数のスコープ

VBAにおけるスコープとは、定数や変数がどこで使用できるかを決める範囲のことを指します。

定数をどこで宣言するかによって、その定数が使用できる場所が変わります。

スコープの設定は、プログラムの構造や設計に大きな影響を与えるため、適切なスコープを理解することが重要です。

モジュールレベルの定数


モジュールの先頭で宣言された定数の使用例を紹介します。

このようにモジュール内で宣言された定数は、
プロシージャ内で共通して使用
することができます。

使用例のコードを次に記述します。

Const TaxRate As Double = 0.08

Sub Sample_Tax_1()
    Dim Price As Long
    Dim Tax
    
    Price = 1000
    Tax = Price * TaxRate
End Sub

Sub Sample_Tax_2()
    Dim Price As Long
    Dim Tax
    
    Price = 5000
    Tax = Price * TaxRate
End Sub

プロシージャレベルの定数


このようにプロシージャ内で宣言された定数は、
プロシージャ内でのみ使用
することができます。
※別のプロシージャでは使用できません。

使用例のコードを次に記述します。

Sub Sample_Tax_1()
    Const TaxRate As Double = 0.08
    Dim Price As Long
    Dim Tax
    
    Price = 1000
    Tax = Price * TaxRate
End Sub

定数を使用する場合の注意点

定数を使用するにあたって、注意するポイントが数点あります。
これらを守ることで、トラブルを未然に防ぐことができます。

  • 定数は一度設定したら変更できない
    • 定数は値を固定するため、後から変更することはできません。
      プログラムの動作中に値を変更したい場合は、変数を使用してください。
      定数は「固定値」として扱うべきもので、たとえば税率やエラーメッセージなど、常に同じ値が必要な場面にのみ使用しましょう
  • スコープの設定に注意
    • 定数のスコープ(有効範囲)は宣言する場所によって異なります。
      モジュールの先頭で宣言すれば、モジュール全体で使用できますが、プロシージャ内で宣言すると、そのプロシージャ内でのみ使用可能です。
      適切な範囲で定数を宣言し、不要な部分でアクセスできないように管理しましょう。
  • 型を指定しない場合はVariant型になる
    • 定数の型を明示的に指定しない場合、自動的にVariant型になります。
      Variant型はメモリを多く使用するため、特別な理由がない限り、定数の型は明確に指定することが推奨されます。
      型の指定により、コードの効率性やエラーの防止に役立ちます。
  • 定数の命名規則を守る
    • 定数には一貫した命名規則を設けましょう。
      定数名を見ただけで、それが定数であることがわかるように、たとえば「全て大文字+アンダースコア」形式など、明確なルールを定めておくと、コードの可読性が向上します。

定数の使用例

実際の業務でVBAの定数を活用する方法について、具体的な例をいくつか紹介します。

例1:定数でファイルパスを管理する

複数のプロシージャで同じファイルパスを使用する場合、定数を使うことで管理が容易になります。

Const FILE_PATH As String = "C:\新しいパス\新しいファイル名.xlsx"

Sub OpenReport()
    Workbooks.Open FILE_PATH
End Sub

Sub SaveReport()
    ThisWorkbook.SaveAs FILE_PATH
End Sub

このコードで使用している機能

コードの詳細を解説

コードの解説
  • Const FILE_PATH As String = “C:\新しいパス\新しいファイル名.xlsx”
    • この行では、定数「FILE_PATH」を宣言しています。
      「Const」は定数を宣言するキーワードで、一度設定された値を後から変更できません。
      ここでは「String (文字列型)」の定数として、パス(”C:\新しいパス\新しいファイル名.xlsx”)を保持しています。
      定数を使うことで、プログラム全体でこのパスを使い回しつつ、誤って変更されるリスクを防ぐことができます
  • Sub OpenReport()
    Workbooks.Open FILE_PATH
    End Sub
    • このブロックでは、「OpenReport 」というサブルーチンを定義しています。
      サブルーチン「Sub」は、特定の処理をまとめて実行するコードの塊です。
      Workbooks.Open」は指定されたパスのファイルを開くためのメソッドで、引数として定数「FILE_PATH」を渡しています。
      これにより、先ほど設定したパスにあるExcelファイルが開かれます。

      ※Workbooks.Open() メソッドについては、別記事で解説を行っています。
       解説の最後にリンクを記載しておきますので、気になる方は合わせてご覧ください。
  • Sub SaveReport()
    ThisWorkbook.SaveAs FILE_PATH
    End Sub
    • このブロックでは、「SaveReport」というサブルーチンを定義しています。
      ThisWorkbook は、現在のExcelファイル(コードが実行されているブック)を指し、「SaveAs」メソッドを使って保存する処理を行います。
      定数「FILE_PATH」に指定されたファイル名で保存します。
      これにより、プログラムの中で同じ場所に保存する処理が一貫して行われます。

      ※Workbooks.SaveAs() メソッドについては、別記事で解説を行っています。
       解説の最後にリンクを記載しておきますので、気になる方は合わせてご覧ください。

このコードは、定数「FILE_PATH」に設定されたパスを使用して、Excelファイルの開閉や保存を行います。
定数を使うことで、ファイルパスを統一管理し、誤って変更されるリスクを防いでいます。

例2:エラーメッセージの統一化

エラーメッセージを定数として宣言し、コード内で一貫して使用することで、メッセージの変更が容易になります。

Const ERROR_MESSAGE As String = "An unexpected error has occurred."

Sub ExampleProcedure()
    On Error GoTo ErrorHandler
    
    '// コード本体
    Exit Sub

ErrorHandler:
    MsgBox ERROR_MESSAGE
End Sub

このコードで使用している機能

  • Error (エラー処理)

コードの詳細を解説

コードの解説
  • Const ERROR_MESSAGE As String = “An unexpected error has occurred.”
    • この行では、定数「ERROR_MESSAGE」を宣言しています。
      定数は、一度設定した値を変更できない変数のようなものです。
      この定数には、エラーメッセージとして「An unexpected error has occurred.」(予期しないエラーが発生しました)という文字列が設定されています。
      このように定数を使うことで、コード全体で統一されたメッセージを使用でき、後で変更が必要になった場合もこの1か所を変更するだけで済むため、メンテナンスが容易になります。
  • Sub ExampleProcedure()
    • ここでは、新しいサブルーチン「ExampleProcedure」を定義しています。
      サブルーチンは、一連の処理をまとめたコードのブロックです。このサブルーチンが呼び出されると、中に書かれた処理が順番に実行されます。
  • On Error GoTo ErrorHandler
    • この行は、エラーハンドリングの設定を行っています。
      もしこのサブルーチン内でエラーが発生した場合、コードの実行は通常の流れを中断し、指定されたラベル「ErrorHandler」にジャンプします。
      これにより、エラーが発生した際の処理をまとめて実行することが可能になります。
  • ‘// コード本体
    • この場所にメインの処理を記述してください。
  • Exit Sub
    • この行は、サブルーチンの処理を途中で終了させる命令です。
      通常の流れでは、この行が実行されると、 サブルーチン「ExampleProcedure」はここで終了し、その後の処理は行われません。
      つまり、Exit Sub に到達した時点でサブルーチンは停止し、プログラムの次の命令があれば、別のサブルーチンやプロシージャに移ることになります。
      エラーが発生しなければ、この行で「ExampleProcedure」は終了します。
  • ErrorHandler:
    • これはエラーハンドリングのためのラベルです。
      もしこのサブルーチン内でエラーが発生すると、前述の「On Error GoTo ErrorHandler」によって処理がこのラベルの場所にジャンプします。
      このラベル以降の行には、エラー発生時に実行される処理が書かれています。
  • MsgBox ERROR_MESSAGE
    • この行では、MsgBox関数を使用してメッセージボックスを表示します。
      表示されるメッセージは、最初に宣言した定数「ERROR_MESSAGE」の値、つまり「An unexpected error has occurred.」です。
      このメッセージボックスは、エラーが発生したことをユーザーに知らせるために使用されます。
  • End Sub
    • この行は、サブルーチンの終了を示します。
      ExampleProcedure サブルーチンの処理がすべて完了したことを示し、プログラムは次の処理に進みます。
      エラーハンドリングが行われた場合も、ここでサブルーチンが終了します。

このコードは、定数「ERROR_MESSAGE」を使用して、エラーが発生した際に一貫したエラーメッセージを表示する仕組みを作成しています。
「On Error GoTo」によりエラー発生時に「ErrorHandler」にジャンプし、定数で定義されたメッセージをメッセージボックスで表示します。
これにより、エラー処理が統一され、管理が簡単になります。

まとめ

の記事では、VBAにおける定数の基本的な概念、使用方法、宣言方法について詳しく説明しました。

定数を使うことで、コードの可読性やメンテナンス性が大幅に向上させることができます。

ポイントのおさらい

さらに学ぶために

定数の使用に慣れたら、次のステップとして他のトピックも学びましょう。

特に、VBAの関数やエラーハンドリングの組み合わせで、定数を使う場面は増えていきます。

今回の記事を参考に、VBAでの定数の使用方法をマスターし、コードの品質とメンテナンス性を向上させましょう。

タイトルとURLをコピーしました