Excel VBAで印刷する方法をお探しですね。
広告
Excel VBAで印刷を自動化しよう!PrintOutとプレビューの使い方
Excel VBAで印刷処理を自動化すれば、毎回手作業でシートを選んで、ページ範囲や部数を指定する手間がなくなります。
請求書や帳票、一覧表などを定期的に印刷する業務では特に便利ですよね。
この記事では、Excel VBAでシートを印刷する基本から、印刷前に確認できるプレビュー表示、実務で失敗しないコツまで、わかりやすく解説していきます。
Excel VBAでシートを印刷する基本
Excel VBAでシートを印刷するときは、`PrintOut`メソッドを使います。
これは、ワークシートやブック、セル範囲などを印刷するためのメソッドです。
たとえば、今開いているシート(アクティブシート)をそのまま印刷したいときは、`ActiveSheet.PrintOut`と書くだけでOKです。
特に設定を指定しなければ、Excelに設定されているプリンターや印刷範囲、ページ設定がそのまま使われます。
“`vba
Sub PrintActiveSheet()
ActiveSheet.PrintOut
End Sub
“`
特定のシートを印刷したいときは、`Worksheets(“シート名”)`のように対象をはっきり書きます。
実は、アクティブシートに頼りすぎると、ユーザーが別のシートを開いた状態でマクロを実行したときに、意図しないシートを印刷してしまうことがあるんです。
なので、業務用のマクロでは、できるだけシート名を指定しておく方が安全ですよ。
“`vba
Sub PrintSheet1()
Worksheets(“Sheet1”).PrintOut
End Sub
“`
`PrintOut`はワークシートだけでなく、ブック全体やセル範囲にも使えます。
たとえば、`ActiveWorkbook.PrintOut`とするとブック全体を印刷できますし、`Range(“A1:D20”).PrintOut`とすれば指定した範囲だけを印刷できます。
ただし、範囲を指定して印刷する場合でも、改ページや拡大縮小などはページ設定の影響を受けます。
思った通りの見た目にならないときは、`PageSetup`で印刷範囲や用紙の向きなども確認してみてください。
PrintOutでよく使う印刷設定
`PrintOut`にはいろいろな設定(引数)が用意されていて、ページ範囲、部数、プレビュー表示、部単位の印刷などを指定できます。
全部を一度に覚える必要はありませんが、実務でよく使うものを押さえておくと便利です。
特によく使うのは次の5つです。
– `From`:印刷を始めるページ番号
– `To`:印刷を終わるページ番号
– `Copies`:印刷部数
– `Preview`:印刷プレビューを表示するかどうか
– `Collate`:複数部印刷するときに部単位でまとめるかどうか
たとえば、1ページ目から3ページ目までを印刷したいときは、`From:=1, To:=3`のように指定します。
VBAでは引数名を付けて書くと、どの設定を指定しているのかがわかりやすくなります。
あとからコードを見直すときや、他の人がメンテナンスするときにも読みやすいので、印刷処理では名前付き引数を使うのがおすすめです。
“`vba
Sub PrintPageRange()
Worksheets(“Sheet1”).PrintOut From:=1, To:=3
End Sub
“`
部数を指定するには`Copies`を使います。
たとえば4部印刷したいなら、`Copies:=4`と指定します。
さらに、複数ページを複数部印刷するときに、1部ずつまとまった順番で印刷したいときは`Collate:=True`を指定します。
逆にページごとにまとめて印刷したいときは`Collate:=False`です。
普通は部単位の印刷が自然なので、帳票や資料を複数部出すときは`Collate:=True`を明示しておくと安心ですよ。
“`vba
Sub PrintWithCopies()
Worksheets(“Sheet1”).PrintOut From:=1, To:=3, Copies:=4, Collate:=True
End Sub
“`
ちなみに、プリンターを指定したいときは`ActivePrinter`を使う方法もありますが、プリンター名は環境によって違います。
自分のPCでは動いても、別のPCではプリンター名が一致せずエラーになることがあるので注意が必要です。
社内で共有するマクロでは、プリンターを固定するのか、Excelの既定プリンターを使うのかを事前に決めておくとトラブルを減らせます。
印刷プレビューを表示する2つの方法
Excel VBAで印刷プレビューを表示する方法は、大きく分けて2つあります。
1つ目は、`PrintOut`メソッドに`Preview:=True`を付ける方法。
2つ目は、`PrintPreview`メソッドを使う方法です。
どちらも印刷前の見た目を確認できますが、指定できる内容に違いがあります。
結論から言うと、ページ範囲や部数などの印刷条件も同時に指定したいときは、`PrintOut Preview:=True`を使う方が実務では便利です。
“`vba
Sub PreviewByPrintOut()
Worksheets(“Sheet1”).PrintOut Preview:=True
End Sub
“`
`PrintOut Preview:=True`を使うと、すぐに印刷するのではなく、まず印刷プレビュー画面が表示されます。
プレビュー画面で内容を確認したあと、ユーザーが印刷ボタンを押せば印刷されます。
ページ指定や部数指定と組み合わせられるので、「2ページ目から3ページ目だけを確認して印刷したい」といった使い方もできます。
“`vba
Sub PreviewSelectedPages()
Worksheets(“Sheet1”).PrintOut From:=2, To:=3, Copies:=2, Preview:=True
End Sub
“`
一方、`PrintPreview`メソッドは、もっとシンプルにプレビューだけを表示するためのメソッドです。
たとえば、アクティブシートの印刷プレビューを表示したいときは、`ActiveSheet.PrintPreview`と書きます。
印刷前に見た目を確認するだけならこれで十分ですが、`PrintOut`のようにページ範囲や部数を同時に指定する使い方には向いていません。
“`vba
Sub PreviewOnly()
ActiveSheet.PrintPreview
End Sub
“`
`PrintPreview`には`EnableChanges`という引数があって、プレビュー画面でユーザーが余白などのページ設定を変更できるかどうかを制御できます。
`EnableChanges:=False`を指定すると、プレビュー画面での設定変更を制限できます。
帳票のレイアウトを崩されたくないときや、決まった形式で印刷してほしいときに便利です。
“`vba
Sub PreviewNoChanges()
Worksheets(“Sheet1”).PrintPreview EnableChanges:=False
End Sub
“`
注意したいのは、ブック全体を対象にした場合の動きです。
`ActiveWorkbook.PrintOut Preview:=True`はブック全体の印刷プレビューとして使えますが、`ActiveWorkbook.PrintPreview`では期待どおりに全シートのプレビューにならないケースがあります。
全シートをまとめて確認したいときは、`PrintOut`に`Preview:=True`を指定する方がわかりやすく、印刷実行時との切り替えもしやすいです。
実務で失敗しないためのコツ
印刷マクロで一番避けたいのは、意図しない大量印刷です。
`PrintOut`は実行するとすぐに印刷が始まるので、テスト段階では必ず`Preview:=True`を付けて確認するか、印刷対象を少ないページに限定して動作確認することをおすすめします。
特に`ActiveWorkbook.PrintOut`のようにブック全体を対象にするコードは、シート数が多いファイルでは大量の用紙を消費する可能性があるので要注意です。
実務では、いきなり印刷するのではなく、まず印刷範囲やページ設定を整えたうえでプレビューを表示し、問題がなければ印刷する流れにすると安全です。
印刷範囲を固定したいときは、`PageSetup.PrintArea`を使って対象範囲を設定できます。
用紙の向きや拡大縮小、余白、ヘッダー・フッターなども`PageSetup`で制御できるので、PrintOutだけで解決しようとせず、ページ設定と組み合わせて考えることが大切です。
“`vba
Sub SetPrintAreaAndPreview()
With Worksheets(“Sheet1”)
.PageSetup.PrintArea = “$A$1:$F$40”
.PageSetup.Orientation = xlPortrait
.PageSetup.Zoom = False
.PageSetup.FitToPagesWide = 1
.PageSetup.FitToPagesTall = False
.PrintOut Preview:=True
End With
End Sub
“`
また、非表示シートに対して`PrintPreview`を実行するとエラーになる場合があります。
マクロで複数シートを処理するときは、対象シートが表示されているかを確認してから印刷処理を行うと安全です。
印刷対象が存在するか、印刷範囲が空ではないか、ページ数が想定どおりかといった点も、業務用マクロではチェックしておくと安心ですよ。
PrintOutとPrintPreviewの使い分けは、目的で考えると整理しやすくなります。
– 印刷条件を指定しながらプレビューしたいとき
– プレビューと実印刷を同じコードで切り替えたいとき
→ `PrintOut Preview:=True`が向いています
– ユーザーにページ設定を変更させたくないとき
– 単純に現在のシートのプレビューだけを表示したいとき
→ `PrintPreview`が役立ちます
どちらか一方だけを覚えるのではなく、それぞれの特徴を理解して使い分けることが、安定した印刷マクロを作るポイントです。
最後に、完成した印刷マクロでは、テスト時と本番時で`Preview`の値を切り替えられるようにしておくと便利です。
たとえば、確認したいときは`Preview:=True`、すぐに印刷したいときは`Preview:=False`(または省略)という運用にできます。
Excel VBAでシートを印刷する処理は一見シンプルですが、ページ範囲、部数、印刷範囲、プレビューの有無を丁寧に設計することで、日常業務で安心して使える自動化になります。
ぜひこの記事を参考に、印刷マクロを作ってみてくださいね!
広告
