【VBA】そろそろSubプロシージャ名をちゃんとつけようか【教える】
「人生の時間をムダにしたくないならSubプロシージャ名に意味のある名前を」

雑にSubプロシージャ名を付け続けるデメリットと、ちゃんと意味のあるSubプロシージャ名をつける唯一の方法を話していく。

きみが雑にSubプロシージャ名をつけるデメリット

  • なんの処理をしてるか分からなくなる
  • 同じ処理が発生して、何回も書くから時間のムダ
  • 3時間でプログラムが書ける処理なのに、1週間かかって時間のムダ

まあこんな感じ。

簡単にいえば人生で大切な時間をわざわざムダにしてると言っていい。そうならないためにもSubプロシージャ名をちゃんと付けられる方法をきみに紹介しよう。

Subプロシージャ名をちゃんと付けられる唯一の方法

1つのSubプロシージャで1つの処理だけにする。これだけ。最初はできないかもしれん。でも少し考えれば分かるはず。

まあ想像しやすいように、具体例としてカレーづくりでたとえてみようか。

VBAでカレーづくりをするなら...

さて、カレーをつくるなら一般的に、ざっくり次の流れができあがるはずだ。まあこれはモジュールの部分になるところって考えてくれ。

※ ()の中身はモジュール名とする

  1. 食材を買いにいく(BuyFood)
  2. 料理をする(Cook)
  3. 盛り付ける(ArrangementOfFood)

ここからモジュールごとにSubプロシージャを作っていくことになるが、まず「食材の買いにいく」からやっていこうか。

Subプロシージャ作成: 食材を買いにいく

食材を買いにいくには、まあだいたい次のような流れになるよね。この1つ1つがSubプロシージャになる。食材を買いにいくなら5つに分けて考えよう。

※ ()名はSubプロシージャ名とする。

  1. 買いにいく食材を決める(choiceBuyFood)
  2. 食材をメモして忘れないようにする(buyFoodMemo)
  3. スーパーへいく(goingSupermarket)
  4. 決めた食材を買う(buyingFood)
  5. 家に帰ってくる(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プロシージャ作成: 料理をする

次はいよいよカレーを作っていくことになる。まあ一般的な流れは次のような感じだ。

  1. 食材を切る(cutFood)
  2. 食材を炒める(fryFood)
  3. 水をいれて煮る(stewFoodAddWater)
  4. カレールーを入れる(addRoux)
  5. ルーがトロトロになるまでかき混ぜて煮る(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つの動作が発生するよね。

※ご飯は炊いてあるものとする

  1. 皿を用意する(platePreparation)
  2. ご飯を盛り付ける(riceArrangementOfFood)
  3. カレールーを盛り付ける(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つのSubプロシージャで1つの処理だけにする」

上記を気をつければ名前付けに迷うことはないはずだ。

名前は細かすぎるぐらいに分けるでちょうどいい。理解するだけじゃなく実際になにか処理を1つ1つに細かく分けるように練習をしてくれ。

では今回はここまで。

関連記事【VBA】業務効率化に便利なツール【まとめ】

関連キーワード