MENU

【VBA】CSV読込履歴を記録!ファイル名・日付を一覧に残す方法

A子さん

どのCSVファイルをいつ読み込んだかを 一覧で記録したい
監査対応やトラブル時に履歴を見返したい
毎回同じ場所にログが残ることで業務の安心感UP

目次

▼処理の概要

  1. 複数のCSVファイルを選択
  2. それぞれをシートに展開
  3. 読み込んだファイル名と日時を 「取込履歴」シート に記録

▼完成イメージ

![CSV読み込みログのイメージ(例)]

Noファイル名読込日時
1sales_202406.csv2025/06/29 10:02:15
2expense_202406.csv2025/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に転記」などの連携にも拡張可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次