定数とコメントのこと

前回の変数に続いて、今回は定数についてです。

定数ってなにさ?

読んで字のごとく、
「定まった数」
です。
・・・が、変数の場合と同じく「数値」だけでなく、文字列やオブジェクトを入れることもできます。
 (オブジェクトについては、後々勉強する予定)

ですので、定まった「値」といったほうがいいかもしれません。

定数の特徴

定数の特徴を変数と比べながら見てみましょう。

変数との違いは

定数は
「定義したあと、値を変えられない」
ということが変数とは異なります。

変数と同様に箱に例えると、透明な蓋がくっついていて中身を確認はできるけど、中身を入れ替えることはできない箱といったところでしょうか。

私は、理科室にあった透明樹脂で固められた鉱石や虫なんかの標本みたいに感じてます。

内容を書き換えられないこと以外は、変数とほとんど同じです。
定数を使うときには、実際にはその中身を取り出すわけでなく「中身と同じ値」だというところも、変数と同じです。

定数の宣言

変数と同様に、定数もプログラム内で「この箱は定数ですよ」と、名前とその中身を宣言してから使います。

    Const 定数名 as データ型 = 定数の値    

「Const」 はきっと constant の略ですね。

なお、定数の名前は、(他のプログラム言語含めて)慣習的に全部大文字で書くようです。
あ、忘れてたけど変数の名前は全部小文字だったり、単語の頭だけ大文字だったり、流派があるようです。

ためしてみる

下のプログラムをVBA エディタにコピペして、実行してみてください。

Sub const_test1()
    Const CONST_A As Integer = 5   '定数 CONST_A を宣言して 5を入れる
    Dim var_a As Integer           '変数 var_a の宣言
    Dim var_b As Integer           '変数 var_b の宣言

    var_a = 6                      'variable_a に 6 を入れる
    var_b = var_a + CONST_A        '変数 + 定数 を別の変数に入れる

    MsgBox (variable_b)            '変数 var_bの内容を表示
    MsgBox (CONST_A)               '定数 CONST_Aの内容を表示(変化してない)
End Sub

1つ目のMsgBox は 変数 + 定数の値を表示します。定数も変数と同じように使えることがわかると思います。
OKを押すと2つ目のMsgBoxで 定数を表示します。
変数と同じように、取り出したのではなくがもとの値が残っていることがわかります。

なお今回、プログラムの中にも説明を入れてみました。
VBAでは 行の途中で「 ‘」を入れると、そこから後ろはプログラムとは関係ない「コメント」として扱われます。(コメントについては、下に書いておきます。)

文字列でも試してみましょう

Sub const_test2()
    Const CONST_STR1 As String = "Hello,"    '文字の定数 1を宣言して Hello,を入れる
    Const CONST_STR2 As String = "World!"    '文字の定数 2を宣言して World!を入れる
    Dim variable_str As String               '変数の宣言

    variable_str = CONST_STR1                 '変数に 定数1の内容を入れる。
    variable_str = variable_str + CONST_STR2  '変数に 変数+定数2の内容を追加する

    MsgBox (variable_str)
End Sub

「Hello,World!」が表示されましたか?
文字列の場合でも、変数と定数は同じように扱えることがわかります。

変数だけじゃダメなの?

変数とほとんど同じ性質で名前もつけられるのですから、わざわざ「Const」なんて宣言しなくても、全部変数にしておいても良さそうですよね。
名前の付け方を工夫するなどして、書き換えちゃいけない変数を使って決めておけばなんとかなりそうな気もします。実際なんとかなります。

でも、大きなプログラムになってくると「書き換えられない」ということは大事になってきます。

なんで定数が必要なの?

例えばちょいちょいと一時的のつもりで適当にとローカルルールを決めて、全部変数でプログラムを作ったとします。

  • NUMBERaと後ろにアルファベットがついたら固定値
  • NUMBER1と後ろに数字がついてたら書き換えてもいい

このようなローカルルールは、作った直後は覚えているけど2年後に手直しして流用しようとしたとか、他の人のプログラムをいじることになったけどそんなルールは聞いてないとか、わからなくなることも往々にしてあります。

プログラムを見ていって、「最初の番号の変数を変えればいいや」と、

NUMBERa = NUMBERa + 5 

なんてやっても、普通に動いてしまうので間違いにはなかなか気づきません。
でも定数として宣言しておけば、VBAが「そこはおかしいよ」とエラーを出して教えてくれます。

変数だけじゃダメな例

下のプログラムをVBA エディタにコピペして、実行してみてください。
すでにあった大きなプログラムに、別の人が手直しのために1行だけ追加した例です。

Sub const_test3()
'   Const NUMBERa As Integer = 5    '定数 を宣言して 5 を入れる
    Dim NUMBERa As Integer          '変数 を宣言して 5 を入れる(定数として使います)
    NUMBERa = 5                     '定数として使う変数に5を入れる
    Dim NUMBER1 As Integer          '変数 を宣言して 5 を入れる
'
'    ~~ いろいろと複雑なプログラムが
'    このあたりにあると思ってください ~~
'
    '後に手直しのために、変数の計算を追加したとします。
    NUMBERa = NUMBERa * 6    '← 本当はNUMBER1だけど間違えています
