【VBA】印刷時のヘッダー・フッターをVBAで一括設定する方法(コピペOK)

VBA
スポンサーリンク
スポンサーリンク
  1. この記事でわかること
  2. どんな場面で使う?
  3. 完成イメージ(Before / After)
  4. 実行前の準備
    1. バックアップを取る
    2. Excelをマクロ有効ブック(.xlsm)で保存する
    3. ヘッダー・フッターの確認方法
  5. 手順(コピペ → 実行まで約5分)
    1. VBE(コードを書く画面)を開く
    2. 標準モジュールを挿入する
    3. コードを貼り付けて実行する
  6. コード(基本版)– ヘッダー・フッターの基本設定
    1. 書き換えポイント
  7. コード(応用版)– ページ番号・日付・ファイル名の自動挿入
    1. フォント・サイズの指定方法
    2. 特殊コードの組み合わせ例
  8. コード(実務版)– 全シート一括ヘッダーフッター設定
    1. 書き換えポイント
    2. コードの流れ
  9. よくある落とし穴5選
    1. 1. 全角&で特殊コードを書く → 文字列がそのまま表示される
    2. 2. 既存のヘッダー・フッターが上書きされる
    3. 3. フォント指定のダブルクォーテーションでエラー
    4. 4. PageSetupの処理が遅い
    5. 5. ヘッダー・フッターの文字数制限でエラー
    6. VBAでヘッダーに日付が表示されないときの対処法
    7. VBAでPageSetupの設定が反映されないときの対処法
  10. FAQ
    1. Q1: ヘッダー・フッターをクリア(空白に戻し)たい
    2. Q2: 日付の表示形式をカスタマイズしたい
    3. Q3: 用紙サイズや余白も一緒に設定したい
    4. Q4: &記号そのものをヘッダーに表示したい
    5. Q5: シートごとに異なるヘッダーを設定したい
  11. まとめ
    1. 関連記事
  12. 次にやりたくなること
  13. もっとカスタマイズしたい場合

この記事でわかること

  • VBAでヘッダー・フッター(日付・ページ番号・ファイル名など)を設定できる
  • 特殊コード(&D&P&F など)でページ番号・日付・ファイル名を自動挿入できる
  • 全シートのヘッダー・フッターを一括で統一できる

対象: Excel 2016以降 / Microsoft 365、Windows 10/11

どんな場面で使う?

  • 月次報告書の全シートにページ番号と日付を統一して入れたい
  • 提出用ファイルのフッターに「社外秘」の注意書きを一括で入れたい
  • 10シート以上あるブックのヘッダー・フッターを手作業で揃えるのが面倒なとき
  • 印刷のたびにヘッダーの設定漏れを指摘されるのを防ぎたい

完成イメージ(Before / After)

Before(手作業):

1シートずつ「ページレイアウト」→「印刷タイトル」→「ヘッダー/フッター」タブを開いて設定。10シートあれば10回繰り返す。途中でどのシートまで設定したか分からなくなる。


Sheet1 → ヘッダー/フッター設定 → 日付・ページ番号を入力
Sheet2 → ヘッダー/フッター設定 → 日付・ページ番号を入力
  ...(10回繰り返し)
Sheet10 → ヘッダー/フッター設定 → 日付・ページ番号を入力

After(VBA実行後):

マクロを1回実行するだけで、全シートのヘッダー・フッターが統一される。


マクロ実行 → 全10シートのヘッダー・フッターを一括設定 → 完了(3秒)

自分も以前、月次報告書を印刷するたびに「ヘッダーに日付入れたっけ?」「フッターのページ番号、このシートだけ入ってない…」と確認に追われていた。10シートもあると、どこまで設定したか分からなくなる。提出した報告書のフッターが1枚だけ空白で、上司に「これページ番号ないよ」と差し戻されたこともあった。VBAでヘッダー・フッターを一括設定するようにしてからは、設定漏れがゼロになった。全シートのヘッダーに日付、フッターにページ番号が入る。ボタン1つで10シート分の設定が3秒で完了する。ヘッダー・フッターの設定漏れに悩んでいる人に、この記事で一括設定の手軽さを体験してほしい。

複数シートのループ処理が初めての場合は、先に 複数シートを一括処理する方法 を読んでおくと理解しやすい。

実行前の準備

バックアップを取る

PageSetupの変更は元に戻せない(Ctrl+Zが効かない)。必ずファイルのコピーを別フォルダに保存してから実行する。

