 A子さん
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に転記」などの連携にも拡張可能です。

コメント