【VBA】標準モジュールとクラスモジュールの違い・使用例・実務での使い分け

標準モジュールとクラスモジュールの違いを理解したうえで、実務ではどのような場面で使い分けるべきなのか。
ここでは、より具体的なコード例と、現場で役立つ設計思考をまとめて解説します。


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. まとめ

  • 標準モジュール:処理中心、マクロの中心、共通関数に最適
  • クラスモジュール:データ構造・イベント・複数インスタンス管理に最適
  • 実務では小規模なら標準モジュール、複雑化してきたらクラスを導入
  • 設計判断は「保守性・可読性・拡張性」を基準にすると成功しやすい

コメント

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