プロシージャの開始と終了について
今回の目標
- プロシージャの開始文言とルールを知る
- プロシージャの終了文言を知る
説明
プロシージャの開始文言(プロシージャ名について)
プログラムの開始時には開始文言があり、「Sub ファンクション名」で始めなければなりません。
Sub プロシージャ名
「プロシージャ名」は下記の場合以外は、好きなアルファベットや日本語、_(半角アンダーバー)も使えます。
-
予約語
ExcelVBAで使用するため、文法などのため予約している単語のことです。言い換えると「この単語は文法のため、使用しないでね」という単語です。
VBAエディタでは予約語が青色に表示されることが多いです。予約語一例
予約語 用途・役割 Dim 変数の宣言 Set オブジェクト型変数への代入 Sub サブプロシージャの定義 Function ファンクションプロシージャの定義 End プロシージャや構文の終了 If 条件分岐の開始 For 反復処理の開始 Next Forの制御 Do 反復処理の開始 Loop Doの制御 補足ですが、プロシージャ名「Dim」はエラーとなりますが、プロシージャ名「Dimo」や「Dio」はOKです。
-
プロシージャ名の1文字目に「_(半角アンダーバー)」
_を先頭に付けることはできません。ただし、2文字目以降であれば使用することが出来ます。
OKなプロシージャ名:File_Close
NGなプロシージャ名:_FileClose
-
_(半角アンダーバー)以外の記号
_以外の記号、例えば+や-、*は使用することはできません。 -
既に使用しているプロシージャ名
初心者の方はあまり気にしなくてよいです。これは、慣れたら読み直してください。
「Sub ●~End Sub」が1つのプログラムとなりますが、End Sub の次の行以降に「Sub プロシージャ名」と入力すると新たにプロシージャを作成することができます。その時、既に作成しているプロシージャ名と同じプロシージャ名で作成することができません。
ファンクション名として問題ない例を挙げます。
main1
プログラムスタート
Sample_Program
次に、ファンクション名として問題がある例を挙げます。
-
_main
最初がアンダーバーのため、問題があります。 -
End
予約語のため、問題があります。
予約語と呼ばれるいくつかの語や使用してはいけない記号をプロシージャ名にしようとすると、下記のエラーが発生します。
予約後を使用してエラー
使用できない文字を使用してエラー
サブプロシージャ名の使用できない文字が選択された状態になり、その行は赤字になっていますね。
予約語は10種類以上あり、すべて覚えようとしても初心者の方にはハードルが高いと思います。
上記画像のエラーが表示されたら、予約語か使用不可の文字だから名前を変える必要がある程度の認識で大丈夫でしょう。
プロシージャの終了文言
先がプログラムの開始のための文言でしたが、逆に終了のための文言もあります。
「End Sub」と入力することでプログラム終了を表します。
End Sub
先の開始時の文言は覚えてらっしゃいますか?「Sub Function名」です。
下記画像は正しく入力したときの例です。
この状態で、キーボードの「Enter」キーを入力してください。
すると、下記の画像のように「End Sub」が自動的に追記されます。
これで最短のプログラムの完成です。ただ、処理を書いていないため、プログラムを動作させても(動作開始方法は次章にて説明)セルなど何も変化はありません。
プロシージャとは
「Sub プロシージャ名」から始まり「End Sub」で終わる1つの塊のことです。
プログラム初心者の方は、まだ深く理解しなくても良いと思います。
プログラム言語習得者の方なら、「プロシージャとは関数型言語の関数にあたる」と言えば掴みやすいでしょうか。
C言語やC++では、main関数からプログラムが開始されますが、ExcelVBAでは開始する関数(プロシージャ)の名前は自由です。では「どの関数からスタートするのか」という疑問が湧くと思いますが、それは次章にて説明します。
確認テスト
次の問いに答えなさい。
-
ファンクション名として正しい選択肢を全て挙げよ。
MainFunc
End
えんど
_Sample
Main-Sample
【解説】
下記の通りです。
-
MainFunc
問題ありません。 -
End
→予約後のため、エラーが発生します。
-
えんど
問題ありません。 -
_Sample
→1文字目に、_(アンダーバー)があるため、エラーが発生します。
_(アンダーバー)を使用する場合は、2文字目以降でなければなりません。
仮に「S_ample」ならエラーが発生しません。 -
Main-Sample
_(アンダーバー)以外の記号である-(マイナス)を使用しているため、エラーが発生します。※選択肢Dのようにプロシージャ名の先頭に_(アンダーバー)を置くとエラーになります。