Excelで請求書や報告書を印刷するとき、こんな経験はありませんか?
- 印刷するたびにページ設定を開いて調整している
- 余白や用紙の向きを毎回手作業で設定するのが面倒
- 複数シートの印刷設定を一括で変更したい
- 「1ページに収める」設定を自動化したい
そんなとき、VBAで印刷設定を自動化するマクロが便利です。
今回は、ボタン1つで印刷設定を整えるVBAコードを紹介します。初心者でもコピペで使えて、印刷前の手間が劇的に削減できます!
こんな人におすすめ
- 請求書や報告書を頻繁に印刷する人
- 毎回同じ印刷設定を手作業で行っている人
- 複数シートの印刷設定を一括で変更したい人
- 印刷前の準備作業を自動化したい人
このマクロを使えば、印刷設定の手間が数秒で完了します。
コードの動作イメージ
- マクロを実行すると、自動的に印刷設定が整う
- 用紙の向き(縦/横)、用紙サイズ(A4/A3など)が設定される
- 余白が適切な値に調整される
- 表が1ページに収まるように自動縮小される
- 中央寄せ・ヘッダー・フッターも自動設定される
実行前:
- 印刷設定がバラバラ
- 用紙サイズがデフォルトのまま
- 余白が大きすぎて無駄
実行後:
- A4横向き、余白「狭い」に統一
- 表が1ページに自動で収まる
- 左右中央配置で見栄え良く印刷できる
基本:印刷設定を自動で整えるVBAコード
以下のコードは、アクティブシートの印刷設定を一括で整えるマクロです。
コードの配置場所
- VBAエディタを開く(Alt + F11)
- 左側のプロジェクトエクスプローラーで「挿入」→「標準モジュール」
- 右側のコード画面に以下のコードを貼り付ける
Sub 印刷設定を整える()
Dim ws As Worksheet
' アクティブシートを取得
Set ws = ActiveSheet
With ws.PageSetup
' 用紙の向きを横向きに設定
.Orientation = xlLandscape
' 用紙サイズをA4に設定
.PaperSize = xlPaperA4
' 余白を狭く設定(単位:ポイント 1cm≒28.35ポイント)
.LeftMargin = Application.CentimetersToPoints(1) ' 左余白 1cm
.RightMargin = Application.CentimetersToPoints(1) ' 右余白 1cm
.TopMargin = Application.CentimetersToPoints(1.5) ' 上余白 1.5cm
.BottomMargin = Application.CentimetersToPoints(1.5) ' 下余白 1.5cm
.HeaderMargin = Application.CentimetersToPoints(0.5) ' ヘッダー余白 0.5cm
.FooterMargin = Application.CentimetersToPoints(0.5) ' フッター余白 0.5cm
' 1ページに収める設定
.Zoom = False ' 拡大縮小率を無効化
.FitToPagesWide = 1 ' 横方向に1ページ
.FitToPagesTall = 1 ' 縦方向に1ページ
' 中央寄せ設定
.CenterHorizontally = True ' 左右中央
.CenterVertically = False ' 上下は中央にしない
' 印刷品質
.PrintQuality = 600 ' 600dpi
' 白黒印刷をオフ(カラー印刷)
.BlackAndWhite = False
' 行列番号を印刷しない
.PrintHeadings = False
' 枠線を印刷しない
.PrintGridlines = False
End With
MsgBox "印刷設定を整えました!", vbInformation
End Sub
コードのポイント解説
① PageSetupオブジェクトとは?
With ws.PageSetup
' ページ設定
End With
PageSetupは、Excelの「ページレイアウト」タブにある設定をVBAで操作するためのオブジェクトです。
- 用紙サイズ、向き、余白など印刷に関する全ての設定が可能
- Withステートメントで複数の設定をまとめて記述できる
② 用紙の向きと用紙サイズ
' 用紙の向き
.Orientation = xlLandscape ' 横向き
.Orientation = xlPortrait ' 縦向き
' 用紙サイズ
.PaperSize = xlPaperA4 ' A4
.PaperSize = xlPaperA3 ' A3
.PaperSize = xlPaperB5 ' B5
.PaperSize = xlPaperLetter ' レター(8.5×11インチ)
よく使う定数:
xlLandscape:横向きxlPortrait:縦向きxlPaperA4:A4サイズxlPaperA3:A3サイズ
③ 余白の設定
' センチメートル単位で余白を設定
.LeftMargin = Application.CentimetersToPoints(1)
Excelの余白はポイント(pt)単位で設定されます。Application.CentimetersToPoints()を使えば、cmで指定できます。
単位換算:
- 1cm ≒ 28.35ポイント
- 1インチ = 72ポイント
④ 1ページに収める設定
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
Zoom = False:拡大縮小率を無効化(必須)FitToPagesWide = 1:横方向に1ページFitToPagesTall = 1:縦方向に1ページ
注意:ZoomとFitToPagesは同時に有効にできません。
1ページに収める場合は、必ずZoom = Falseにしてください。
応用編①:複数シートの印刷設定を一括変更
ブック内の全シートの印刷設定を一括で変更するコードです。
Sub 全シート印刷設定を整える()
Dim ws As Worksheet
Dim totalSheets As Long
Dim currentSheet As Long
totalSheets = ThisWorkbook.Worksheets.Count
currentSheet = 0
' 全シートをループ
For Each ws In ThisWorkbook.Worksheets
currentSheet = currentSheet + 1
Application.StatusBar = "印刷設定中... " & currentSheet & "/" & totalSheets
With ws.PageSetup
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1.5)
.BottomMargin = Application.CentimetersToPoints(1.5)
.HeaderMargin = Application.CentimetersToPoints(0.5)
.FooterMargin = Application.CentimetersToPoints(0.5)
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False ' 縦方向は自動調整
.CenterHorizontally = True
.CenterVertically = False
.PrintHeadings = False
.PrintGridlines = False
End With
Next ws
Application.StatusBar = False
MsgBox "全シートの印刷設定を完了しました!", vbInformation
End Sub
応用編②:印刷範囲を自動設定して印刷実行
データの範囲を自動判定して、印刷範囲を設定・印刷するコードです。
Sub 印刷範囲を自動設定して印刷()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim printRange As String
Set ws = ActiveSheet
' 最終行・最終列を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' 印刷範囲を設定
printRange = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Address
ws.PageSetup.PrintArea = printRange
' 印刷設定
With ws.PageSetup
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.CenterHorizontally = True
End With
' 印刷プレビュー表示
ws.PrintPreview
End Sub
応用編③:ヘッダー・フッターを自動設定
ヘッダーに会社名、フッターにページ番号と印刷日時を自動設定するコードです。
Sub ヘッダーフッター自動設定()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.PageSetup
' ヘッダー設定(中央に会社名)
.CenterHeader = "株式会社〇〇"
' フッター設定
.LeftFooter = "&D" ' 左:印刷日付
.CenterFooter = "&P / &N ページ" ' 中央:ページ番号/総ページ数
.RightFooter = "&F" ' 右:ファイル名
' ヘッダー・フッターのフォント設定
.LeftFooter = "&""メイリオ,標準""&9&D" ' メイリオ 9pt
.CenterFooter = "&""メイリオ,標準""&9&P / &N ページ"
End With
MsgBox "ヘッダー・フッターを設定しました!", vbInformation
End Sub
よく使うヘッダー・フッターコード:
&D:印刷日付&T:印刷時刻&P:ページ番号&N:総ページ数&F:ファイル名&A:シート名
応用編④:印刷プレビューを表示してから印刷
設定を整えた後、印刷プレビューで確認してから印刷するコードです。
Sub 印刷設定してプレビュー()
Dim ws As Worksheet
Set ws = ActiveSheet
' 印刷設定を整える
With ws.PageSetup
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1.5)
.BottomMargin = Application.CentimetersToPoints(1.5)
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.CenterHorizontally = True
End With
' 印刷プレビューを表示
ws.PrintPreview
' 印刷プレビュー終了後にメッセージ
MsgBox "印刷プレビューを表示しました", vbInformation
End Sub
よくあるエラーと対処法
エラー①:実行時エラー’1004′
原因: プリンターが設定されていない、またはシートが保護されている
対処法:
- Windowsにプリンターをインストールする(仮想プリンターでもOK)
- シートの保護を解除してから実行
エラー②:設定が反映されない
原因: ZoomとFitToPagesを同時に設定している
対処法:
' 誤り
.Zoom = 80
.FitToPagesWide = 1 ' 無視される
' 正しい
.Zoom = False
.FitToPagesWide = 1
1ページに収める場合は、必ずZoom = Falseにしてください。
エラー③:1ページに収まらない
原因: 列幅が広すぎる、データ量が多すぎる
対処法:
' 縦方向のみ1ページに制限を解除
.FitToPagesWide = 1
.FitToPagesTall = False ' 縦は自動調整
または、印刷範囲を限定する:
.PrintArea = "A1:J50" ' A1からJ50までに限定
実務での活用例
- ✅ 請求書テンプレートの印刷設定を自動化
- ✅ 月次報告書を常に同じレイアウトで印刷
- ✅ 複数拠点からのデータを統一フォーマットで印刷
- ✅ 印刷前チェックリストとして活用
- ✅ PDFエクスポート前の自動整形
まとめ:印刷設定はPageSetupで自動化
- PageSetupオブジェクトで印刷設定を制御
Orientationで用紙の向き、PaperSizeで用紙サイズを設定CentimetersToPoints()でcm単位の余白設定が可能FitToPagesWide/Tallで1ページに自動収納- 複数シート一括設定やヘッダー・フッター自動化も簡単
印刷前の手作業がなくなり、常に正しい設定で印刷できるようになります。ぜひコピペして試してみてください!

コメント