見出し画像

Excel VBAで「画像データ」と「保管場所」を一覧化する方法

商品データと保管場所の一覧を作成するために、簡易的なVBAスクリプトを作成しました。
このスクリプトは、「画像ファイルのパスをA列」に、".jpg" 拡張子を持つ「画像ファイルの名前をB列」に入力します。
すべてのフォルダーおよびサブフォルダーを検索してこの情報を収集するようになっています。
※約43万件のデータを約7分で完了できました。

fileName = Dir(folderPath & "*.jpg")
の「.jpg」の部分を変更すれば、別のファイルでもリスト化可能かと思います。

実行方法

  • Excelの「F3」にフォルダーパスを入力してから

  • 例 C:\Users\suzukimotors\Desktop\test

  • VBAエディタを起動します(Alt + F11キー)。

  • 「挿入」メニューから「モジュール」を選択して、新しいモジュールを作成します。

  • 下記のコードをモジュールウィンドウに貼り付けます。

  • マクロを実行します(Alt + F8キー、作成したマクロを選択して「実行」)。

Sub ListJPGFiles()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim folderPath As String
    folderPath = ws.Range("F3").Value

    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

    ' 初期化
    Dim lastRow As Long
    lastRow = 2 ' B列の開始行

    ' ファイルを検索してリストに追加
    Call RecursiveSearch(folderPath, ws, lastRow)

    MsgBox "完了しました。", vbInformation
End Sub

Sub RecursiveSearch(ByVal folderPath As String, ws As Worksheet, ByRef lastRow As Long)
    Dim fileName As String
    Dim folder As Object, subFolder As Object
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 現在のフォルダ内のjpgファイルを探す
    fileName = Dir(folderPath & "*.jpg")
    While fileName <> ""
        ws.Cells(lastRow, 1).Value = folderPath
        ws.Cells(lastRow, 2).Value = fileName
        lastRow = lastRow + 1
        fileName = Dir() ' 次のファイル
    Wend

    ' サブフォルダも検索
    Set folder = fso.GetFolder(folderPath)
    For Each subFolder In folder.SubFolders
        Call RecursiveSearch(subFolder.Path & "\", ws, lastRow)
    Next subFolder
End Sub

この記事が参加している募集

仕事について話そう

この記事が気に入ったらサポートをしてみませんか?