ログを書き出すってどういうこと?
マクロで何か問題が起きたとき、「何が起きたのか」を後から確認したいことがあります。
たとえば、
- エラーの内容を記録しておきたい
- 誰がいつマクロを使ったかを残したい
- 実行内容を自動で保存しておきたい
そのようなときに使えるのが、「ファイル出力(ログ出力)」です。
VBAでは、テキストファイルにメッセージを書き込むことができ、自分用の記録やエラー分析に役立ちます。
ただ、テキストに書き込む方法は少し複雑に見えるので、初めのうちはとっつきにくいかもしれません。
実装するメリット
- 実行結果を記録として残せる
- エラーが発生した原因を後で確認できる
- 利用者の操作履歴を見える化できる
- 開発者やチームメンバーと情報を共有しやすくなる
最もシンプルなファイル出力の例
まずは、「C:\log.txt」というファイルに、簡単な1行メッセージを書き込む処理を紹介します。
例
Sub WriteLog()
Dim msg As String
Open "C:\log.txt" For Append As #1
Print #1, msg
Close #1
msg = "ログを書き込みました:" & Now
End Sub
解説
Open "C:\log.txt" For Append As #1
で、ログファイルを追記モードで開きます。Print #1, msg
で1行書き込みます。- 最後に
Close #1
でファイルを閉じます。← これを忘れると不具合のもとになるので重要です。 msg
に記録したい文字列(日付入り)を代入します。
各構文の意味(詳細)
Open "C:\log.txt" For Append As #1
Open
:ファイルを開く命令です。"C:\log.txt"
:保存するファイルの場所(Windowsのパス)For Append
:追記モード(既存の内容を残したまま末尾に追加)As #1
:このファイルを「1番」として操作します。番号は必須。
Print #1, msg
- ファイル番号1番(= #1)に、変数
msg
の中身を書き込む - 1行ずつ追記されます(改行付き)
Close #1
- 開いたファイルは必ず閉じます。これを忘れるとExcelやファイルがフリーズすることがあります。
よくあるエラーと注意点
- ファイルが開けない:
- ファイルのパスが間違っている(全角文字やスペースに注意)
- ネットワークドライブやOneDrive上で失敗する場合あり
- ログが上書きされると思っていたら追記される:
Append
は追記。最初から書きたい場合はFor Output
を使います(ただし全部消えるので注意)
- 日本語が文字化けする?
Print
は通常文字化けしませんが、必要ならWrite
と使い分けも可能
項目 | Print | Write |
---|---|---|
区切り文字 | 半角スペース | カンマ区切り(CSV形式っぽくなる) |
文字列の囲い方 | 囲まない(そのまま) | 自動で "" (ダブルクォーテーション)で囲む |
改行の扱い | 自動で1行ずつ改行 | 同様(最後に改行される) |
データ形式の違い | 書式はそのまま | 文字列は”、日付は # で囲われる |
読みやすさ | 人間にとって読みやすい | プログラムで読み取るのに便利 |
実務での使い分け | ログや人が読むメモ書きに向いている | CSV出力やデータ加工向き |
応用:エラー処理と組み合わせる
ファイル出力は、エラー処理と組み合わせることで真価を発揮します。
例:エラー発生時にログ出力する
Sub SampleWithErrorLog()
On Error GoTo ErrorHandler
' 存在しないシートにアクセス(エラー発生)
Sheets("売上").Range("A1").Value = "テスト"
MsgBox "処理が完了しました。"
Exit Sub
ErrorHandler:
Dim msg As String
msg = "エラー発生:" & Now & " - " & Err.Number & " - " & Err.Description
Open "C:\log.txt" For Append As #1
Print #1, msg
Close #1
MsgBox "エラーが発生しました。ログに記録しました。"
End Sub
解説
Err.Description
でエラーの中身を取得Now
で日付と時刻を記録- テキストファイルに記録して、あとで確認できるようにする
まとめ
ファイル出力は「一見むずかしそう」に見えるかもしれませんが、基本的な使い方を押さえればとても便利です。
Open ~ For Append As #1
で追記モードで開くPrint #1, ~
で1行ずつ書き出すClose #1
で忘れずに閉じる
この3ステップを覚えるだけで、マクロの信頼性・保守性がぐんと高まります。
まずは1行だけ「ログを書いてみる」ことから、始めてみましょう!
コメント