この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 "処理が完了しました。"
- 最後に、処理がすべて完了したことを知らせるメッセージボックスが表示されます。
使い方
- フォルダのリストを作成: 対象のフォルダ名を、ExcelシートのC列に入力します。C4セルから開始し、各フォルダ名を順に記載します。
- マクロを実行: マクロを実行すると、指定されたフォルダが存在するかどうかを確認し、存在する場合はフォルダ内のPDFファイルをカウントして、D列にその結果を表示します。
注意点
- パスの指定:
folderPath = ThisWorkbook.Path & "\" & folderName
により、Excelファイルが保存されているフォルダを基準にしています。別の場所にあるフォルダを対象としたい場合は、フルパスを使用するように変更してください。 - エラーハンドリング: マクロ内ではフォルダが見つからない場合のエラー処理が行われていますが、その他のエラー処理(例えば、ファイルのアクセス権がない場合など)は追加する必要があります。
まとめ
このマクロを使うことで、Excelシートにリストアップされた複数のフォルダ内に存在するPDFファイルの数を自動的にカウントすることができます。定期的にフォルダ内のファイル数を集計する場合に非常に便利です。ぜひ業務の効率化に役立ててください。
数える時毎回フォルダ開くの面倒くさいよねー
ではまたー
コメント