どうも、そろそろ一年が終わりに近づいてきたので、個人的に今年読んだ本の中でランキングを決めようとしているつづりです。ちなみに現時点では、個人的に物凄く面白いと思える小説に出会えていないので、選考は混戦の様相を呈してます。

とまあ、そんな雑談はおいときまして、今回はVBAをマスターしようの記事第七回目になります。前回は変数の説明をさせてもらいましたので、今回はその逆と呼べる定数について説明していきたいと思います。

正直、変数と比べると使用頻度は少し下がりますが、使うことでのメリットもありますので、そこを踏まえて説明できたらなと考えています。

では、はじめていきましょう。

定数とは?

定数とは任意の文字や、数字にほかの名前を付けることです。変数はコード内で何度も値を変更することができますが、定数は宣言した際に指定した文字や数字を変更することはできません。正に、変数の対極的な存在になります。

定数を使うメリット

前述の通り、定数とは値、文字を別名で指定するだけです。それならば使わなくてもいいじゃんと思う方もいるかもしれません。確かに定数を使わなくてもマクロは組むことはできます。ですが、定数を使うことで以下のようなメリットを得ることができます。

  • 可読性が上がるので、マクロの内容を理解しやすくなる
  • 定数で一か所で指定しているため、修正が楽になる

例を上げてみます。下の画像は三つある商品の税抜きの値段が書かれた表になります。この表に税込みの値段を記入するマクロを作成したいとしましょう。

三つの商品の税抜きの値段だけ記入され税込み価格は空欄になっているExcel上の表

凄い簡単にですが、二つのコードを書きました。どちらも同じように税込みの価格を入力するマクロになります。上は定数を使い、下は定数を使用していません。まず、このコードだけ見た時、どちらの方がわかりやすいと思うでしょうか?

上の方が『消費税』と思いっきり書いてあるのでわかりやすいと思いませんか。これが可読性が上がるという点です。

Sub 定数あり()
Const 消費税 As Double = 0.1

Cells(4, 4) = Cells(4, 3) + Cells(4, 3) * 消費税
Cells(5, 4) = Cells(5, 3) + Cells(5, 3) * 消費税
Cells(6, 4) = Cells(6, 3) + Cells(6, 3) * 消費税

End Sub
Sub 定数なし()

Cells(4, 4) = Cells(4, 3) + Cells(4, 3) * 0.1
Cells(5, 4) = Cells(5, 3) + Cells(5, 3) * 0.1
Cells(6, 4) = Cells(6, 3) + Cells(6, 3) * 0.1

End Sub

次に修正のしやすさですが、消費税が10%から20%になったとしましょう。当然上のマクロも修正が必要になります。左は定数を使っているため、定数の部分1か所の『0.1』を修正すれば完了しますが、右のマクロでは『0.2』と書いた3か所の修正が必要になります。

これはかなり簡単に書いているのでこれだけで済みますが、本来であればマクロのコードはもっと長いです。そう考えると、かなりの修正が必要になってくることが容易に想像できますよね。これが二つ目のメリットである修正のしやすさです。

マクロに限らない話になりますが、作成した人が既におらず、違う人が修正をすることになることがそれなりにあります。その際に大事なのが、メンテナンス(修正)のしやすさと、可読性です。なので、無理やり使おうとはしないまでも、使用できる部分では積極的に使うように意識してもらえたらと思います。

定数の宣言と型

定数の基本形は以下になります。

基本形:宣言 定数名 As 型 = 値

変数の時とほとんど同じです。違うのは『= 値』が必要になる点です。定数は値を固定する必要があるので宣言をするタイミングで値を記載する必要があると考えてください。

それでは、それぞれ軽く触れていきましょう。

宣言

宣言として最も使われるのが『Const』になります。他にもプロジェクト内全体で使用できる『Public』や、宣言したモジュールの中でのみ使用できる『Private』などがありますが、最初の頃は『Const』さえ覚えておけば問題ありません。

定数名

定数名については以下の注意点だけ気を付けてもらえれば自由につけて問題ありません。ただ、基本的には可読性を意識して他の人が見た時にわかるような名前を付けておくことが望ましいです。

定数名命名時の注意点

  • 使用できる文字は『漢字英数字ひらがなカタカナ』+『_(アンダーバー)
  • 記号スペースは使用できない
  • 最初の文字に『数字_(アンダーバー)』は使用できない
  • 変数の適応範囲で同じ変数名は使用できない
  • if,elseなどの予約語は使用できない
  • 半角で255文字以内

型についても変数の時と同じで、定数とする値に対応する型を選ぶ必要があります。最初のうちは、『Long』、『Single』、『String』、『Variant』を使用していれば問題ありません。また、定数に使えるのは『数値』、『文字列』、『日付』などの値型のみ設定可能なので、変数の時よりも若干使用できる型の種類が減っています。最も、減った型については定数で指定しようとすること事態あり得ないので、気にしないで大丈夫です。

型の種類

型名内容格納範囲
Integer整数-32,768~32,767
Long長整数-2,147,483,648 ~ 2,147,483,647
Single単精度浮動小数点正:1.401298E-45 ~ 3.402823E38
負:-3.402823E38 ~ -1.401298E-45
Double倍精度浮動小数点正:4.94065645841247E-324 ~ 1.79769313486232E308
負:-1.79769313486232E308 ~ -4.94065645841247E-324
Currency通貨-922,337,203,685,477.5808 ~ 922,337,203,685,477.00
String文字列20億文字以内まで
Date日付日付:西暦100 年1月1日~西暦9999年12月31日
時刻:0:00:00~23:59:59
Variantバリアントすべてのデータ

組み込み定数

最後に『組み込み定数』ついて説明をしてまとめに入りたいと思います。定数には自分で指定する以外に、あらかじめ用意されている『組み込み定数』というものがあります。下の二つのコードを見てください。どちらも同じ形式のメッセージボックスを表示させるコードです。違う部分は一番後ろの『vbOKCancel』と『1』であることがわかると思います。

Sub 組み込み定数なし()

MsgBox "普通に記載", vbOKCancel

End Sub
Sub 組み込み定数あり()

MsgBox "組み込み定数で記載", 1

End Sub

結果の画面を見ていただけると形式が一緒になっているのがわかりやすいと思います。このようにVBAではあらかじめ用意されている定数が数多く存在しています。残念ながら全てを紹介することはほぼ不可能なので、興味があれば調べてもらえたらと思います。

組み込み定数を使用しないマクロでメッセージボックスの表示されたエクセル画面
組み込み定数なしの出力結果
組み込み定数を使用したマクロでメッセージボックスの表示されたエクセル画面
組み込み定数ありの出力結果

おわりに

定数を上手く扱えるようになると、マクロの可読性、メンテナンスのしやすさが格段に上昇します。マクロを作る際には自分以外の人が見てもわかりやすく、修正しやすいように作る必要があることも頭の片隅においてもらえればありがたいです。

次回はこちらもマクロを作成するのに必要なIF構文について説明したいと考えていますので、機会があればそちらも読んでいただけるとありがたいです。

では、読んでいただきありがとうございました。

作者情報
小説と音楽をこよなく愛する本の虫。一週間本を読んでいないと死にそうになる。最近行った大きな本屋で買った日本神話に出てくる「ヒルコ」についての本にハマって日本神話の関連書を読み漁っている。