ログ出力モジュール【VBA|クラスモジュール】

この記事は約4分で読めます。
記事内に広告が含まれています。

概要

本記事では、Excel VBAで作成したログ出力モジュールについて解説します。
このクラスモジュールを使用することで、マクロ実行時の処理内容やエラー発生状況などをテキストファイルに記録し、デバッグや分析に役立てることができます。

クラスモジュールの設計思想

  • カプセル化: ログ出力に関する処理をクラス内に集約し、外部からの影響を最小限に抑えます。
  • 再利用性: 任意のモジュールから呼び出すことができ、コードの重複を減らします。

クラスモジュールのコード

Option Explicit

Const EXT_LOG = ".txt" ' ファイルの拡張子
Const FILE_NAME = "log" ' ログ出力ファイル名

Private Function WriteLog(text As String) As Boolean
    
    On Error GoTo myError
    
    Dim filePath As String
    Dim log As String

    ' カレントディレクトリーの取得
    filePath = ActiveWorkbook.path

    ' ログ出力内容
    log = Format(Now, "yyyy/mm/dd HH:MM:SS") & " " & text
    
    ' ファイルを開く
    Open filePath & "\" & FILE_NAME & EXT_LOG For Append As #1
    
    '開いたファイルに書き込む
    Print #1, log
    
    '開いたファイルを閉じる
    Close #1
    
    WriteLog = True
    
    Exit Function
myError:
    WriteLog = False
End Function

Public Sub Log(text As String)
    Call WriteLog(text)
End Sub

使い方

  1. クラスモジュールの挿入: 新しいクラスモジュールを作成し、上記のコードを貼り付けます。
  2. インスタンス化: 標準モジュールなどで、このクラスのインスタンスを作成します。
Dim logger As Logger Set logger = New Logger
  1. ログ出力: ログを出力したい箇所に以下のように記述します。
logger.Log "処理を開始しました"
 ' 処理内容 
logger.Log "処理を終了しました"

ログ出力結果の例

2024/09/11 16:00:00 処理を開始しました
2024/09/11 16:00:10 処理を終了しました

各部の解説

  • FILE_NAME定数: ログファイル名を指定します。
  • WriteLogプロシージャ: 実際にログをファイルに書き込む処理を行います。
  • Logプロシージャ: 外部から呼び出されるメインのログ出力プロシージャです。

特徴と注意点

  • クラスモジュールであること: クラスモジュールを使用することで、コードの構造化と再利用性が向上します。
  • 柔軟性: FILE_NAME定数を変更することで、ログファイル名をカスタマイズできます。
  • パフォーマンス: 大量のログを出力する場合、パフォーマンスに影響が出る可能性があります。その場合は、ログの出力頻度を調整したり、ログファイルのサイズを制限するなどの対策が必要になります。

機能拡張のアイデア

  • ログレベル: ログの重要度に応じて、異なるレベル(Debug, Info, Warning, Errorなど)を設定できるようにする。
  • 出力形式: ログの出力形式をカスタマイズできるようにする(CSV形式など)。
  • 複数ファイル: ログファイルを日付ごとに分割したり、モジュールごとにファイルを分けるなど、柔軟なファイル管理を実現する。

まとめ

このVBAログ出力クラスモジュールは、マクロのデバッグやエラー分析に非常に役立ちます。クラスモジュールとして設計されているため、再利用性が高く、大規模なプロジェクトでも活用できます。

コメント

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