印刷範囲や用紙の向き、余白など、VBAでPageSetupに関する設定を変更するマクロを実行した際に、「処理が思ったより遅い…」と感じたことはありませんか?特に、ネットワーク上のプリンターを使っているとその遅さは顕著になります。
実はその原因、VBAが印刷設定を変更するたびに、プリンタードライバーと通信して情報を確認しているからなのです。
この記事では、その通信を一時的にオフにすることで、印刷設定の処理を劇的に高速化するための必須テクニックApplication.PrintCommunicationプロパティを解説します。
なぜ印刷設定の変更は遅いのか?
Excel VBAで.PageSetupオブジェクトのプロパティ(例: .PrintAreaや.Orientation)を変更すると、Excelはその設定が現在のプリンターで物理的に可能かどうかを、OSを通じてプリンタードライバーに問い合わせます。
これを例えるなら、設定を一つ変更するたびに、わざわざプリンター本体のところまで行って「この設定で大丈夫?」と確認しに戻ってくるようなものです。この往復通信が、特にネットワーク越しの場合に大きな時間的ロスを生みます。
Application.PrintCommunication = Falseは、この確認作業を「後でまとめてやるから、今は設定変更に集中して!」とVBAに指示するおまじないです。
完成したVBAコード
以下が、PrintCommunicationプロパティを使って印刷設定を高速化するVBAコードのサンプルです。
Sub FastPageSetup()
    ' 変数を宣言します
    Dim targetSheet As Worksheet
    Set targetSheet = ActiveSheet
    ' 画面更新を停止して、さらなる高速化を図る
    Application.ScreenUpdating = False
    ' --- 1. プリンターとの通信を一時的に停止 ---
    Application.PrintCommunication = False
    ' --- 2. 印刷設定をまとめて変更 (この間の処理が高速化される) ---
    With targetSheet.PageSetup
        .PrintArea = "B2:H80"
        .Orientation = xlLandscape ' 用紙を横向きに
        .Zoom = False
        .FitToPagesWide = 1 ' 横を1ページに収める
        .FitToPagesTall = 1 ' 縦を1ページに収める
        .LeftMargin = Application.InchesToPoints(0.5)
        .RightMargin = Application.InchesToPoints(0.5)
    End With
    ' --- 3. プリンターとの通信を再開(【重要】必ず元に戻す) ---
    Application.PrintCommunication = True
    
    ' 画面更新を再開
    Application.ScreenUpdating = True
    ' --- 4. 結果をプレビューで確認 ---
    targetSheet.PrintPreview
End Sub
コードのポイント解説
① 通信のOFF: Application.PrintCommunication = False
Application.PrintCommunication = False
.PageSetupに関する処理を始める直前に、この一行を記述します。これにより、以降の.PageSetupプロパティへの変更時に、Excelはプリンターへのお問い合わせを行わなくなり、処理がメモリ上で瞬時に完了します。
② 印刷設定の集中変更
With targetSheet.PageSetup
    .PrintArea = "B2:H80"
    .Orientation = xlLandscape
    ' ...など、複数の設定変更
End With
PrintCommunicationをFalseにしている間に、変更したいすべての印刷設定をWithブロックなどにまとめて記述します。設定変更の項目が多ければ多いほど、このテクニックによる高速化の恩恵は大きくなります。
③ 通信のON: Application.PrintCommunication = True
Application.PrintCommunication = True
これが最も重要なステップです。すべての印刷設定の変更が終わったら、必ずこのプロパティをTrueに戻して、プリンターとの通信を再開させます。
これを忘れると、設定がプリンタードライバーに正しく反映されず、印刷プレビューや実際の印刷時に予期せぬエラーやレイアウト崩れが発生する可能性があります。「OFFにしたら、必ずONに戻す」と覚えてください。
まとめ
印刷設定を含むマクロのパフォーマンスを改善したい場合、以下の3ステップは絶大な効果を発揮します。
- 処理の開始時に Application.PrintCommunication = Falseを設定する。
- PageSetupに関するすべての変更処理をまとめて行う。
- 処理の最後に Application.PrintCommunication = Trueに戻す。
このパターンは、VBAで帳票やレポートの印刷を自動化する際には、ほぼ必須と言える高速化のテクニックです。処理が遅いと感じたら、ぜひこの「おまじない」を試してみてください。

 
			 
			 
			 
			 
			 
			 
			