こんにちは。てちてちエンジニアのおっとーです。
小規模プログラムを書くことが多いVBA。
定数の必要性が分からない方も多いと思います。
私が実際に「この使い方はあり」と感じた、
定数使った際のメリットをサンプルを用いて紹介していきます。
定数の宣言の仕方
Public Const 定数名 As 型 = 設定値
定数名はみんなが見てわかる定数名にしてあげるとグッドです。
型は主要なものでString/Long/Object/Variant・・・
などなど色々ありますが、設定する値に応じて選択してください。
定数を使うメリット
利点①:メンテナンス性UP
行は日付・列は項目、表の定番ですよね。
以下のような形の表はよく見かけるのではないでしょうか。
今回はこの表をベースに説明していきます。
DATE | WEEKDAY | DAU | NEW_USER | AVE_TIME | ARPU | ARPPU | LTV |
– | – | – | – | – | – | – | – |
VBAでA1セルをにDATEと言う文字列を代入したいとき、
ThisWorkbook.Sheets(1).Cells(1, 1).Value = “DATE”
とかって書きますが、
定数を使うと以下のような書き方もできます。
日付列は1列目なので定数LONG_DATE_COLUMNはLONG型の値を1と宣言します。
宣言した定数を用いて列を指定し文字列の代入処理を行います。
Public Const LONG_DATE_COLUMN As Long = 1 '定数を使ってDATEの列は1行目と宣言しています
'=========================================
Sub sample0()
ThisWorkbook.Sheets(1).Cells(1, LONG_DATE_COLUMN).Value = "DATE"
End Sub
「だからなんだ?」って思われるかもしれないですが、
セル番地を指定して記述するより、
後に修正が必要になった際のメンテナンス性が高くなります。
極端な例ですが、以下のsample1とsample2のように1列目に対して日付を入れる処理があったとします。
表の見直しをしていて、「日付の列は2列目に移動したい」ってなったとき、
sample1のようなプログラムを書いていると、
1列目に対する処理が記載されているコードの分だけ修正が必要になります。
定数を使っていると、
定数の値を2に入れ替えるだけで済みます。
Public Const LONG_DATE_COLUMN As Long = 1
'=========================================
Sub sample1()
ThisWorkbook.Sheets(1).Cells(1, 1).Value = "DATE"
ThisWorkbook.Sheets(1).Cells(2, 1).Value = "12/1"
ThisWorkbook.Sheets(1).Cells(3, 1).Value = "12/2"
ThisWorkbook.Sheets(1).Cells(4, 1).Value = "12/3"
End Sub
Sub sample2()
ThisWorkbook.Sheets(1).Cells(1, LONG_DATE_COLUMN).Value = "DATE"
ThisWorkbook.Sheets(1).Cells(2, LONG_DATE_COLUMN).Value = "12/1"
ThisWorkbook.Sheets(1).Cells(3, LONG_DATE_COLUMN).Value = "12/2"
ThisWorkbook.Sheets(1).Cells(4, LONG_DATE_COLUMN).Value = "12/3"
End Sub
利点②:可読性UP
例えばsample3のようなコードがあります。
「ささっ」とコードを読んだとき、どの値がどの列に対応するかわかるでしょうか。
毎日同じ表を使っている人が見る分にはわかるかもしれないですが、
大半は列番号を頼りに表を確認して、列の項目がなにかを確認するのではないでしょうか。
Sub sample3()
ThisWorkbook.Sheets(1).Cells(2, 4).Value = 150
ThisWorkbook.Sheets(1).Cells(2, 5).Value = 1.32
ThisWorkbook.Sheets(1).Cells(2, 6).Value = 200
ThisWorkbook.Sheets(1).Cells(2, 7).Value = 3200
End Sub
続いて以下を見てください。
Public Const LONG_DATE_COLUMN As Long = 1
Public Const LONG_WEEKDAY_COLUMN As Long = 2
Public Const LONG_DAU_COLUMN As Long = 3
Public Const LONG_NEW_USER_COLUMN As Long = 4
Public Const LONG_AVE_TIME_COLUMN As Long = 5
Public Const LONG_ARPU_COLUMN As Long = 6
Public Const LONG_ARPPU_COLUMN As Long = 7
Sub sample4()
ThisWorkbook.Sheets(1).Cells(2, LONG_NEW_USER_COLUMN).Value = 150
ThisWorkbook.Sheets(1).Cells(2, LONG_AVE_TIME_COLUMN).Value = 1.32
ThisWorkbook.Sheets(1).Cells(2, LONG_ARPU_COLUMN).Value = 200
ThisWorkbook.Sheets(1).Cells(2, LONG_ARPPU_COLUMN).Value = 3200
End Sub
sample4から定数宣言部分が見えていないとしても、
それぞれの値がどの項目かを把握することができますよね。
列番号まではわからなかったとしても、コードを修正する際の対象を見つけるときなどにはすごく重宝します。
定数で定義するのに適しているのは
定数のメリットを紹介しましたが、
私個人的にVBAでExcel操作を行う上で定数宣言したほうがベターだと思うものは以下のとおりです。
- 列番号
- シート名
- 名前の定義
- 何度も使う定型文
ぜひ、定数を活用してメンテナンス性/可読性の高いVBAを書いてみてください。
コメント