印刷範囲や用紙の向き、余白など、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で帳票やレポートの印刷を自動化する際には、ほぼ必須と言える高速化のテクニックです。処理が遅いと感じたら、ぜひこの「おまじない」を試してみてください。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
