【VBA】指定フォルダ内のPDFファイル数をカウントするマクロ

VBA

このVBAマクロは、指定されたExcelシート内にリストアップされたフォルダ名に基づいて、各フォルダ内のPDFファイルの数をカウントし、その結果をシートに書き込む機能を持っています。シートにフォルダ名を並べて、フォルダ内のPDFファイル数を自動的に集計する作業を効率化できます。

Sub CountPDFFiles()
    Dim ws As Worksheet
    Dim folderPath As String
    Dim pdfCount As Long
    Dim currentRow As Long
    Dim folderName As String
    Dim folder As Object
    Dim file As Object
    Dim fso As Object
    
    ' 現在のワークシートを設定
    Set ws = ThisWorkbook.Sheets("Move") ' 必要に応じてシート名を変更してください
    
    ' FileSystemObjectの作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' C4から下に羅列されたフォルダ名を取得し、PDFファイル数を数える
    currentRow = 4
    Do While ws.Cells(currentRow, 3).Value <> ""
        folderName = ws.Cells(currentRow, 3).Value
        folderPath = ThisWorkbook.Path & "\" & folderName
        
        ' フォルダが存在するか確認
        If fso.FolderExists(folderPath) Then
            pdfCount = 0
            Set folder = fso.GetFolder(folderPath)
            
            ' フォルダ内のファイルをループ
            For Each file In folder.Files
                If LCase(fso.GetExtensionName(file.Name)) = "pdf" Then
                    pdfCount = pdfCount + 1
                End If
            Next file
            
            ' D列にPDFファイル数を記載
            ws.Cells(currentRow, 4).Value = pdfCount
        Else
            ' フォルダが存在しない場合のエラーメッセージ
            ws.Cells(currentRow, 4).Value = "フォルダが見つかりません"
        End If
        
        currentRow = currentRow + 1
    Loop
    
    ' 終了メッセージ
    MsgBox "処理が完了しました。"
End Sub

マクロの詳細解説

1. ワークシートの設定

Set ws = ThisWorkbook.Sheets("Move") ' 必要に応じてシート名を変更してください
  • ws は、このマクロが操作するシートです。この例では Move というシート名が使われていますが、他のシート名を使用する場合はこの部分を変更します。

2. FileSystemObjectの作成

Set fso = CreateObject("Scripting.FileSystemObject")
  • FileSystemObject (FSO) は、ファイルやフォルダの操作を行うためのオブジェクトです。このコードでは、フォルダの存在確認やファイルのループ処理にFSOを使用しています。

3. フォルダ名の取得とPDFファイル数のカウント

currentRow = 4
Do While ws.Cells(currentRow, 3).Value <> ""
    folderName = ws.Cells(currentRow, 3).Value
    folderPath = ThisWorkbook.Path & "\" & folderName
  • currentRow = 4: C列の4行目から下に羅列されたフォルダ名を取得します。C4セルにフォルダ名が入力されていると仮定して処理が開始されます。
  • Do While ws.Cells(currentRow, 3).Value <> "": C列のフォルダ名が空になるまで繰り返します。

4. フォルダ内のファイルをループしてPDFファイルをカウント

If fso.FolderExists(folderPath) Then
    pdfCount = 0
    Set folder = fso.GetFolder(folderPath)

    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "pdf" Then
            pdfCount = pdfCount + 1
        End If
    Next file

    ' D列にPDFファイル数を記載
    ws.Cells(currentRow, 4).Value = pdfCount
Else
    ' フォルダが存在しない場合のエラーメッセージ
    ws.Cells(currentRow, 4).Value = "フォルダが見つかりません"
End If
  • fso.FolderExists(folderPath): 指定されたフォルダが存在するか確認します。存在しない場合はエラーメッセージをD列に表示します。
  • For Each file In folder.Files: フォルダ内のすべてのファイルをループし、拡張子がPDFであるファイルをカウントします。

5. 結果をD列に表示

  • 各フォルダ内のPDFファイルの数がカウントされ、結果がD列に表示されます。
  • フォルダが存在しない場合、D列には「フォルダが見つかりません」というメッセージが表示されます。

6. 終了メッセージ

MsgBox "処理が完了しました。"
  • 最後に、処理がすべて完了したことを知らせるメッセージボックスが表示されます。

使い方

  1. フォルダのリストを作成: 対象のフォルダ名を、ExcelシートのC列に入力します。C4セルから開始し、各フォルダ名を順に記載します。
  2. マクロを実行: マクロを実行すると、指定されたフォルダが存在するかどうかを確認し、存在する場合はフォルダ内のPDFファイルをカウントして、D列にその結果を表示します。

注意点

  • パスの指定: folderPath = ThisWorkbook.Path & "\" & folderName により、Excelファイルが保存されているフォルダを基準にしています。別の場所にあるフォルダを対象としたい場合は、フルパスを使用するように変更してください。
  • エラーハンドリング: マクロ内ではフォルダが見つからない場合のエラー処理が行われていますが、その他のエラー処理(例えば、ファイルのアクセス権がない場合など)は追加する必要があります。

まとめ

このマクロを使うことで、Excelシートにリストアップされた複数のフォルダ内に存在するPDFファイルの数を自動的にカウントすることができます。定期的にフォルダ内のファイル数を集計する場合に非常に便利です。ぜひ業務の効率化に役立ててください。


数える時毎回フォルダ開くの面倒くさいよねー

ではまたー

コメント

タイトルとURLをコピーしました