A子さんどのCSVファイルをいつ読み込んだかを 一覧で記録したい
監査対応やトラブル時に履歴を見返したい
毎回同じ場所にログが残ることで業務の安心感UP
目次
▼処理の概要
- 複数のCSVファイルを選択
- それぞれをシートに展開
- 読み込んだファイル名と日時を 「取込履歴」シート に記録
▼完成イメージ
![CSV読み込みログのイメージ(例)]
| No | ファイル名 | 読込日時 |
|---|---|---|
| 1 | sales_202406.csv | 2025/06/29 10:02:15 |
| 2 | expense_202406.csv | 2025/06/29 10:02:18 |
▼コード全文(ログ機能付き)
Sub ImportCSVAndLogHistory()
Dim csvFiles As Variant
Dim i As Long
Dim tempWB As Workbook
Dim tempWS As Worksheet
Dim newWS As Worksheet
Dim fileName As String
Dim logWS As Worksheet
Dim logRow As Long
' ファイル選択
csvFiles = Application.GetOpenFilename("CSVファイル (*.csv),*.csv", _
Title:="CSVファイルを選択(複数可)", _
MultiSelect:=True)
If VarType(csvFiles) = vbBoolean Then
MsgBox "キャンセルされました。", vbExclamation
Exit Sub
End If
Application.ScreenUpdating = False
' 取込履歴シートがなければ作成
On Error Resume Next
Set logWS = ThisWorkbook.Sheets("取込履歴")
If logWS Is Nothing Then
Set logWS = ThisWorkbook.Sheets.Add(Before:=ThisWorkbook.Sheets(1))
logWS.Name = "取込履歴"
logWS.Range("A1:C1").Value = Array("No", "ファイル名", "読込日時")
End If
On Error GoTo 0
' 最終行を取得
logRow = logWS.Cells(Rows.Count, 1).End(xlUp).Row + 1
' CSVをループで処理
For i = LBound(csvFiles) To UBound(csvFiles)
' 一時的にCSVを開く
Set tempWB = Workbooks.Open(Filename:=csvFiles(i), ReadOnly:=True)
Set tempWS = tempWB.Sheets(1)
' シート名用にファイル名を取得
fileName = Replace(Mid(csvFiles(i), InStrRev(csvFiles(i), "\") + 1), ".csv", "")
' 新しいシートを追加
Set newWS = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
On Error Resume Next
newWS.Name = Left(fileName, 31)
On Error GoTo 0
' データをコピー
tempWS.UsedRange.Copy Destination:=newWS.Range("A1")
tempWB.Close SaveChanges:=False
' ログ書き込み
logWS.Cells(logRow, 1).Value = logRow - 1
logWS.Cells(logRow, 2).Value = fileName
logWS.Cells(logRow, 3).Value = Format(Now, "yyyy/mm/dd hh:nn:ss")
logRow = logRow + 1
Next i
Application.ScreenUpdating = True
MsgBox "CSV読み込みと履歴記録が完了しました!", vbInformation
End Sub
▼ポイント解説
| 処理 | 説明 |
|---|---|
Sheets("取込履歴") | 専用の履歴用シートを自動作成 |
Now | 読み込み時刻をタイムスタンプとして記録 |
logRow | 履歴の追記行番号を自動判定 |
No列 | 自動で通し番号を付与(ログ管理がしやすくなる) |
▼応用例(カスタマイズ)
- ユーザー名の列を追加 →
Application.UserNameで取得可能 - ブック名の列を追加 →
ThisWorkbook.Name - 保存フォルダも記録 →
csvFiles(i)をフルパスとして保存可能
▼まとめ
このマクロを導入することで、
- CSVの読込ミスを履歴で発見しやすくなる
- 業務の透明性や再現性が向上する
- 他人が読込を行っても、記録として残る安心感がある
といった実務的なメリットが得られます。
さらに上級編として「この履歴をPDFで出力」や「SharePoint/Teamsに転記」などの連携にも拡張可能です。

コメント