定数を定義する

VBA では特定の値を直接プログラムの中に記述する代わりに、値を定数として定義して利用することができます。プログラムの中で繰り返し使用される値や入力を間違えやすい値を直接記述する代わりに定数を使用することで、入力ミスを減らすと同時にコードも分かりやすくなります。ここでは VBA で定数を定義して利用する方法について解説します。

(Last modified: )

定数を定義する

VBA で定数を定義するには次の書式を使用します。

Const 定数名 As データ型 = 値

Const のあとに定数名を記述します。定数名のルールは変数と同じで英数字、漢字、アンダーバーなどが利用できます。ただし先頭はアルファベットや漢字など文字でなければなりません。一般的に自分で定数を定義する場合はすべて大文字で定数名を記述することが多いです。

Const TAX As Double = 0.5
Const PASSING_LINE As Integer = 75

定数として定義する値のデータ型を指定してください。データ型の種類については変数と同じで IntegerString を指定します。詳しくは「VBAのデータ型と変数のデータ型の指定」を参照されてください。なおデータ型を省略した場合は Variant 型を指定したものとみなされます。

定数では定数を定義するときに値を指定する必要があります。定義時に値を設定しなかった場合は「構文エラー」となります。

Sub テスト()
    Const TAX As Double  '定義時に値を設定しないとエラー
End Sub

定数を定義する(1)

また定数は定義したときに指定した値から変更することはできません。定義済みの定数に別の値を代入しようとすると「定数には値を代入できません」というエラーとなります。

Sub テスト()
    Const PASSING_LINE As Integer = 75
    
    PASSING_LINE = 68  '定数に値を代入するとエラー
End Sub

定数を定義する(1)

定義した定数は値を直接記述する代わりに定数を記述して利用することができます。

Sub テスト()
    Const TAX As Double = 0.75
    Dim price As Double

    price = 150 * TAX
End Sub

定数のスコープ(適用範囲)について

定数の適用範囲は変数の適用範囲の考え方と同じです。プロシージャの中で定義した定数は、プロシージャの中でのみ使用できます。プロシージャの外で定義した定数はモジュール内のすべてのプロシージャで使用することができます。詳しくは「変数のスコープ(適用範囲)について」を参照されてください。

まずプロシージャの中で定数を定義した場合です。次のサンプルを見てください。

Option Explicit

Sub テスト1()
    Const TAX As Double = 0.75
    Dim price As Double

    price = 150 * TAX
End Sub

Sub テスト2()
    Dim price As Double

    price = 100 * TAX
End Sub

「テスト1」の中で定義した定数 TAX の適用範囲は「テスト1」の中だけです。「テスト2」の中で使用するとエラーとなります。このモジュールでは Option Explicit を記述しているので、「テスト2」の中の TAX は宣言がされていない変数とみなされてエラーとなります。

今度はプロシージャの外で定数を定義した場合です。次のサンプルを見てください。

Option Explicit
Const TAX As Double = 0.75

Sub テスト1()
    Dim price As Double

    price = 150 * TAX
End Sub

Sub テスト2()
    Dim price As Double

    price = 100 * TAX
End Sub

プロシージャの外で定義した定数の適用範囲はモジュール内となります。そのためモジュール内のすべてのプロシージャで定数を使用できます。今回の場合は「テスト1」および「テスト2」ではプロシージャの外で定義した定数 TAX がそれぞれ利用できます。

-- --

VBA で定数を定義して利用する方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。