業務でエクセルファイルを大量に扱う場合、フォルダ内の複数のエクセルファイルをまとめてPDF変換・印刷・処理するニーズが発生することがあります。
1ファイルずつ開いて操作するのは非常に時間がかかりますが、VBAマクロを活用することで一括処理が可能です。
フォルダ内のエクセルファイルを一括で処理するVBAを活用することで、大量ファイルの操作が大幅に効率化されます。
本記事では、フォルダ内のエクセルファイルを一括でPDF変換・印刷・処理するための具体的なVBAコードと手順を詳しく解説していきます。
フォルダ内のエクセルを一括PDF変換するVBAの基本
それではまず、フォルダ内にある複数のエクセルファイルを一括でPDFに変換するためのVBAコードと手順について解説していきます。
フォルダ内の全エクセルファイルをPDFに一括変換するVBAコード
VBAを使ってフォルダ内の全エクセルファイルを一括PDF変換する処理を自動化できます。
フォルダ内のエクセルを一括PDF変換するVBAコードの例
Sub エクセル一括PDF変換()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
folderPath = “C:\対象フォルダのパス\”
fileName = Dir(folderPath & “*.xlsx”)
Do While fileName <> “”
Set wb = Workbooks.Open(folderPath & fileName)
wb.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=folderPath & Replace(fileName, “.xlsx”, “.pdf”)
wb.Close SaveChanges:=False
fileName = Dir()
Loop
End Sub
folderPathの部分を実際のフォルダパスに変更して使用してください。
このVBAコードを実行するだけで、フォルダ内のすべてのエクセルファイルが同じフォルダ内にPDFとして一括保存されます。
PDF変換時のシート指定と保存先変更のカスタマイズ
特定のシートだけをPDF化したい場合は「wb.Sheets(“シート名”).ExportAsFixedFormat」のように対象シートを指定します。
保存先を別のフォルダに変更する場合は、Filenameのパスを出力先フォルダのパスに書き換えます。
保存先と対象シートを柔軟に指定できるため、業務の運用ルールに合わせたカスタマイズが可能です。
フォルダ内のエクセルを一括印刷するVBAコード
PDF変換ではなく直接印刷したい場合は、ExportAsFixedFormatの代わりにPrintOutメソッドを使用します。
フォルダ内のエクセルを一括印刷するVBAコードの例
Sub エクセル一括印刷()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
folderPath = “C:\対象フォルダのパス\”
fileName = Dir(folderPath & “*.xlsx”)
Do While fileName <> “”
Set wb = Workbooks.Open(folderPath & fileName)
wb.PrintOut
wb.Close SaveChanges:=False
fileName = Dir()
Loop
End Sub
このコードを実行するとフォルダ内のエクセルファイルが順番に開かれ、デフォルトのプリンターに一括で印刷されます。
フォルダ内ファイルの一括処理に関する応用テクニック
続いては、フォルダ内のエクセルファイルを一括処理する際の応用テクニックを確認していきます。
サブフォルダを含めた再帰的なファイル処理の方法
フォルダ内にサブフォルダがある場合、再帰処理を使ってサブフォルダ内のファイルも含めて一括処理することができます。
FileSystemObjectを使った再帰処理コードを記述することで、階層構造を持つフォルダ内のすべてのエクセルファイルに対して処理を実行できます。
サブフォルダを含む一括処理は、部門別・月別など階層構造で管理されているファイル群の一括操作に特に有効です。
処理結果をログとして記録する方法
大量のファイルを一括処理する場合、どのファイルを処理したかのログを記録しておくことが重要です。
処理ファイル名・処理日時・成功・失敗の結果をシートに書き出すコードをVBAに追加することで、処理後の確認が容易になります。
処理ログの記録は一括処理の品質管理において非常に重要な要素で、エラーが発生した際の原因特定にも役立ちます。
エラーハンドリングを追加して安全に一括処理する方法
一括処理中にファイルのオープンエラーや印刷エラーが発生した場合に処理が止まらないよう、On Error Resume Nextを使ったエラーハンドリングをコードに追加することが重要です。
エラーが発生したファイルをログに記録して続行する仕組みを組み込むことで、大量ファイルの一括処理を安定して実行できます。
フォルダ内ファイルの一括操作に関する方法比較一覧
| 操作の種類 | 使用する方法 | 特徴 |
|---|---|---|
| 一括PDF変換 | VBA(ExportAsFixedFormat) | フォルダ内全ファイルをPDFに自動変換 |
| 一括印刷 | VBA(PrintOut) | フォルダ内全ファイルを順番に印刷 |
| 一括データ集計 | VBA(ファイルを開いて値を取得) | 複数ファイルのデータを1シートに集約 |
| 一括ファイル名取得 | VBA(Dir関数) | フォルダ内のファイル名リストを生成 |
| Power Query | フォルダからデータ取得 | GUIでフォルダ内データを一括インポート |
Power Queryでフォルダ内のエクセルを一括インポートする方法
VBAを使わずにフォルダ内の複数エクセルファイルのデータをまとめて取り込む方法として、Power Queryの「フォルダーから」接続が非常に便利です。
「データ」タブ→「データの取得」→「ファイルから」→「フォルダーから」を選択し、対象フォルダを指定することで、フォルダ内のすべてのエクセルファイルのデータを1つのテーブルに結合できます。
Power Queryによるフォルダ一括インポートはVBAの知識がなくてもGUI操作だけで実現できる強力な機能です。
処理前後のバックアップの重要性
フォルダ内の大量ファイルを一括処理する前には、必ず対象フォルダのバックアップを別の場所に保存しておきましょう。
VBAの一括処理では意図しないファイルの上書きや削除が発生する可能性があるため、バックアップは必須の安全策です。
バックアップさえあれば万が一の場合でも元の状態に復元できるため、大量ファイルへの一括処理では必ずバックアップを取る習慣をつけましょう。
まとめ
本記事では、フォルダ内のエクセルファイルを一括でPDF変換・印刷・処理するためのVBAコードと手順・Power Queryによる一括インポートまで詳しく解説しました。
VBAのDirループとExportAsFixedFormat・PrintOutメソッドを組み合わせることで、フォルダ内のすべてのファイルへの一括処理が実現します。
処理前のバックアップ・エラーハンドリングの追加・処理ログの記録を必ず実施することが、安全で信頼性の高い一括処理の条件です。
ぜひ今回紹介したVBAコードをベースに、業務に合わせたカスタマイズを行って一括処理の効率化を実現してください。