標準モジュールとクラスモジュールの違いを理解したうえで、実務ではどのような場面で使い分けるべきなのか。
ここでは、より具体的なコード例と、現場で役立つ設計思考をまとめて解説します。
目次
1. 標準モジュールの使用例(実務で多いパターン)
① メイン処理をまとめる(実行マクロ)
標準モジュールは「実行の入口」として最適です。
Sub MainProcess()
Call LoadData
Call FormatSheet
Call ExportReport
End Sub
Sub LoadData()
'データ読み込み
End Sub
Sub FormatSheet()
'書式設定
End Sub
Sub ExportReport()
'レポート出力
End Sub
ポイント
- 複数の処理をまとめるフロー構築は標準モジュールが向いている
- どの処理が何をしているか、名前で見てすぐ分かる構成が重要
② 共通関数(Utility系)をまとめる
例えば、ファイルパスの取得や文字列加工など“どこでも使える処理”は標準モジュールへ。
Public Function GetTodayPath() As String
GetTodayPath = ThisWorkbook.Path & "\" & Format(Date, "yyyymmdd")
End Function
ポイント
- 実務では共通関数モジュールを作っておくと効率が大きく向上
- 他のモジュールからも呼び出しやすい
③ シンプルなデータ処理
配列・Dictionary・Collectionで管理できる程度のデータ量なら標準モジュールのみで十分です。
2. クラスモジュールの使用例(より高度な構造を設計したいとき)
① 独自オブジェクトでデータ+処理をひとまとめにする
例えば「社員」データを1つの“モノ(オブジェクト)”として扱う例です。
クラスモジュール:clsEmployee
Public Name As String
Public Age As Long
Public Sub ShowInfo()
MsgBox Name & "(" & Age & "歳)"
End Sub
呼び出し側(標準モジュール)
Sub TestEmployee()
Dim emp As New clsEmployee
emp.Name = "田中"
emp.Age = 30
emp.ShowInfo
End Sub
ポイント
- 名前・年齢などのデータと、表示処理を「同じ箱に入れる」ことで整理される
- 実務で複数レコードを扱う場合は特に効果が大きい
② イベント処理をクラスで管理(WithEvents)
Excelの Application や Worksheet のイベントを外に出したい場合はクラス必須。
クラスモジュール:clsAppEvents
Public WithEvents App As Application
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "セルが変更されました:" & Target.Address
End Sub
呼び出し側
Dim evt As clsAppEvents
Sub StartEvents()
Set evt = New clsAppEvents
Set evt.App = Application
End Sub
ポイント
- 大規模ファイルの監視・自動チェックなどは実務でよく利用
- イベントロジックを分離することで保守がしやすい
③ 大量データを“レコード単位”で扱う
AccessのDAOやSQL的な考え方で、1行=1オブジェクトとして扱うとコードがスッキリします。
例:
- 顧客リスト
- 商品データ
- 勤怠レコード
※ 集計や条件検索などをクラスにまとめることで拡張が容易になる
3. 実務的な設計の考え方(重要ポイント)
✔ 1. 小規模 → 標準モジュールのみで十分
実務の9割は標準モジュールで完結します。
✔ 2. データが複雑化してきたらクラスの出番
次のようなタイミングでクラスを導入すると効果的です。
- 配列が三重、四重になり可読性が落ちてきた
- 1レコードに複数の処理を紐づけたい
- 設定情報を一元管理したい
- イベント処理を外出ししたい
✔ 3. 保守性を最優先にする
重要な判断ポイント:
- 後から見たとき理解しやすいか?
- 他の開発者が見ても意図を理解できるか?
- 拡張しやすい構造になっているか?
クラスは強力ですが、「使いすぎると逆に複雑化」するため、
目的が明確なときにだけ導入するのが実務的にはベストです。
4. まとめ
- 標準モジュール:処理中心、マクロの中心、共通関数に最適
- クラスモジュール:データ構造・イベント・複数インスタンス管理に最適
- 実務では小規模なら標準モジュール、複雑化してきたらクラスを導入
- 設計判断は「保守性・可読性・拡張性」を基準にすると成功しやすい
コメント