【VBA】『1プロシージャ=1処理』の原則|可読性・保守性を高める方法

VBAの可読性・保守性を高めるための基本ルールとして、
「1プロシージャ=1処理」 という重要な原則があります。

これは、1つのプロシージャには1つの役割だけを持たせるという設計方針のことです。

この原則を徹底することで、読みやすく、修正しやすく、バグの少ないコードが書けるようになります。


スポンサーリンク

1. 「1プロシージャ=1処理」とは何か

1つのプロシージャには、1つの目的だけを持たせるという考え方です。

例としては、

  • メッセージを表示する処理
  • データを取得する処理
  • 計算する処理
  • シートに書き込む処理
  • ファイル保存
  • ログ出力

など、それぞれに「役割」を割り当てて分けます。

● NG例(複数処理が混在)

Sub BadExample()
    'データ取得
    '計算
    '結果の書き込む
    'ファイル保存
    MsgBox "完了"
End Sub

これでは後から読んだときに混乱します。


スポンサーリンク

2. 1つの処理に絞るメリット

✔ 可読性が高くなる

「このSubは何をするものか」が名前と内容から直感的にわかる。

✔ バグが起きても場所を特定しやすい

原因調査の範囲が小さくなるため、障害対応が圧倒的に楽。

✔ 再利用しやすくなる

たとえば「データ取得」「出力」「計算」は、別のマクロでも使い回しが可能。

✔ テストがしやすい

小さな単位なら単体テストが簡単。


スポンサーリンク

3. 原則を守った構成例

▼ 悪い例(全部入り)

Sub CreateReport()
    'データ読込
    '加工
    'シート出力
    'メッセージ表示
End Sub

▼ 良い例(役割ごとに分割)

Sub CreateReport()
    Dim data As Variant
    
    data = LoadData()        'データ読込
    data = FormatData(data)  '加工
    WriteToSheet data        '出力
    ShowFinishMessage        'メッセージ
End Sub

関係するプロシージャを役割単位で分けると、構造が非常にわかりやすくなります。


スポンサーリンク

4. 処理の「塊」を見つけるコツ

プロシージャを分割する際、「どこからどこまでを1処理と考えるか?」がポイントです。

● コツ①:自然な文章で言い換えられるところで区切る

例:「データを取得 → 加工 → 出力 → 保存」

● コツ②:動作が「名詞」になるところで区切る

  • データ取得
  • データ加工
  • 画面更新
  • ファイル保存

名詞=役割なので、分割しやすいポイント。

● コツ③:他でも使えそうなら独立させる

共通化できる処理は積極的に切り出す。


スポンサーリンク

5. 実務的な判断基準(どの程度まで分けるべき?)

✔ 10〜30行程度が目安

長すぎるのはNG、短すぎても逆にわかりにくくなる。

✔ 目的が2つ以上あるときは必ず分割

例:
「値を計算し、結果を表示する」 → NG
※表示と計算を分離するべき

✔ メインプロシージャは「流れ」だけにするべき

メインのSubは以下のように流れだけを書くのが最も保守的。

Sub Main()
    LoadSetting
    ReadData
    ProcessData
    OutputResult
    FinishMessage
End Sub

ロジックは全部サブプロシージャへ分離することで、コード全体が視覚的にわかりやすくなります。


スポンサーリンク

6. 原則を守ることで得られる“未来のメリット”

  • 自分が半年後に読んでも理解できる
  • 同僚が見ても迷わない
  • 追加機能を入れやすい
  • テストしやすく、障害修正が迅速
  • コード全体の品質が上がる

結果的に、保守性・再利用性・品質が飛躍的に向上します。


スポンサーリンク

7. まとめ

  • 「1プロシージャ=1処理」はVBA設計の基本
  • 目的が複数あるなら必ず分割
  • メインは“流れ”、処理は“部品”として整理
  • これを守ると可読性・保守性が劇的に向上する

コメント

タイトルとURLをコピーしました