VBAでログをテキストファイルに書き込む方法|Open・Print・Closeの使い方

マクロで問題が起きたとき、「何が起きたのか」を後から確認したいことがあります。エラーの内容を記録しておきたい、いつ誰がマクロを使ったか残したい、そんな場面で使えるのがログのテキスト出力です。

この記事では、VBAでテキストファイルにログを書き込む方法を、基本構文の解説からエラー処理との組み合わせまで解説します。

VBAでテキストファイルにログを書き込むには?

ファイルへの書き込みは OpenPrintClose の3つの命令で行います。まずは最もシンプルな例を見てみましょう。

Sub WriteLog()
    Dim msg As String
    msg = "ログを書き込みました:" & Now

    Open "C:¥log.txt" For Append As #1
    Print #1, msg
    Close #1
End Sub

各行の意味は次のとおりです。

Open "C:¥log.txt" For Append As #1
ログファイルを追記モードで開きます。Append は既存の内容を残したまま末尾に追加するモードです。As #1 はこのファイルを「1番」として操作するための番号指定です。

Print #1, msg
ファイル番号1番(#1)に、変数 msg の内容を1行書き込みます。

Close #1
開いたファイルを閉じます。これを忘れるとExcelやファイルがフリーズする原因になるため、必ず書きましょう。

PrintとWriteの違いを使い分けるには?

テキスト書き込みには PrintWrite の2種類があります。用途によって使い分けます。

項目PrintWrite
区切り文字半角スペースカンマ区切り(CSV形式)
文字列の囲い囲まない自動で "" で囲む
読みやすさ人間が読みやすいプログラムで読み取りやすい
向いている用途ログ・メモ書きCSV出力・データ加工

ログ用途では Print を使うのが一般的です。

エラー発生時に自動でログを出力するには?

ファイル出力はエラー処理と組み合わせることで特に威力を発揮します。エラーが起きたときだけログに記録する処理です。

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.Number でエラー番号、Err.Description でエラーの内容、Now で発生日時を取得して記録しています。あとからログファイルを開いて原因を確認できます。

よくあるエラーと注意点を確認するには?

ファイルが開けない場合
パスに全角文字やスペースが含まれていると失敗することがあります。また、OneDriveやネットワークドライブ上のパスも失敗しやすいため、ローカルフォルダを指定するのが安全です。

追記ではなく上書きしたい場合
For Append の代わりに For Output を使うと、毎回ファイルを新規作成(上書き)します。ただしこれを使うと既存の内容がすべて消えるため注意が必要です。

まとめ

  • Open 〜 For Append As #1 で追記モードでファイルを開く
  • Print #1, メッセージ で1行ずつテキストを書き込む
  • Close #1 でファイルを閉じる(必須・忘れずに)
  • Err.NumberErr.Description を使えばエラー内容をログに記録できる
  • ログ出力を習慣にすることで、マクロの信頼性・トラブル対応力が上がる

よくある質問

ログファイルの保存先はどこが適切ですか?

マクロが保存されているフォルダと同じ場所か、専用の「log」フォルダを作って保存するのが管理しやすいです。ThisWorkbook.Path & "¥log.txt" と書けばブックと同じフォルダに保存されます。

ログが溜まりすぎたらどうすればいいですか?

定期的に古いログを削除するか、ファイル名に日付を入れて日次でファイルを分ける方法が効果的です。例:"C:¥log_" & Format(Now, "yyyymmdd") & ".txt"

Close #1 を忘れるとどうなりますか?

ファイルが開いたままの状態になり、次回の Open でエラーになったり、ファイルが壊れたりする可能性があります。必ずセットで書く習慣をつけましょう。

複数のマクロから同じログファイルに書き込めますか?

できます。Append モードで開けば既存の内容を残したまま追記されるため、複数のマクロから同じファイルに記録を蓄積できます。

日本語がログに文字化けして表示されることはありますか?

Print 命令では通常文字化けしません。ただし、メモ帳など外部ツールで開くときの文字コード設定(UTF-8/Shift-JIS)によって化けることがあります。その場合はツール側の文字コード設定を確認してください。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール