【ExcelVBA・マクロ】印刷設定を自動化する方法|ページ設定・余白・1ページに収める【初心者向け】

印刷設定を自動化する方法 ExcelVBA

Excelで請求書や報告書を印刷するとき、こんな経験はありませんか?

  • 印刷するたびにページ設定を開いて調整している
  • 余白や用紙の向きを毎回手作業で設定するのが面倒
  • 複数シートの印刷設定を一括で変更したい
  • 「1ページに収める」設定を自動化したい

そんなとき、VBAで印刷設定を自動化するマクロが便利です。

今回は、ボタン1つで印刷設定を整えるVBAコードを紹介します。初心者でもコピペで使えて、印刷前の手間が劇的に削減できます!


スポンサーリンク
スポンサーリンク

こんな人におすすめ

  • 請求書や報告書を頻繁に印刷する人
  • 毎回同じ印刷設定を手作業で行っている人
  • 複数シートの印刷設定を一括で変更したい人
  • 印刷前の準備作業を自動化したい人

このマクロを使えば、印刷設定の手間が数秒で完了します。


コードの動作イメージ

  1. マクロを実行すると、自動的に印刷設定が整う
  2. 用紙の向き(縦/横)、用紙サイズ(A4/A3など)が設定される
  3. 余白が適切な値に調整される
  4. 表が1ページに収まるように自動縮小される
  5. 中央寄せ・ヘッダー・フッターも自動設定される

実行前:

  • 印刷設定がバラバラ
  • 用紙サイズがデフォルトのまま
  • 余白が大きすぎて無駄

実行後:

  • A4横向き、余白「狭い」に統一
  • 表が1ページに自動で収まる
  • 左右中央配置で見栄え良く印刷できる

基本:印刷設定を自動で整えるVBAコード

以下のコードは、アクティブシートの印刷設定を一括で整えるマクロです。

コードの配置場所

  1. VBAエディタを開く(Alt + F11)
  2. 左側のプロジェクトエクスプローラーで「挿入」→「標準モジュール」
  3. 右側のコード画面に以下のコードを貼り付ける
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ページ

注意:
ZoomFitToPagesは同時に有効にできません。
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ページに自動収納
  • 複数シート一括設定やヘッダー・フッター自動化も簡単

印刷前の手作業がなくなり、常に正しい設定で印刷できるようになります。ぜひコピペして試してみてください!

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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