【Excel VBA】印刷設定の処理を高速化する鉄板テクニック (PrintCommunication)

印刷範囲や用紙の向き、余白など、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

PrintCommunicationFalseにしている間に、変更したいすべての印刷設定をWithブロックなどにまとめて記述します。設定変更の項目が多ければ多いほど、このテクニックによる高速化の恩恵は大きくなります。

③ 通信のON: Application.PrintCommunication = True

Application.PrintCommunication = True

これが最も重要なステップです。すべての印刷設定の変更が終わったら、必ずこのプロパティをTrueに戻して、プリンターとの通信を再開させます。

これを忘れると、設定がプリンタードライバーに正しく反映されず、印刷プレビューや実際の印刷時に予期せぬエラーやレイアウト崩れが発生する可能性があります。「OFFにしたら、必ずONに戻す」と覚えてください。


まとめ

印刷設定を含むマクロのパフォーマンスを改善したい場合、以下の3ステップは絶大な効果を発揮します。

  1. 処理の開始時に Application.PrintCommunication = False を設定する。
  2. PageSetupに関するすべての変更処理をまとめて行う。
  3. 処理の最後に Application.PrintCommunication = True に戻す。

このパターンは、VBAで帳票やレポートの印刷を自動化する際には、ほぼ必須と言える高速化のテクニックです。処理が遅いと感じたら、ぜひこの「おまじない」を試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次