Excelで複数のシートを印刷する際、手作業で印刷するのは面倒ですよね?
VBAが使えるなら、指定したシートや全シートをワンクリックで印刷することが可能です。
この記事では、VBAを使って複数シートを一括で印刷する方法や、便利なカスタマイズ方法を詳しく解説します。
目次
複数シートを一括印刷する基本的な方法
✅ ブック内のすべてのシートを印刷
VBA でブック内の全シートを一括で印刷します、Sheets.PrintOutを使います。
Sub PrintAllSheets()
Sheets.PrintOut
End Sub
📌このコードを実行すると、すべてのシートが印刷される!
📌 「Ctrl + P」を押す手間を省略!
✅指定したシートだけを印刷
Sheets(Array(...)).PrintOutを使うと、特定のシートのみを印刷できます。
Sub PrintSpecificSheets()
Sheets(Array("Sheet1", "Sheet2")).PrintOut
End Sub
📌Sheet1とのみをSheet2印刷!
📌シート名は""で囲む必要がある!
✅シートを1枚ずつ印刷
全てのシートを1枚ずつ順番に印刷したい場合は、For Eachを使います。
Sub PrintSheetsIndividually()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.PrintOut
Next ws
End Sub
📌各シートを1枚ずつ印刷!
📌プリンターの設定によって、各シートを別ジョブとして印刷可能!
✅ 名前の一部を含むシートを印刷
シート名に特定のキーワードが含まれる場合のみ印刷できます。
Sub PrintSheetsByName()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If InStr(ws.Name, "売上") > 0 Then
ws.PrintOut
End If
Next ws
End Sub
📌 「売上」という単語を含むシートだけ印刷!
📌売上管理や部門別シートの印刷に便利!
印刷プレビューを表示する
✅ 印刷前にプレビューを確認
誤った印刷を防ぐために、プレビューを表示する方法です。
Sub PrintPreviewAllSheets()
Sheets.PrintPreview
End Sub
📌すべてのシートのプレビューを表示! 📌
のPrintOut代わりにPrintPreview使う!
✅ 指定シートのプレビュー
Sub PrintPreviewSpecificSheets()
Sheets(Array("Sheet1", "Sheet2")).PrintPreview
End Sub
📌Sheet1とのSheet2プレビューを表示!
印刷範囲を設定してから印刷
データの範囲を適切に設定してから印刷すると、不要な空白ページの印刷を防ぎます。
✅ 指定範囲のみ印刷
Sub SetPrintAreaAndPrint()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.PageSetup.PrintArea = "$A$1:$D$20" ' 印刷範囲を設定
ws.PrintOut
Next ws
End Sub
📌各シートのみをA1:D20印刷!
📌不要な空白ページをなくせる!
✅データがある範囲のみ印刷
Sub SetDynamicPrintAreaAndPrint()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
For Each ws In ThisWorkbook.Sheets
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column
ws.PageSetup.PrintArea = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Address
ws.PrintOut
Next ws
End Sub
📌データの最終行・最終列を取得し、印刷範囲を自動設定!
📌データの追加に対応できる!
1 ページに収めて印刷
✅ 各シートを 1 ページにまとめる
Sub PrintFitToOnePage()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
With ws.PageSetup
.Zoom = False ' 自動縮小を有効化
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ws.PrintOut
Next ws
End Sub
📌各シートを 1ページに言って印刷!
📌横長の表でも、1ページに褒められる!
両面印刷を設定
Sub PrintWithDuplex()
Application.ActivePrinter = "プリンター名"
Sheets.PrintOut Copies:=1, Collate:=True, Duplex:=True
End Sub
📌両面印刷を適用(プリンターが対応している必要あり)!
ユーザーが選択したシートを印刷
✅ 印刷対象のシートを選択
Sub PrintUserSelectedSheets()
Dim ws As Worksheet, selectedSheets As String
selectedSheets = InputBox("印刷するシート名をカンマ区切りで入力(例: Sheet1, Sheet2)")
If selectedSheets <> "" Then
Sheets(Split(selectedSheets, ",")).PrintOut
Else
MsgBox "シートが選択されていません!", vbExclamation
End If
End Sub
📌ユーザーが入力したシートだけを印刷!
📌手動で選択する手間を省ける!
まとめ
| 機能 | VBAコード |
|---|---|
| みんなのシートを印刷 | Sheets.PrintOut |
| 特定のシートを印刷 | Sheets(Array("Sheet1", "Sheet2")).PrintOut |
| シートを1枚ずつ印刷 | For Each ws In Sheets: ws.PrintOut: Next ws |
| プレビューを表示 | Sheets.PrintPreview |
| 印刷範囲 | .PageSetup.PrintArea = "$A$1:$D$20" |
| データ範囲を自動設定 | lastRowとlastColモデル設定 |
| 1 ページに入る | .FitToPagesWide = 1, .FitToPagesTall = 1 |
| 両面印刷 | Duplex:=True |
| ユーザーが選択したシートを印刷 | InputBox見る |
おすすめの活用方法
✅複数シートをまとめて印刷すると、作業効率がアップ!
✅不要なページを省くなら、PrintAreaを活用!
✅印刷前にPrintPreview確認するとミスが見つかる!
✅ユーザーがシートを選択する機能も便利!