導入:なぜこのテクニックが必要なのか
日常業務において、月次報告書や請求書など、複数のExcelファイルを開いて一つずつ印刷する作業は非常に時間がかかります。ファイル数が増えれば増えるほど、開く・印刷する・閉じるという単純作業はミスを誘発しやすく、何より生産性を大きく低下させます。今回は、VBAを使って「フォルダ内の全ブックの全シートを一括印刷する」手法を解説します。この自動化を導入するだけで、印刷作業の時間を数分から数秒へと大幅に短縮できます。
基礎知識:VBAによるファイル操作の仕組み
VBAで複数のブックを扱う際は、FileSystemObjectを使う方法や、Dir関数を使う方法が一般的です。今回は、シンプルで汎用性の高い「Dir関数」を使用します。Dir関数は、指定したフォルダ内のファイル名を取得する関数で、ループ処理と組み合わせることでフォルダ内の全ファイルを順番に処理することが可能です。また、印刷にはPrintOutメソッドを使用します。
実装/解決策:効率的な一括印刷の手順
以下の手順でプログラムを構成します。
1. 印刷対象のファイルが格納されているフォルダパスを指定する。
2. Dir関数でフォルダ内のExcelファイルを一つずつ取得する。
3. 取得したブックを順次開き、すべてのシートに対してPrintOutメソッドを実行する。
4. 印刷が終わったらブックを閉じる(保存せずに閉じるのが安全です)。
サンプルプログラム:フォルダ内一括印刷マクロ
このコードを標準モジュールに貼り付けて実行してください。実行前に、コード内の「targetPath」を対象のフォルダパスに書き換えてください。
Sub BatchPrintAllWorkbooks()
Dim targetPath As String
Dim fileName As String
Dim wb As Workbook
Dim ws As Worksheet
‘ 印刷したいファイルが入っているフォルダパスを指定してください
targetPath = “C:\Users\YourName\Documents\PrintFolder\”
‘ フォルダ内のExcelファイルを検索
fileName = Dir(targetPath & “.xls”)
‘ ファイルが見つからなくなるまでループ
Do While fileName <> “”
‘ ブックを開く(画面更新を抑止して高速化)
Application.ScreenUpdating = False
Set wb = Workbooks.Open(targetPath & fileName)
‘ 開いたブックの全シートを印刷
For Each ws In wb.Worksheets
ws.PrintOut
Next ws
‘ 印刷が終わったら保存せずに閉じる
wb.Close SaveChanges:=False
‘ 次のファイル名を取得
fileName = Dir()
Loop
Application.ScreenUpdating = True
MsgBox “印刷が完了しました。”
End Sub
応用・注意点:現場で陥りやすいトラブル回避
1. 印刷範囲の確認
PrintOutメソッドは、各シートの「印刷範囲」設定に従います。もしシート側で印刷範囲が設定されていないと、データが入っている範囲全体が印刷されます。事前に各シートの「ページレイアウト」を確認しておくことが重要です。
2. プリンタのデフォルト設定
このコードはWindowsの「通常使うプリンタ」に対して出力します。特定のプリンタを指定したい場合は、Application.ActivePrinterプロパティで事前にプリンタ名を設定する処理を追加する必要があります。
3. エラー対策
パスワード付きのファイルが含まれているとマクロが停止します。実務では、エラーハンドリング(On Error Resume Nextなど)を適切に配置し、中断せずに処理を継続できるような工夫を検討してください。
