エクセルバージョン
マイクロソフト365
本日はエクセルの定数(Const)について解説していきたいと思います。
定数(Const)はVBAで修正が入った場合やパラメーターを設定する際に非常に効果(視覚的に)がある、有意義ある機能なので、是非この機会に覚えちゃいましょう(^O^)
現場経験がない方は分からないかもですが、現場のプログラマーなら普通レベルで使用している、一般的な機能なので是非この機会にマスターしちゃいましょう!
それではいってみましょう!
Menu
変数と定数の違い
変数は途中で値を代入することができます。
定数は途中で値を代入することができません。
このような特徴があるので下記のサンプル例で試してみます。
【変数の場合は実行途中に値を代入することが可能】
1 2 3 4 5 6 7 8 9 10 | Option Explicit Sub 変数() Dim i As Integer '変数iに値1を代入 i = 1 Debug.Print i End Sub |
【結果】→ 1
【定数の場合は実行途中に値を代入することが不可】
1 2 3 4 5 6 7 8 9 10 11 12 | Option Explicit '定数 Const i As Integer = 0 Sub 定数() '定数iに値1を代入しようとするとエラー i = 1 Debug.Print i End Sub |
【結果】下記のようなエラーが出ます。
どのような場面で使用するか
・処理の途中で値が変わらない箇所。
・同じ使用用途の箇所がコードの中に複数ある場合。
このような時に定数が威力を発揮します。
定数の記述場所
モジュールと1番目のプロシージャの先頭の間に記述します。
又は、
プロシージャ内にも記述できます。
1 2 3 4 5 6 7 8 9 10 | Option Explicit Sub 定数() '定数 Const i As Integer = 0 Debug.Print i End Sub |
定数の記述方法
定数記述例
1 | Const COL as Integer = 1 |
【記述方法解説】
➀Const : Constステートメントで最初にConstと記述します。
➁COL : 定数名を記述(ここは自分で名前を決めます。英語大文字で記述するのが一般的です)
➂as Integer : 型を指定します。
➃1 : 値を指定します。
VBAサンプル
例えば下記のようなA列の数字をB列に修正して書き出したい場合、定数を使用すると時短と記述ミス防止ができます。
列の変更
A列のデータ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub 定数1() 'A列に書出し Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 End Sub |
A列の書出しをB列に修正する場合、10か所のcellsの列の1を、全て2に書き換えなくてはいけないので面倒だし時間がかかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub 定数1() 'A列の書出しをB列に変更 Cells(1, 2) = 1 Cells(2, 2) = 2 Cells(3, 2) = 3 Cells(4, 2) = 4 Cells(5, 2) = 5 Cells(6, 2) = 6 Cells(7, 2) = 7 Cells(8, 2) = 8 Cells(9, 2) = 9 Cells(10, 2) = 10 End Sub |
【定数を使用した場合】
定数COLは1のA列です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Option Explicit '定数 'A列に書出し Const COL As Integer = 1 '列番号 Sub 定数2() Cells(1, COL) = 1 Cells(2, COL) = 2 Cells(3, COL) = 3 Cells(4, COL) = 4 Cells(5, COL) = 5 Cells(6, COL) = 6 Cells(7, COL) = 7 Cells(8, COL) = 8 Cells(9, COL) = 9 Cells(10, COL) = 10 End Sub |
定数COLを2のB列に変更で修正完了です。
下記のようにA列のデータをB列に書き出す場合、定数の値を1か所を➔2に変更するだけで、全てのcellsの列がB列に一瞬で変更ができるので、記述ミス防止にもなるし、大幅な時短が可能になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Option Explicit '定数 'A列の書出しをB列に変更 Const COL As Integer = 2 '←を変更するだけで修正完了(列番号) Sub 定数2() Cells(1, COL) = 1 Cells(2, COL) = 2 Cells(3, COL) = 3 Cells(4, COL) = 4 Cells(5, COL) = 5 Cells(6, COL) = 6 Cells(7, COL) = 7 Cells(8, COL) = 8 Cells(9, COL) = 9 Cells(10, COL) = 10 End Sub |
データ型
データ型は下記が使用できます。
Integer
Long
String
Boolean
Byte
Currency
Single
Double
Date
Variant
定数のスコープ(適用範囲)
スコープ(適用範囲)に関しては、エクセルVBAしか扱ったことがない場合は、少々難しいので①だけ覚えておけばいいと思います。
ここは分からなくてもVBAを使用するくらいなら問題ないので分からなくても大丈夫です!
①定数は既定値でモジュールレベル内のPrivateなので、使用時はConstの前にPrivateキーワードを記述しなくてもOKです。(モジュール内でしか使用できません。)
➁パブリックモジュールレベルの定数を宣言するには、Constステートメントの前にPublicキーワードを記述します。(モジュール外でも使用できます。)
まとめ
変数に非常によく似ていますが、プロシージャの前に記述することで!これは定数だよ!って記述するのが現場ではごく一般的です。
VBAで後で修正が入った時にまとめて修正できるように作成時に同じ箇所が複数ある場合や、パラメーターの設定時に、定数の使用を強くお勧めします。
そうすることにより、修正時に記述ミスや、他の人が修正する場合でも簡単に修正が可能になるので、コードを全て書き終えたら、定数にできる箇所があれば積極的に変更していきましょう。
以上です。