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

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次