VBA

【Excel】VBA  定数とコメントのこと(初心者でも分かりやすい解説)

【Excel】VBA

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

定数ってなにさ?

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

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

定数の特徴

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

変数との違いは

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

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

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

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

定数の宣言

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

    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()
    Dim NUMBERa As Integer          '変数 を宣言して 5 を入れる(定数として使います)
    NUMBERa = 5                     '定数として使う変数に5を入れる
    Dim NUMBER1 As Integer          '変数 を宣言して 5 を入れる
'---------------------------------
'   いろいろと複雑なプログラムが
'   このあたりにあると思ってください
'---------------------------------
    '今回手直しのために、変数の計算を追加したとします。でも間違えちゃっています。
    NUMBERa = NUMBERa * 6    '← 本当はNUMBER1だけど間違えています
'---------------------------------
'    最初の時期に
'    NUMBERa は 5だと思って計算するプログラムが
'    このあたりに入れてあると思ってください
'---------------------------------
     MsgBox (NUMBERa)
End Sub

この例ではNUMBERa は変数ですけど、作ったときには「変数だけど、値は不変」ときめておいたのに、手直ししたときには忘れちゃって、しかも間違えてしまっています。

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

定数を宣言してあると

次は「NUMBERa」を定数として宣言してみます。
Sub const_test3()の最初の2行を消して(頭に「'」を入れて、コメントにしても可)、定数の宣言を入れます。

Sub const_test3()
   Const NUMBERa As Integer = 5    '定数 を宣言して 5 を入れる

この状態で実行してみると

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

ということは

プログラム内で変更しない値は、変数として宣言しても動くけど、間違いを減らすために定数として宣言したほうがいい。
というか、定数として宣言するようにしましょう。

コメントのこと

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

コメントってなに

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

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

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

VBAでのコメントの入れ方

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

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

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

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

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

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

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

まとめ

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

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

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

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

次回は

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


【Excel】VBA

VBA

オブジェクトのこと

ここまで、プログラムの実行結果を MsgBox()で確認していました。でも、そろそろ EXCEL のワークシートに出してもいいかなぁと思います。そこで今回は、VBA から EXECELワークシートをいじるのに欠かせない 「オブジェクト」 について勉強してみます。 変数や定数に演算などは、言葉は難しいけど日本語になっていました。でもオブジェクトなんて英語をそのままカタカナにした言葉は、日本語で理解しづらそうです。ですので、小分けにして少しづつ勉強して行きたいと思います。 もくじ1 ワークシートに "Hell ...

【Excel】VBA

VBA

【Excel】VBA たす・ひく・かける・わる(初心者でも分かりやすい解説)

VBA では、四則演算(たす・ひく・かける・わる)はどう表すのでしょう? もくじ1 四則演算1.1 足し算・引き算1.2 掛け算・割り算2 演算子2.1 演算子の種類2.2 演算の優先順位3  まとめ4  次回は 四則演算 今までに、説明なしに足し算を行ってきました。でも、なんとなくでわかりますよね。 足し算・引き算 足し算はこんな感じで、 変数=数値+数値  でした。 Sub test1() '---- 変数宣言 ----- Dim a as integer '---- プログラム ----- a = ...

【Excel】VBA

VBA

【Excel】VBA  定数とコメントのこと(初心者でも分かりやすい解説)

前回の変数に続いて、今回は定数についてです。 もくじ1 定数ってなにさ?2 定数の特徴2.1 変数との違いは2.2 定数の宣言2.3 ためしてみる3 変数だけじゃダメなの?3.1 なんで定数が必要なの?3.2 変数だけじゃダメな例3.3 定数を宣言してあると3.4 ということは4 コメントのこと4.1 コメントってなに4.2 VBAでのコメントの入れ方4.3 どんなときにコメント入れる?5 まとめ6 次回は 定数ってなにさ? 読んで字のごとく、「定まった数」です。・・・が、変数の場合と同じく「数値」だけで ...

【Excel】VBA

VBA

【Excel】VBA  変数って何?(初心者でも分かりやすい解説)

もくじ1 変数ってなに?2 変数の特徴2.1 変数は中身を書き換えることができる。2.2 VBAの式と数式の「=」は意味が違う。2.3 文字だって入れられる2.4 他にもいろいろ3 変数の宣言3.1 何を宣言するの?3.2 省略可能なのに宣言するの?3.3 変数の宣言の仕方4 まとめ5 次回は VBA(に限らず多くのプログラム言語)で、避けて通れないものに「変数」があります。 変数ってなに? 小難しい定義はあるようですが、ひとまず プログラムの中で 「データを入れておく箱」 だと思ってください。(箱じゃな ...

【Excel】VBA

VBA

【Excel】VBA 実際に動かしてみましょう(初心者でも分かりやすい解説)

もくじ1 プログラム例2 動かして見ましょう3 VBAエディタが教えてくれたこと3.1 「End Sub」の追加3.2 大文字小文字変換3.3 ()の追加4 プログラムの中身4.1 この行の意味4.2 MsgBox()4.3 CALL4.4 "Hello,Wrold!"の部分5 まとめ6 次回は プログラム業界の掟として、新しいプログラム言語を習うときには、「Hello world!」を表示するプログラムを作ることになっているようです。(誇張あり)実用性などは関係なく、まずプログラムが動作していることを経 ...

 就職や副業・在宅ワークにオススメ
 初心者さまにオススメの本
  • この記事を書いた人
  • 最新記事

セル

セル | Excel MOSエキスパート| 経理歴10年| 日商簿記2級 このブログでは Excelについて発信しています。 Excelに悩んでいる人の助けに少しでもなれたら嬉しいです! もし記事を気に入っていただけたらサイトをブックマークもしくは、Twitterをフォローお願いします!

-VBA