Excelマクロを使用してフォルダ内のPDFファイルを自動でコピーする方法

Visual Basic

Excel VBAを使って、指定したフォルダ内のPDFファイルをリストと照らし合わせ、未取り込みのPDFを自動でコピーするマクロの作成方法を解説します。以下に、質問者が求める動作を実現するための手順を説明します。

1. フォルダのパスを取得する

まず最初に、「パラメーター」シートのC5セルに記載されたフォルダのパスを取得します。これにより、VBAは探索するフォルダを認識することができます。

2. 指定フォルダ内のサブフォルダを探す

次に、C6に記載されたフォルダ名を基に、指定された親フォルダ内から目的のサブフォルダを検索します。サブフォルダ名に規則性はないため、すべてのサブフォルダをリストアップする必要があります。

3. サブフォルダ内のPDFファイルをリスト化

サブフォルダ内を探し、PDFファイルを見つけます。これには、VBAを使用してディレクトリ内のすべてのファイルを確認し、PDFファイルのみをリストアップします。

4. 取込済リストと照合

次に、取得したPDFファイルの名前を「取込済リスト」シートのA列に記載されたファイル名と比較します。この比較により、過去に取り込まれたファイルを排除し、未取り込みのファイルのみを抽出します。

5. 未取り込みのPDFファイルを指定フォルダにコピー

未取り込みと判定されたPDFファイルを「パラメーター」シートのC7に記載されたフォルダパスへコピーします。これにより、手動でファイルを確認する手間が省けます。

6. 実行するマクロの例

以下は、上記の流れを実現するVBAマクロのサンプルコードです。適切な場所にこのコードを配置して実行します。

Sub CopyPDFFiles() ' フォルダパスの取得 Dim sourceFolder As String sourceFolder = Sheets("パラメーター").Range("C5").Value ' サブフォルダ名の取得 Dim targetFolder As String targetFolder = Sheets("パラメーター").Range("C7").Value ' 取込済リストの取得 Dim importedList As Range Set importedList = Sheets("取込済リスト").Range("A:A") ' サブフォルダ内のPDFファイルを検索 For Each subfolder In CreateObject("Scripting.FileSystemObject").GetFolder(sourceFolder).Subfolders For Each file In subfolder.Files If Right(file.Name, 4) = ".pdf" Then If IsError(Application.Match(file.Name, importedList, 0)) Then ' PDFをコピー FileCopy file.Path, targetFolder & "\" & file.Name End If End If Next file Next subfolder End Sub

7. まとめ

このマクロを使用すると、指定したフォルダ内の未取り込みPDFを自動で検出し、必要な場所にコピーすることができます。これにより、毎回手動でファイルを確認してコピーする手間を省き、作業の効率化が可能になります。

コメント

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