Excelをマクロ有効ブック(.xlsm)で保存する

  1. 「ファイル」→「名前を付けて保存」
  2. ファイルの種類を「Excelマクロ有効ブック (*.xlsm)」に変更
  3. 保存

ヘッダー・フッターの確認方法

設定後の確認は「ファイル」→「印刷」のプレビュー画面で行う。VBAコード内では PrintPreview でプレビューを表示している。

手順(コピペ → 実行まで約5分)

VBE(コードを書く画面)を開く

  1. Excelで Alt + F11 を押す

標準モジュールを挿入する

  1. VBEのメニュー →「挿入」→「標準モジュール」

コードを貼り付けて実行する

  1. コードウィンドウに、下のコードをそのままコピペする
  2. Alt + F8 → マクロ名を選んで「実行」

コード(基本版)– ヘッダー・フッターの基本設定

まずは1シートのヘッダー・フッターを設定する基本形。PageSetupの6つのプロパティ(左・中央・右 × ヘッダー・フッター)を理解するのに使う。


'============================================================
' ■ アクティブシートのヘッダー・フッターを設定(基本版)
'   → 6箇所(左中右 × ヘッダー・フッター)を設定してプレビュー表示
'============================================================
Sub SetHeaderFooterBasic()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    '--- ヘッダー・フッターを設定
    With ws.PageSetup
        '--- ★書き換えポイント ---

        '--- ヘッダー(印刷時の上部に表示)
        .LeftHeader = "&D"                '← 左ヘッダーに日付
        .CenterHeader = "月次報告書"      '← 中央ヘッダーにタイトル
        .RightHeader = "&A"               '← 右ヘッダーにシート名

        '--- フッター(印刷時の下部に表示)
        .LeftFooter = "&F"                '← 左フッターにファイル名
        .CenterFooter = ""                '← 中央フッターは空白
        .RightFooter = "&P / &N"          '← 右フッターにページ番号/総ページ数

        '--- ★ここまで ---
    End With

    '--- プレビュー表示で確認
    ws.PrintPreview

    MsgBox ws.Name & " のヘッダー・フッターを設定しました。", vbInformation

End Sub

書き換えポイント

プロパティ 位置 設定値の例
.LeftHeader 左ヘッダー "&D"(日付)、"部署名" など
.CenterHeader 中央ヘッダー "月次報告書"(固定テキスト)
.RightHeader 右ヘッダー "&A"(シート名)、"&F"(ファイル名)
.LeftFooter 左フッター "&F"(ファイル名)、"&Z&F"(パス+ファイル名)
.CenterFooter 中央フッター ""(空白)、"社外秘" など
.RightFooter 右フッター "&P / &N"(ページ番号/総ページ数)

ヘッダー・フッターの特殊コード一覧:

コード 表示内容 使用例
&D 日付 "作成日: &D"
&T 時刻 "印刷時刻: &T"
&F ファイル名 "&F"
&A シート名 "&A"
&P ページ番号 "&P ページ"
&N 総ページ数 "&P / &N"
&Z ファイルのパス "&Z&F"(フルパス+ファイル名)
&& &記号そのもの "A&&B""A&B"

コード(応用版)– ページ番号・日付・ファイル名の自動挿入

特殊コードを組み合わせて、実務で使いやすいヘッダー・フッターを設定する。フォントやサイズの指定方法も含めている。


'============================================================
' ■ ヘッダー・フッターに実務向けの情報を自動挿入(応用版)
'   → フォント・サイズ指定 + 複数の特殊コードを組み合わせ
'============================================================
Sub SetHeaderFooterAdvanced()

    Dim ws As Worksheet
    Set ws = ActiveSheet

    '--- ヘッダー・フッターを設定
    With ws.PageSetup
        '--- ★書き換えポイント ---

        '--- ヘッダー
        '    左: 日付と時刻(8ptで小さめに表示)
        '    中央: タイトル(太字・12pt)
        '    右: ファイル名 + シート名
        .LeftHeader = "&8&D &T"
        .CenterHeader = "&""MS ゴシック,太字""&12月次報告書"
        .RightHeader = "&F - &A"

        '--- フッター
        '    左: ファイルのフルパス(8ptで小さめ)
        '    中央: 「社外秘」の注意書き
        '    右: ページ番号/総ページ数
        .LeftFooter = "&8&Z&F"
        .CenterFooter = "&""MS ゴシック,太字""社外秘"
        .RightFooter = "&P / &N ページ"

        '--- ★ここまで ---
    End With

    '--- プレビュー表示で確認
    ws.PrintPreview

    MsgBox ws.Name & " のヘッダー・フッターを設定しました。", vbInformation

