【入門編】プロシージャの分割:1つのメソッドを20行以内に収めるリファクタリングの第一歩 – Excel VBA解析バイブル

スポンサーリンク

巨大なマクロは「負債」である。VBAを掌握するための「20行分割」の美学

こんにちは。現場で苦しむコードを見てきたエンジニアとして、今日は一つだけ、皆さんに一生モノの技術をお伝えします。

皆さんが書いているそのVBAコード、「1つのプロシージャ(Sub)」に、何行書いていますか?

もし100行、200行と続くコードがあるなら、それは「マクロ」ではなく「魔物」です。修正するたびに別の場所でエラーが出る、あの悪夢のような状況を回避するための唯一の解法。それが「20行以内でのプロシージャ分割」です。

今日は、マクロの記録から脱却し、メンテナンス可能なコードを書くための第一歩を一緒に踏み出しましょう。

1. なぜ「20行」なのか?

プログラミングの世界には「可読性の限界」というものがあります。
人間の脳が一度に把握できる情報の塊は限られています。1つのSubが画面をスクロールしないと見渡せないような長さになると、途端に論理構造が崩れます。

  • 20行のメリット:
  • 画面に収まるので、全体像が一目で理解できる。
  • 「何をしているか」が関数名(プロシージャ名)で説明できる。
  • 特定の機能だけを切り出して、別のシートやブックでも再利用できる。

2. 悪い例:全てを詰め込んだ「スパゲッティ・コード」

まずは、よくある「全部入り」のコードを見てみましょう。

‘ 修正が困難な例:データ処理、書式設定、メール送信が混ざっている
Sub ProcessAllData()
Dim i As Long
‘ データの読み込み
For i = 2 To 100
If Cells(i, 1).Value <> “” Then
‘ 複雑な計算
Cells(i, 2).Value = Cells(i, 1).Value 1.1
‘ 書式設定
Cells(i, 2).Font.Bold = True
‘ 条件付きメール送信判定
If Cells(i, 2).Value > 1000 Then
‘ (ここに長いメール送信処理が続く…)
End If
End If
Next i
End Sub

このコード、どこか一箇所を変えようとすると、全体を壊すリスクがありますね。これが「スパゲッティ・コード」です。

3. 良い例:役割を明確にする「分割の魔法」

では、これを「機能」ごとに分解してみましょう。メインの処理は「指揮者」に徹し、個別の処理は「専門家」に任せるのです。

‘ メイン処理:流れを制御するだけ
Sub RunAutomation()
Dim i As Long
For i = 2 To 100
If IsValidData(i) Then
Call CalculateAndFormat(i)
Call SendAlertIfHigh(i)
End If
Next i
End Sub

‘ 専門家1:データ判定
Function IsValidData(row As Long) As Boolean
IsValidData = (Cells(row, 1).Value <> “”)
End Function

‘ 専門家2:計算と書式
Sub CalculateAndFormat(row As Long)
Cells(row, 2).Value = Cells(row, 1).Value 1.1
Cells(row, 2).Font.Bold = True
End Sub

‘ 専門家3:メール判定
Sub SendAlertIfHigh(row As Long)
If Cells(row, 2).Value > 1000 Then
‘ ここにメール送信処理を書く
End If
End Sub

この構造の凄み

  • テストが簡単: 例えば計算ロジックを変えたいとき、`CalculateAndFormat`だけを修正すればいい。他には一切影響しません。
  • 再利用性: `IsValidData`は、別のマクロでもそのままコピーして使えます。
  • デバッグの速さ: エラーが出たとき、どの「専門家」が失敗したのかが一瞬で分かります。

4. 初心者が陥りやすい罠と対策

「分割すると、変数の引き渡しが面倒そう…」と感じるかもしれません。

  • 罠: 全ての変数をグローバル変数(モジュールの一番上に書くPublic変数)で済ませようとする。
  • 解決策: `Call`で呼び出す際に、引数(引数:`row As Long`など)として値を渡す癖をつけてください。最初は難しく感じるかもしれませんが、「その関数が必要なデータだけを渡す」というルールを守れば、バグは劇的に減ります。

最後に:プロのエンジニアへの道

ここをクリアすれば、あなたはもう「記録されたマクロを動かすだけの人」ではありません。「業務のロジックを設計するエンジニア」の入り口に立っています。

まずは、今あなたが書いているそのコードを、まずは2つに分けるところから始めてみてください。たったそれだけで、あなたのVBAライフは劇的に安定します。

何かわからないことがあれば、またいつでも聞きに来てくださいね。あなたのコードが、美しく洗練されたものになることを応援しています!

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