雑にSubプロシージャ名を付け続けるデメリットと、ちゃんと意味のあるSubプロシージャ名をつける唯一の方法を話していく。
きみが雑にSubプロシージャ名をつけるデメリット
- なんの処理をしてるか分からなくなる
- 同じ処理が発生して、何回も書くから時間のムダ
- 3時間でプログラムが書ける処理なのに、1週間かかって時間のムダ
まあこんな感じ。
簡単にいえば人生で大切な時間をわざわざムダにしてると言っていい。そうならないためにもSubプロシージャ名をちゃんと付けられる方法をきみに紹介しよう。
Subプロシージャ名をちゃんと付けられる唯一の方法
1つのSubプロシージャで1つの処理だけにする。これだけ。最初はできないかもしれん。でも少し考えれば分かるはず。
まあ想像しやすいように、具体例としてカレーづくりでたとえてみようか。
VBAでカレーづくりをするなら...
さて、カレーをつくるなら一般的に、ざっくり次の流れができあがるはずだ。まあこれはモジュールの部分になるところって考えてくれ。
※ ()の中身はモジュール名とする
- 食材を買いにいく(BuyFood)
- 料理をする(Cook)
- 盛り付ける(ArrangementOfFood)
ここからモジュールごとにSubプロシージャを作っていくことになるが、まず「食材の買いにいく」からやっていこうか。
Subプロシージャ作成: 食材を買いにいく
食材を買いにいくには、まあだいたい次のような流れになるよね。この1つ1つがSubプロシージャになる。食材を買いにいくなら5つに分けて考えよう。
※ ()名はSubプロシージャ名とする。
- 買いにいく食材を決める(choiceBuyFood)
- 食材をメモして忘れないようにする(buyFoodMemo)
- スーパーへいく(goingSupermarket)
- 決めた食材を買う(buyingFood)
- 家に帰ってくる(goBackHome)
これをコードで書くと次のような感じ。1番上でまとめてる以外は1つのSubプロシージャに対して1つの行動しかしてないことが分かるはずだ。
Option Explicit Sub buyFoodProcess() ' ここに1~5をまとめた処理 Call choiceBuyFood Call buyFoodMemo Call goingSupermarket Call buyingFood Call goBackHome End Sub Private Sub choiceBuyFood() ' 買いにいく食材を決める処理 End Sub Private Sub buyFoodMemo() ' 食材をメモして忘れないようにする処理 End Sub Private Sub goingSupermarket() ' スーパーへいく処理 End Sub Private Sub buyingFood() ' 決めた食材を買う処理 End Sub Private Sub goBackHome() ' 家に帰ってくる処理 End Sub
って感じで書けるようになれば、ぐちゃぐちゃなコードにならないですむし。6ヶ月、1年たっても見ただけで処理が把握できるってわけ。
他にも次のようなメリットがある。
- Privateにすることで他のモジュールに影響しない、管理しやすい
- ムダにコメントをいれる必要がない(ここからFor文で処理...とか(笑))
- スパゲティコードにならないですむ、きれいなコードになる
さて、じゃあ次は料理をしていこうか。
Subプロシージャ作成: 料理をする
次はいよいよカレーを作っていくことになる。まあ一般的な流れは次のような感じだ。
- 食材を切る(cutFood)
- 食材を炒める(fryFood)
- 水をいれて煮る(stewFoodAddWater)
- カレールーを入れる(addRoux)
- ルーがトロトロになるまでかき混ぜて煮る(stewRouxMix)
「えっ?カレーのつくりかた知らない?」まあ、そしたらクックパッドのカレーレシピでも見てくれ(笑)
さて、この流れをコードで書くと次のような感じになる。
Option Explicit Sub cookProcess() ' ここに1~5をまとめた処理 Call cutFood Call fryFood Call stewFoodAddWater Call addRoux Call stewRouxMix End Sub Private Sub cutFood() ' 食材を切る処理 End Sub Private Sub fryFood() ' 食材を炒める処理 End Sub Private Sub stewFoodAddWater() ' 水をいれて煮る処理 End Sub Private Sub addRoux() ' カレールーを入れる処理 End Sub Private Sub stewRouxMix() ' ルーがトロトロになるまでかき混ぜて煮る処理 End Sub
ちなみに、次のように書くことでコードが見やすくなる。
- 最初に処理をまとめたSubプロシージャを作成、Callで呼び出し
- 次に1からの処理を順番に書いていく
さて、最後は盛り付けしていこうか。
Subプロシージャ作成: 盛り付けする
盛り付けには、次の3つの動作が発生するよね。
※ご飯は炊いてあるものとする
- 皿を用意する(platePreparation)
- ご飯を盛り付ける(riceArrangementOfFood)
- カレールーを盛り付ける(curryRouxArrangementOfFood)
コードで書くと次のような感じ。
Option Explicit Sub arrangementOfFoodProcess() ' ここに1~5をまとめた処理 Call platePreparation Call riceArrangementOfFood Call curryRouxArrangementOfFood End Sub Private Sub platePreparation() ' 皿を用意する処理 End Sub Private Sub riceArrangementOfFood() ' ご飯を盛り付ける処理 End Sub Private Sub curryRouxArrangementOfFood() ' カレールーを盛り付ける処理 End Sub
はい、これでカレーが完成。
ちなみに、Subプロシージャ名をしっかりつけるともっと理解が深まる。VBAモジュールを分ける意味はたった1つ【具体例あり】をよかったら見てみるといい。
まとめ: Subプロシージャ名はもうこれで迷わない
上記を気をつければ名前付けに迷うことはないはずだ。
名前は細かすぎるぐらいに分けるでちょうどいい。理解するだけじゃなく実際になにか処理を1つ1つに細かく分けるように練習をしてくれ。
では今回はここまで。