End Sub

フォント・サイズの指定方法

特殊コード 説明
&"フォント名" フォント指定 &"MS ゴシック"
&"フォント名,スタイル" フォント+スタイル &"MS ゴシック,太字"
&数値 フォントサイズ(pt) &8(8pt)、&12(12pt)
&B 太字 &B社外秘
&I 斜体 &Iconfidential
&U 下線 &U重要

VBAでの書き方の注意:

VBAの文字列内でダブルクォーテーションを使う場合は、2つ重ねて書く。


'--- フォント指定の書き方
.CenterHeader = "&""MS ゴシック,太字""&12月次報告書"
'                 ^^                ^^
'                 VBA内のダブルクォーテーションは2つ重ねる

特殊コードの組み合わせ例

目的 設定値 表示結果の例
日付+時刻(小さめ) "&8&D &T" 2026/03/14 10:30
ファイル名+シート名 "&F - &A" 報告書.xlsm - 1月
フルパス(小さめ) "&8&Z&F" C:\Users\...\報告書.xlsm
ページ番号 "&P / &N ページ" 1 / 5 ページ
タイトル(太字) "&""MS ゴシック,太字""&12月次報告書" 月次報告書(12pt太字)

コード(実務版)– 全シート一括ヘッダーフッター設定

全シートに同じヘッダー・フッターを一括設定する。Application.PrintCommunication = False で処理を高速化し、非表示シートはスキップする。


'============================================================
' ■ 全シートのヘッダー・フッターを一括設定(実務版)
'   → 全シートに統一したヘッダー・フッターを適用
'   → PrintCommunication で高速化
'   → 非表示シートはスキップ
'============================================================
Sub SetHeaderFooterAllSheets()

    Dim ws As Worksheet
    Dim sheetCount As Long
    Dim skipCount As Long

    sheetCount = 0
    skipCount = 0

    '--- PageSetup の高速化(Excel 2010以降)
    Application.PrintCommunication = False

    '--- 全シートをループしてヘッダー・フッターを設定
    For Each ws In ThisWorkbook.Worksheets

        '--- 非表示シートはスキップ
        If ws.Visible = xlSheetVisible Then

            With ws.PageSetup
                '--- ★書き換えポイント: ヘッダー ---
                .LeftHeader = "&D"                        '← 日付
                .CenterHeader = "&""MS ゴシック,太字""&12月次報告書"  '← タイトル
                .RightHeader = "&A"                       '← シート名

                '--- ★書き換えポイント: フッター ---
                .LeftFooter = "&8&F"                      '← ファイル名(8pt)
                .CenterFooter = ""                        '← 空白
                .RightFooter = "&P / &N"                  '← ページ番号/総ページ数
                '--- ★ここまで ---
            End With

            sheetCount = sheetCount + 1

        Else
            skipCount = skipCount + 1
        End If

    Next ws

    '--- PageSetup の高速化を解除
    Application.PrintCommunication = True

    '--- 結果メッセージ
    Dim msg As String
    msg = sheetCount & " シートのヘッダー・フッターを一括設定しました。"

    If skipCount > 0 Then
        msg = msg & vbCrLf & "(非表示シート " & skipCount & " 件はスキップ)"
    End If

    MsgBox msg, vbInformation

End Sub

書き換えポイント

プロパティ 初期値 変更例
.LeftHeader "&D"(日付) "&D &T"(日付+時刻)
.CenterHeader "月次報告書"(太字12pt) "売上集計表" など
.RightHeader "&A"(シート名) "&F"(ファイル名)
.LeftFooter "&8&F"(ファイル名8pt) "&8&Z&F"(フルパス)
.CenterFooter ""(空白) "社外秘"
.RightFooter "&P / &N"(ページ/総ページ) "&P ページ"

コードの流れ

  1. Application.PrintCommunication = False でPageSetupの高速化を開始
  2. 全シートをループし、非表示シートをスキップしながらヘッダー・フッターを設定
  3. Application.PrintCommunication = True で高速化を解除
  4. 設定完了シート数とスキップ数をメッセージで表示

高速化について: PageSetupのプロパティを変更するたびにプリンタドライバとの通信が発生する。PrintCommunication = False で通信を一時停止し、全プロパティの設定後に True で反映させると、処理速度が大幅に向上する。特に10シート以上ある場合は体感で数倍の差が出る。

用紙サイズ・余白・向きも含めた印刷設定全般を一括変更したい場合は 複数シートの印刷設定を一括変更して印刷する方法 を参照。