'
'    ~~ 最初の時期に作った
'    NUMBERa は 5だと思って計算するプログラムが
'    このあたりにあると思ってください ~~
'
     MsgBox (NUMBERa)
End Sub

1行目は 1桁目に 「’」が入っているので、VBAはプログラムではなく単なるコメント=らくがきだと理解してくれます。
なので、この例ではNUMBERa は変数です。

途中に間違いがあるのにあっさりプログラムは動いてしました。
後ろの方で、NUMBERaには5が入ってる前提でプログラムが書かれていたりすると、結果が大きく変わってしまいます。

定数を宣言してあると

Sub const_test3() の最初の行の「’」を削除して、次の行の先頭に「’」を入れてください。(これで VBAは、1行目(定数の宣言)はプログラムの一部、2行目は落書きだと思ってくれます。)

実行してみるとコンパイルエラーのダイアログが出てきたと思います。
理由も説明してくれるので、何を間違えていたのかも見つけやすいかと思います。

ということは

定数はなくても動くことは動くけど、間違いを減らすために用意されていると思っていて良さそうです。しらんけど。

コメントのこと

上の説明でちょっとだけ触れましたが、コメントについても書いておきます。

コメントってなに

VBAに限らず、プログラムの中に注釈やメモなど、プログラムコードでは文字を入れておきたいことがあります。

そんなときのため(か、どうかは知りませんが)、いろんなプログラム言語で
「ここから後ろはプログラムとは関係ないよ」
と示す方法が決められているようです。
この、プログラムとは関係ないメモ用の文字列を(少なくとも私の周りでは)「コメント」と呼びます。
Sub const_test3()の1行目のように、プログラムの中身の一部を一時的に動かなくさせる場合などは、「コメントアウトする」なんていい方もするようです。

特定の文字を書くと、そこからからその行の最後までがコメントとなるプログラム言語が多いように思っています。でも、Cのように、始まり(/*)から始まって終わり(*/)までは改行が入っても全部がコメントになるよう言語もあります。

VBAでのコメントの入れ方

VBA では 「’」(アポストロフィ:windowsの日本語キーボードでは [Shift]+[7])のあとは、その行の終わりまでがコメントになります。
一行の途中に’を書いた時は、’まではプログラムコード、’の後ろはコメントになります。

コメントは、VBAエディタでは緑色の文字で表示されます。
複数行にわたって書きたければ、Sub const_test3()の中程にあるように、「’」で始まる行を何行も書けばいいわけですね。
マイクロソフトの説明では、別の説明の中でさらっとだけ説明されていました。

VBAのご先祖のBASICでは「REM」(remarksの略かな?)から後ろがコメントだったので、VBAでも試してみました。
すると文字の色が緑になるようです。VBAでも「Rem」が使えるんですね。
と思ったら、その行の最初のスペース以外の文字がREMであれば「Rem」に整形されてコメント行になるものの、「’」の用にプログラムコードの後ろに、Remをつけたときエラーになってしまいました。
「’」が正式で「Rem」は昔の名残で残っているだけなのかもしれませんね。(深く調べてません)

どんなときにコメント入れる?

目的は何でもいいと思います。
プログラムの説明だけでなく、最初の方に作った人の名前や作った日を書いておいてもいいですし、著作権表示してもいいし。作った日の一言日記やグチを書いておいてもいいし。

ただプログラムを書いている人は「3ヶ月後の自分は知らない人」(どういうつもりでプログラムを書いたかなんてスグ忘れちゃう)だと思っていますので、「知らない人にもプログラムの内容が分かる」ようなコメントを入れることは大事だと思います。

「a = 5 ‘5を代入」
みたいに見れば分かるようなものは、私はじゃまなだけだと感じます。
「a = 5 ‘人数を5人に設定」
のように、一見同じでも数字の意味とか変数の意味を書いておくならアリだと思います。

まとめ

定数だけでは大した量にならないかと思っていましたが、思ったよりは多くのことがわかりました。

  • 定数は、中身を書き換えられない以外は、変数とほぼ同じ
  • データ型も変数と同じ。数値や文字列以外のオブジェクトも入れられる。
  • 定数の宣言は「Const (定数名) as (データ型) = (中に入れる値)」
  • 変数のままでも中身を書き換えなければOKそうだけど、後々のためにも定数は定数として宣言しといたほうがいい。
  • 定数として宣言しておくと、中身を書き換えるようなプログラムは、VBAがエラーを出して教えてくれる。

おまけでコメントについても勉強しました。

  • 行の中で「'(アポストロフィ)」を書くと、その後はプログラムではないのでメモとして使える
  • このメモを「コメント」と呼びます。
    - コメントになるのは、その行の終わりまで。
  • プログラムの一部をコメントにしてしまうことを「コメントアウトする」と呼ぶらしい
  • VBAではコメントは「’」の後ろだけど、プログラム言語によって違う。終わりも行の最後までだったり、終わりのマークまでだったりプログラム言語によって違う。

次回は

変数と定数を使って四則演算や足し算マークなどの「演算子」というものを勉強しようとおもいます。
でも地味なので、時々はExcelをいじるようなプログラムを拾ってきて、解析しながら勉強ってのもありかと思っています。

コメント

タイトルとURLをコピーしました