
どの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に転記」などの連携にも拡張可能です。
コメント