よくある落とし穴5選

1. 全角&で特殊コードを書く → 文字列がそのまま表示される

特殊コードの&を全角「&」で書いてしまい、ヘッダーに「&D」という文字列がそのまま表示されたことがある。特殊コードは必ず半角 & で書く。

対策: &D&P&F など、特殊コードの & は必ず半角で書く。&記号そのものを表示したい場合は && と2つ重ねる。

2. 既存のヘッダー・フッターが上書きされる

VBAでヘッダー・フッターを設定すると、既存の設定は上書きされる。「追記したかっただけなのに消えた」というケースがある。

対策: 上書きされることを前提に、必要な内容をすべてコード内に書く。実行前にバックアップを取る。

3. フォント指定のダブルクォーテーションでエラー

&"MS ゴシック" をVBAで書くとき、文字列内のダブルクォーテーションを2つ重ねないとエラーになる。

対策: VBA内では &""MS ゴシック"" のように2つ重ねて書く。応用版コードのコメントを参考にする。

4. PageSetupの処理が遅い

10シートのヘッダー・フッターを変更するのに10秒以上かかる場合がある。原因はプリンタドライバとの通信。

対策: Application.PrintCommunication = False で通信を一時停止する。実務版のコードには最初から入っている。

5. ヘッダー・フッターの文字数制限でエラー

各セクション(左・中央・右)には255文字の制限がある。長い文字列を設定しようとするとエラーになる。

対策: ヘッダー・フッターには要点だけを記載する。長い情報(ファイルパスなど)は &8 でフォントサイズを小さくして収める。

VBAでヘッダーに日付が表示されないときの対処法

「LeftHeaderに&Dと書いたのに日付が表示されない」という場合、原因は&が全角(&)になっていることが多い。特殊コードの&は必ず半角で書く必要がある。VBEで該当箇所を確認し、半角の &D に修正すれば表示される。

VBAでPageSetupの設定が反映されないときの対処法

「コードを実行したのにヘッダー・フッターが変わっていない」という場合、原因は Application.PrintCommunication = False を設定した後に True に戻し忘れていることだ。PrintCommunication = False のままだとプリンタに設定が送信されない。必ず処理の最後で True に戻すこと。

FAQ

Q1: ヘッダー・フッターをクリア(空白に戻し)たい

空文字列 "" を代入する。


With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
End With

Q2: 日付の表示形式をカスタマイズしたい

&D はExcelの日付書式に従うため、表示形式を自由に変えられない。カスタム書式にしたい場合は、VBAの Format 関数で文字列を生成して代入する。


.LeftHeader = "作成日: " & Format(Date, "yyyy年mm月dd日")

ただし、この場合はマクロ実行時の日付が固定文字列として入る。&D は印刷時の日付が自動で入る点が異なる。

Q3: 用紙サイズや余白も一緒に設定したい

ヘッダー・フッター以外の印刷設定(用紙サイズ・余白・向きなど)も一括変更したい場合は 複数シートの印刷設定を一括変更して印刷する方法 を参照。

Q4: &記号そのものをヘッダーに表示したい

&& と2つ重ねて書く。


.CenterHeader = "A&&B部門"    '← 表示: A&B部門

Q5: シートごとに異なるヘッダーを設定したい

ループ内で ws.Name を判定し、シート名に応じて設定を分岐させる。


If ws.Name = "集計" Then
    .CenterHeader = "&""MS ゴシック,太字""&12集計表"
Else
    .CenterHeader = "&""MS ゴシック,太字""&12月次報告書"
End If

まとめ

  • 基本版: PageSetupの6箇所(左中右 × ヘッダー・フッター)に値を設定する基本形
  • 応用版: 特殊コード(&D&P&Fなど)を組み合わせ、フォント・サイズも指定する応用形
  • 実務版: 全シートのヘッダー・フッターを一括設定。PrintCommunicationで高速化

重要なのは、特殊コードの & は必ず半角で書くこと。全角で書くと特殊コードとして認識されず、文字列がそのまま表示される。

関連記事

次にやりたくなること

もっとカスタマイズしたい場合

「部署名を動的に切り替えたい」「ロゴ画像をヘッダーに入れたい」「シートごとに異なるヘッダーを自動設定したい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できる。

相談時に伝えると話が早い情報:

  • Excel のバージョン / OS
  • シート数とヘッダー・フッターの内容
  • 日付・ページ番号以外に入れたい情報
  • 印刷頻度と用途(社内配布・提出用など)

コメント

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