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設計の基本
- 目的が複数あるなら必ず分割
- メインは“流れ”、処理は“部品”として整理
- これを守ると可読性・保守性が劇的に向上する
コメント