【Excel VBA】ログ出力機能を実装する

VBA

こんにちは、おくやんです。

このブログでは、開発や業務効率化に役立つ実践的な技術やノウハウを紹介しています。

自作のVBAツールでログの出力を行いたい!
だけどVBA標準でログ出力する機能はない。。。
簡単に実装できる方法があれば。。。

今回は、このようなお悩みを解決します。

  • 本記事の内容
  1. VBA標準では実装されていないログ出力処理を誰でも簡単に実装できるようにしたクラスモジュールを紹介
  2. クラスモジュールが持つ機能を解説
  3. クラスモジュールを利用する際のポイント3点をサンプルコードとともに紹介

今回はExcel VBAで、ログ出力を行う機能の実装方法についてまとめました。

サンプルコードも載せていますので、VBAツールを作成する際に参考にしてください。

ログ出力機能の役割

ログ出力機能の役割

最初に今回ご紹介するVBAのログ出力クラスが果たす役割について説明します。

ログの出力機能と一口に言っても、操作ログでしたりアクセスログなど様々な用途のログが存在します。

その中でログクラスが担う役割としてはアプリケーションログの出力を想定したものです。

具体的には、正常な動作の記録、発生したエラーの記録、ユーザーによる予期しない操作の成功・失敗の記録などを行います。

他言語の経験がある方はLoggerクラスに近い役割をすると思っていただければ、理解しやすいかもしれません。

プログラム中からログ出力クラスを呼び出すだけで、VBAでも簡単にアプリケーションログの出力が可能となります。

それでは使い方の説明をしていきます。

クラスモジュールを利用してログ出力を行う

クラスモジュールの機能を解説

クラスモジュールの使い方を説明します。

詳細な仕様については「【Excel VBA】開発を効率化!ログ管理を行うクラスモジュール」を参照ください。

note(ノート)

こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …

VBA標準ではログ出力の機能が実装されていません。

それを補うために本クラスモジュールでは、下記2つの機能を実装しています。

  • ログ出力クラスの実装機能
・ログシート作成機能
・ログ出力機能

ログシート作成機能

ログシート作成機能はログの出力先となるシートを自動作成する機能です。

シート上の項目は下記となります。

  • シート上の項目
出力時間
レベル
内容
ログシートの内容

ログ出力機能

ログ出力機能では作成したシートにログ出力を行います。

出力できるログの種類は下記4種類です。

  • ログの種類
デバッグログ
インフォメーションログ
アラートログ
エラーログ

デバッグログに関しては、デフォルトではフィルターで見えないようになっています。

VBAツールを保守する人向けに利用してください。

フィルター

VBA サンプルプログラムの紹介

VBA サンプルプログラムの紹介

それではログ出力クラスを利用したVBA サンプルプログラムを紹介します。

以前紹介したシート検索プログラムにクラスモジュールを利用してログ出力を追加してみましょう。

サンプルプログラムは下記からダウンロードできます。

note(ノート)

こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …

今回のポイントは下記3点です。

  • ログ出力を実装する上でのポイント
  1. ログシートの作成
  2. 保守向けのログ出力
  3. ユーザ向けのログ出力

1. ログシートの作成

まずはログの記録先となるシートの作成を行っています。

Init関数を呼び出すことで、作成が可能です。

' ログシート作成
Dim log As Logger: Set log = New Logger
log.Init

サブモジュールからログ出力したい場合など、既存のログシートに追記する場合はInit関数を呼び出す必要はありません。

Init関数が呼ばれるたびにシートが初期化されてしまうためご注意ください。

Sub main()
  ' ログシート作成
  Dim log As Logger: Set log = New Logger
  log.Init
  
  ' ログの記録
  log.InfoMsg "プログラムを開始します"

  ' クラスモジュールのインスタンスを生成
  Dim libWb As LibWorkBook: Set libWb = CreateWsInstance(path)
  
  ' ・・・

End Sub

Private Function CreateWsInstance(path As String) As LibWorkBook
  ' ログの記録(Init関数の呼び出しは不要)
  Dim log As Logger: Set log = New Logger
  log.DebugMsg "ファイルオープン処理実施[path = " & path & "]"
  
  ' ・・・

End Function

ログの呼び出し結果

手動で作成したシートに追記することもできますが、VBAプログラムから自動作成することにより、シートのフォーマットを共通化することができます。

2. 保守向けのログ出力

サンプルではVBAツールの保守を行う上で必要なデバッグログ出力を行っています。

エラーが発生した際にどの処理まで到達しているかなど、ログを確認することで調査できるようにしてください。

デバッグログはDebugMsg関数で出力可能です。

log.DebugMsg "ファイルオープン処理実施[path = " & path & "]"

本番環境でVBAツールを利用し始めると、デバック作業が難しくなります。

必ず保守向けのログ出力をするようにして、運用・保守しやすい状態を作りましょう。

3. ユーザ向けのログ出力

保守向けのログ以外にも、VBAツールの利用者向けのログ出力を行っています。

' 操作ログ
log.InfoMsg "プログラムを開始します"
log.InfoMsg "プログラムを終了します"

' エラーログ
log.ErrMsg "対象ファイルが存在しません[path = " & path & "]"

ユーザはログを見ることで、VBAツールが正常に処理できたことを把握できます。

また、エラーが発生した場合は理由をログに記載するとユーザ側での対処が可能です。

ログレベルに応じて下記3つの関数が利用できます。

関数 レベル 用途
InfoMsg Info 情報を提供するメッセージレベル 対処必要だが,通知する必要がある情報を出力する
AlertMsg Alert 潜在的な問題を示すメッセージレベル 問題が発生していても,処理が継続できる場合に出力する
ErrMsg Error 重大な障害を示すメッセージレベル 問題が発生して,処理が継続できなかった場合に出力する

まとめ: VBAでログ出力機能を実装しよう

まとめ: VBAでログ出力機能を実装しよう

今回はExcel VBAで、ログ出力を行う機能の実装方法についてまとめました。

標準機能では用意されていない機能ですが、下記クラスモジュールを利用することで簡単に実装が可能です。

note(ノート)

こんにちは、おくやんです。 Excel VBAの開発効率を大幅に向上させる、自作のライブラリクラスをご紹介しています。 …

また実装する上でのポイントは下記となります。

  • ログ出力を実装する上でのポイント
  1. ログシートの作成
  2. 保守向けのログ出力
  3. ユーザ向けのログ出力

クラスモジュールを上手く利用し、実装や運用・保守を効率的に行えるようにしてください。

最後まで読んでいただき、ありがとうございます。


最新情報をチェックしよう!