[Excel VBA] 定数でコードを見やすく

またなんか新しい用語が出て来たぞ!と身構えなくても大丈夫。定数はとてもシンプルでキミのコードをきれいにしてくれるよ。

変数は値の入れ物だったけど、定数は予め決まった値を入れて、ただそれを色んなところで使い回すだけ。

定数のサンプル

例えば、シート名が「顧客マスタ」だとしたら

Const SheetName As String = "顧客マスタ"

ただこれだけ。(ちなみにStringというのは文字専用の型だよ)

あとは毎回”顧客マスタ” と書く代わりに、SheetNameという定数を使えばいいんだ。↓こんな感じね。

Sub ColoringCells()

    Const SheetName As String = "顧客マスタ"

    '行数カウンター
    Dim RowCounter As Integer

    'データが始まるのは2行目から
    RowCounter = 2

    '1列目が空白になるまでループ
    '2行目の1列目からチェックするよ。途中で空白があったらそこで繰り返しはおしまいになるよ。
    Do Until Sheets(SheetName).Cells(RowCounter, 1) = ""

        '株式会社が名前についていたら、セルをオレンジ。ついてなければ白
        'Instrという関数は特定の文字が含まれていたら、その文字の開始位置を返すよ。
        If InStr(1, Sheets(SheetName).Cells(RowCounter, 2), "株式会社") > 0 Then
            'ColorIndex = 45はオレンジを表しているよ
            Sheets(SheetName).Cells(RowCounter, 2).Interior.ColorIndex = 45
        Else
            'ColorIndex = 2は白を表しているよ
            Sheets(SheetName).Cells(RowCounter, 2).Interior.ColorIndex = 2
        End If

        RowCounter = RowCounter + 1

    Loop

End Sub

 1点注意するところは、”顧客マスタ”と入れていたときは、ダブルクオテーションで囲っていたね。これは文字列として扱っていたからなんだけど、定数の場合はダブルクオテーションはつけてはいけないよ。もし”SheetName”とやってしまうと、定数とは見なされずに、ただの「SheetName」という文字列としてプログラムは認識してしまうからね。

定数のメリット

 わざわざ定数なんか使わなくても「顧客マスタ」と書けばいいじゃないか!と思うかもしれないけど、例えばこのシート名が変わった時に、もし 「顧客マスタ」 と記述していたら、それを全部書き変えなくちゃいけないけど、定数を使っていたら、それを定義しているConst のところだけ書き換えればいいんだよ。

ちなみに 「顧客マスタ」 から 「顧客マスタ2」 にシート名を変換したら、ただ置換をすればいいじゃんと思うかもしれないけど、個人的にはコードの中で置換を行うのは危険です。

 特に全部一気に置換すると関係ないところまで置換していたりして、プログラムが動かなくなったりするから、そういった意味でも定数を使うのをお勧めします。

 それに、定数はだいたいプログラムの始めの箇所に記述するから、そういった固定の値をまとめておくとわかりやすいっていうメリットもあるよ。

関数を使ってより見やすいコードに  Excel自体にもsumとかifとか色々な関数があって、事務作業をする人ならみんな使ったことがあ...