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

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

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

きみがtest1やら、A2なんて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つの処理だけにする」

Subプロシージャ名はこれだけ気をつければ名前付けに迷うことはないはずだ。

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

くりかえすが、次のような順番で書くとSubプロシージャはきれいに書けるから試してみるといい。

  • 最初に処理をまとめたSubプロシージャを作成、Callで呼び出し
  • 次に1からの処理を順番に書いていく

まあ、がんばってくれ。

・VBAツール一覧

関連キーワード