- 「変数」はよく使うけど「定数」って何?
- 「定数」と「変数」って何が違うの?
- 「定数」って何で使うの?
定数とは、ある値を入れるための専用の箱のことです。
「値を入れる箱」という点は変数と同じですが、定数は値を一度入れたら中身を変更することが出来ません。
これが、変数と定数の大きな差です。
この記事では、以下について解説しています。
- 定数とは
- 定数と変数の違い
- 定数を使う意味
VBA初心者だけでなく、プログラミング初心者・「変数」を勉強した方には特におすすめな内容となっています。
ぜひ、参考にしてみてください。
定数とは
定数とは、ある特定の値を入れるための専用の箱のことです。
定数は宣言しないと使えません。
VBAでは、以下のように宣言します。
Const AISATU As String = “こんにちは”
そして、類義語に変数があります。
定数も変数もプログラミングの基礎なので、合わせて覚えておいてください。
変数については以下の記事で詳しく解説しています。
定数と被る部分もあり、重要なことを説明していますので、まずはこちらからご覧いただけるとスムーズに理解できると思います。
【変数とは?】プログラミングの基礎をVBAを例にわかりやすく解説!
変数との違い
定数は変数とよく似ていますが、決定的に違う特徴が1つあります。
それは、一度設定した値は途中で更新することが出来ないという点です。
それ以外に関しては基本的に変数と同じで、「スコープ」「型」などの要素も変数と変わりありません。
スコープ・型について知りたい方は以下の記事をご覧ください。
【変数とは?】プログラミングの基礎をVBAを例にわかりやすく解説!
変数は「型」を宣言した場合、その型の種類であれば、処理の途中でも代入することが可能です。
例えば、「Long(長整数)型」の変数であれば、
total = total + 1
このように、計算した値を変数に代入し、更新することが出来ます。
しかし、定数は宣言時に値を格納します。
そして、その値は2度と更新することが出来ません。
例えば、
Const GAFA = “Google+Apple+Facebook+Amazon”
という定数があって、「Facebook」を「Meta(旧Facebook)」と直したいときに処理の途中で更新することはできません。
宣言時に格納した値を書き換える必要があります。
なぜ定数を使うのか?
なぜ、わざわざ定数を使うのでしょうか?
その理由は4つあります。
- 分かりやすくする
- マジックナンバーをなくす
- メンテナンスを簡単にする
- ミスの防止
順番に解説していきます。
分かりやすくする・マジックナンバーをなくす
1つ目の理由は「分かりやすくする・マジックナンバーをなくす」という理由です。
マジックナンバーとは、処理の途中に現れる何かを表す数字のことで、コードを見ただけでは何を示しているのかが分からないため「マジックナンバー」と呼ばれています。
いきなりIf A >= 60 Then
みたいな条件式が表れても、何を示しているか分かりません。
なので「60」を「Goukakutenn(合格点)」などの定数に変更しておくと、パッと見で分かりやすくすることが出来ます。
If A ≥= Goukakuten Then 合格の時の処理 Else 不合格の時の処理 End If
「分かりやすくする」という点では変数も同じですが、定数の場合は固定値(固有名詞や特定の数値など)を扱うことになるため、定数を使わない場合に比べてより分かりやすくなります。
メンテナンスを簡単にする
2つ目の理由は「メンテナンスを簡単にする」という理由です。
これも、変数と同じ理由ですが、定数の場合は顕著に表れます。
定数の場合、値は宣言時に代入します。
例えば、定数に消費税を設定したシステムがあったとすると、
Const SYOUHIZEI As Double = 0.08
このように宣言されていると思います。
しかし、現在の消費税率は10%のため、変更しなくてはいけません。
そのような場合に改修はこの宣言文1行のみで済みます。
Const SYOUHIZEI As Double = 0.1
このように、定数を使い、宣言時の値を変えることで簡単にメンテナンスすることが出来ます。
ミスの防止
3つ目の理由は「ミスの防止」という理由です。
定数は「一度設定した値を変えられない」という特性があるため、処理の途中で定数に代入しようとするとエラーになります。
もし、変数で定数に設定するような値を宣言した場合は、エラーにならずに実際に処理を動かしたときに思わぬバグを発生させる原因になってしまいます。
また、コードに直接固定値などを書く場合、スペルミスやタイプミス・処理の方法と値が合っていないなどのミスの原因に繋がってしまいます。
- スペルミス
Gogle:本来は「Google」 - タイプミス
0,08:小数点がカンマになっている - 処理の方法が合っていない
消費税:ある処理では「0.1」で消費税額を求め、ある処理では「1.1」で税込み価格を求めているため、ごちゃごちゃになっている。
単体で見ればすぐに気づけるミスですが、完成間近で単純なミスのエラーに当たると沼にはまる原因になったりします(実体験)
こうしたミスをコードを組む段階(コーディング)で防ぐためにも、定数を活用することが大事になってきます。
活用例・活用場面
定数は基本的に「固定値」に設定すべきで、私は特に「今後、変更する可能性のある固定値」と「システムで使用する固定値」に関しては絶対に定数にすべきだと考えています。
「何を定数にすべきか」・「何を直接書くべきか」というのは、環境やシステムによって異なるので明確な答えはありませんが、出来るだけ定数にした方が良いと思っています。
例えば…
- Excel関係
ブック名・シート名・セル位置(「A2」など) - ファイル関係
インプットやアウトプットに指定している固定パス - データのヘッダー名
「商品名」「個数」などのデータの項目名
など、挙げればキリがありませんが、具体例を出すと上記のようなときに定数をよく使っています。
そして、定数は色んな処理に使用されることが多いため、Public型で宣言し、宣言専用のモジュールを用意することが多いです。
それぞれのモジュールで宣言されてしまうと重複したり、メンテナンスが大変になるので、1つのモジュールに集約することが多いです。
このあたりの「書き方」については、試行錯誤しながら自己流を見つけていくのが良いと思っています。
まとめ|「定数」を使って読みやすいコードを組もう!
今回は、「定数」に関して、定数とは何か・なぜ使うのか・変数との違いについて解説していきました。
定数は使用しなくてもシステムは動きます。
しかし、メンテナンスや可読性を考えると絶対に使用したほうが良いです。
ただ動くシステムではなく、中身も美しいシステムを作れるように覚えておきましょう!