目次
はじめに
複数人で共有するExcelファイルでは、「誰が・いつファイルを開いたか/閉じたか」を記録したいケースがあります。
たとえば:
- ファイル更新履歴を記録しておきたい
- トラブル発生時の調査用ログを残したい
- 管理部門で使用状況を可視化したい
こうした目的のために、VBAでファイルの開閉時に自動でログを残すマクロを仕込む方法をご紹介します。
作成されるログはCSV形式で、Excelから簡単に確認できます。
ログに記録する内容
- 実行日時(yyyy/mm/dd hh:mm:ss)
- ユーザー名(Windowsログイン名)
- 操作内容(開く/閉じる)
ログファイルの保存先
- ユーザーのデスクトップに
log.csv
が自動生成されます。 - ファイルが存在すれば追記、なければ新規作成されます。
- OneDrive環境でも対応済み。
コード:ThisWorkbook + 標準モジュールで実装
1. 標準モジュール(Module1など)に以下のコードを記述:
Sub WriteLog(action As String)
Dim fso As Object ' FileSystemObject(ファイル操作用)
Dim logFile As String ' ログファイルのフルパス
Dim ts As Object ' テキストストリーム(書き込み用)
Dim logLine As String ' 1行分のログ内容
Dim userName As String ' 実行ユーザー名
Dim nowTime As String ' 現在の日時
' 現在ログイン中のWindowsユーザー名を取得
userName = Environ("USERNAME")
' 現在の日時を「yyyy/mm/dd hh:mm:ss」形式に整形
nowTime = Format(Now, "yyyy/mm/dd hh:nn:ss")
' ユーザーのデスクトップにログファイルを作成・追記するパスを指定
' OneDrive環境などにも対応できる方法
logFile = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\log.csv"
' ログ1行分をCSV形式で作成(例: 2025/07/01 15:00:00,USER01,開く)
logLine = nowTime & "," & userName & "," & action
' FileSystemObjectを使ってファイル操作
Set fso = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrHandler ' エラー時の処理にジャンプ
' ログファイルが既に存在するかを確認
If fso.FileExists(logFile) Then
' 追記モードで開く(8 = ForAppending)
Set ts = fso.OpenTextFile(logFile, 8)
Else
' 存在しない場合は新規作成
Set ts = fso.CreateTextFile(logFile)
End If
' ログ内容を1行書き込む
ts.WriteLine logLine
' ファイルを閉じる
ts.Close
' 正常終了なので処理を抜ける
Exit Sub
' ▼エラー時の処理
ErrHandler:
MsgBox "ログファイルの書き込みでエラーが発生しました。" & vbCrLf & _
"パス: " & logFile, vbCritical
End Sub
2. 「ThisWorkbook」オブジェクトに以下を追加:
Private Sub Workbook_Open()
Call WriteLog("開く")
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call WriteLog("閉じる")
End Sub
実行結果(log.csvの中身)
2025/07/01 10:15:30,USER01,開く
2025/07/01 10:45:12,USER01,閉じる
注意点・補足
- Excelファイルは マクロ有効ブック(.xlsm)形式で保存してください。
- 共有環境で使う場合、ログファイル名にブック名や日付を入れることで記録を分けることも可能です。
- デスクトップ以外に保存したい場合は
logFile
のパスを書き換えてください。
応用アイデア
- ログに PC名(Environ(“COMPUTERNAME”)) や ファイル名(ThisWorkbook.Name) を追加する
- 日ごとに別ファイルでログを残す(例:
log_20250701.csv
など)