毎日の印刷業務に追われていませんか?
エクセルVBAマクロを活用すれば、複数のステップが必要だった印刷作業がたった1クリックで完了します。
本記事では、印刷設定の選択、範囲指定、プレビュー確認といった手間のかかる作業をすべて自動化し、作業時間を大幅に短縮する方法をご紹介します。
印刷ミスの削減、業務効率の向上、そして何より、本来の業務に集中できる時間の確保などこれらすべてのメリットを手に入れましょう。
たった一度の設定で、毎日の印刷ストレスから解放される方法をぜひお試しください。

エクセルVBAでマクロを作ってしまえば、シートの印刷も楽ちんになるよ♡
エクセルVBAで印刷するマクロの作り方
エクセルVBAでシートの印刷を1クリックするマクロを作るためには、PrintOutメソッドと呼ばれるものを使います。
PrintOutメソッドがあつかえるオブジェクトは多数存在していますが、最もイメージがしやすいものとしてはシートオブジェクトとなります。このほかにもブックやセルなどのオブジェクトもPrintOutメソッドをあつかうことができます。
まずは、PrintOutメソッドについて紹介していきます。

メソッドは、して欲しい処理を命令するものだよ。
PrintOutメソッドの構文
PrintOutメソッドの書きかたは以下のとおりです。
式.PrintOut (From、 To、 Copies、 Preview、 ActivePrinter、 PrintToFile、 Collate、 PrToFileName、 IgnorePrintAreas)
※式の部分にはオブジェクトに指定します。(例:シート (Worksheet) オブジェクトなど)
PrintOutメソッドで設定可能なパラメーター
PrintOutメソッドで設定可能なパラメーターは、以下の9つとなります。
PrintOutメソッドで設定可能なパラメーター
パラメーター名 | 必須/省略可 | 概要 |
---|---|---|
From | 省略可 | どのページから印刷をはじめるかを番号で指定します。 ※省略すると最初のページになります。 |
To | 省略可 | どのページまで印刷をするかを番号で指定します。 ※省略すると最後のページになります。 |
Copies | 省略可 | 印刷部数を数値で指定します。 ※省略すると1部印刷になります。 |
Preview | 省略可 | 印刷前にプレビューを表示するかをTrue/Falseで指定します。 ※Falseや省略ではプレビューを表示せず印刷を開始します。 |
ActivePrinter | 省略可 | アクティブなプリンターの名前を指定します。 |
PrintToFile | 省略可 | ファイルとして出力するかをTrue/Falseで指定します。 ※PrToFileName が指定されていない場合、出力するファイル名を入力するウィンドウを表示します。 |
Collate | 省略可 | 部単位で印刷するかの設定をTrue/Falseで指定します。 |
PrToFileName | 省略可 | PrintToFile が True に設定されている場合、ファイル名を指定します。 |
IgnorePrintAreas | 省略可 | 印刷範囲を無視してオブジェクト全体を印刷するかをTrue/Falseで指定します。 |
PrintOutメソッドのパラメーター”Collate“について
複数枚のシートを2部以上印刷をするとき、Trueにした場合は、1部(1ページ目,2ページ目,3ページ目…)→2部(1ページ目,2ページ目,3ページ目…)となります。
具体的に設定値を、TrueまたはFalseにした場合の印刷結果については下記の図を参考にしてください。

PrintOutメソッドで指定するオブジェクトやプロパティ
PrintOutメソッドは、以下のオブジェクトやプロパティを指定することで印刷する対象を指定できます。
ワークブック (Workbook) オブジェクト
PrintOutメソッドを使用して、ワークブック全体を印刷できます。
PrintOutメソッドの対象となるワークブックは、Workbooksコレクションから取得することが一般的です。
ワークシート (Worksheet) オブジェクト
PrintOutメソッドを使用して、ワークシート単位で印刷できます。
PrintOutメソッドの対象となるワークシートは、Worksheetsコレクションから取得できます。
セル範囲 (Range) オブジェクト
PrintOutメソッドを使用して、特定のセル範囲を印刷できます。
Rangeオブジェクトを使用して、印刷したいセル範囲を指定します。
チャート (Chart) オブジェクト
PrintOutメソッドを使用して、グラフやチャートを印刷できます。
Chartオブジェクトを使用して、印刷したいグラフやチャートを指定します。
エクセルVBAで印刷するマクロのサンプルコード
アクティブな(画面上に表示している)シートの印刷
PrintOutメソッドつかう場合は以下のようにコードを書きます。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
ActiveSheet.PrintOut
End Sub
05行目
アクティブシートに表示されているものを印刷します。

表示中のシートにあるすべてを印刷するコードだね。
特定のシートを指定して印刷
特定のシートを印刷したいときは、以下のようにコードを書きます。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
ThisWorkbook.Worksheets("Sheet1").PrintOut
'または
ThisWorkbook.Worksheets(1).PrintOut
End Sub
05行目・09行目
Sheetsコレクションから、インデックスである数値もしくは、シート名である”Sheet1“を指定して印刷するコードです。
ActiveSheetとちがうポイントは、明確にシートを指定しているのでアクティブになっているシートが印刷対象となるのではなく、状況によって印刷するシートが変わらないところです。
こちらの書きかたであれば、誤って希望しないシートを印刷してしまうミスが予防できます。

Sheet1を任意のシート名に書きかえると、指定したシートを印刷するよ。
セル範囲を指定して印刷
セルの範囲を指定して印刷するときは、以下のようにコードを書きます。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
ThisWorkbook.Worksheets("Sheet1").Range("A1:H3").PrintOut
End Sub
05行目
Sheet1のセル範囲(“A1:H3”)を印刷します。

任意の範囲に書きかえると、指定した範囲を印刷するよ。
グラフやチャートを指定して印刷
グラフやチャートを指定して印刷するときは、以下のようにコードを書きます。
グラフを印刷するときには、印刷したいグラフがワークシート上にあるグラフであるか、グラフシートを印刷するのかでコードの書きかたが異なります。
それぞれを印刷するマクロのサンプルコードを紹介します。
ワークシート上のグラフを印刷するマクロ
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド3()
ThisWorkbook.Worksheets("Sheet1").ChartObjects("グラフ 1").Chart.PrintOut Preview:=True
'または
ThisWorkbook.Worksheets("Sheet1").ChartObjects("Chart 1").Chart.PrintOut
End Sub
05行目・08行目
直前に紹介したセルの範囲と同じで、どのシート上のどのグラフであるかを指定します。
ChartObjectsをつかって、グラフ名やインデックス番号でグラフを指定することができますが、その後に.ChartをつけてPrintOutメソッド記入します。
考え方として”ChartObjectsコレクション“の中から、指定の”ChartObjectオブジェクト“にある”Chartオブジェクト“を指定して印刷する。
さらにもっとこまかく言えば、ChartObjectオブジェクトはグラフの表示領域(大きさ)や、位置などのオブジェクトで箱のようなもの。
Chartオブジェクトは、中身のグラフ自体を指し示すオブジェクトとなるため、こういった書きかたになるわけです。
はじめてこれを聞いたとき、額縁と絵みたいなイメージだと感じましたが、すこし難しく感じる人は、指示文としてこういった書きかたをする覚えてしまっても問題ないです。
なお、それぞれのグラフの名前をどのように調べるかの手順ですが、エクセルのワークシート上で対象のグラフを選択した状態にして、画面左上の枠内を確認します。


グラフの名前を調べて、それを指定すれば印刷はできるよ。
グラフシートを印刷するマクロ
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
Charts("グラフ1").PrintOut
End Sub
05行目
Chartsコレクションから、グラフ1という名前のグラフシートを印刷するマクロです。

グラフシートはグラフ専用シートのことだよ。
グラフシートの挿入方法
グラフシートの挿入方法は以下のとおりです。


ワークシート上のグラフと、グラフシートがあるってことだね。
特定シート以外の複数シートを連続で印刷をするマクロ
エクセルファイル(ブック)のすべてのシートを連続で印刷する場合は、Workbookオブジェクトを指定すれば属するシートはすべて印刷されます。また、特定のシートを印刷する場合は、Worksheetオブジェクトから、インデックス番号やシート名を指定することで実行ができます。
それでは、特定のシート以外の複数のシートを連続で印刷したい場合のマクロを考えてみます。具体例として特定したシートだけは印刷せずに、その他のシートだけ印刷したいときを想定しています。
実装方法として、各シートの名前を判定して、特定の名前だったものは除外し、それ以外のシートはすべて印刷するマクロのコードを紹介します。
この場合に必要な追加要素は以下となります。
- シートの印刷を繰り返す処理
- For Eachステートメントをつかってすべてのシートを連続で印刷する処理をつくる
- For Nextステートメントをつかってすべてのシートを連続で印刷する処理をつくる
- 条件を判定してその後の処理を分岐する処理
- Ifステートメントをつかってシート名を判定し、条件に一致したシートは印刷はしない

くり返しと条件分岐についての記事は以下をクリックしてね。
ForEachなどのくり返し処理の書きかたはコチラ
条件分岐によって処理を分けるときの書きかたはコチラ
Sub プリントアウトメソッド() 'ワークシート変数を宣言する Dim ws As Worksheet 'すべてのWorksheetを繰り返す(For Eachステートメント) For Each ws In Worksheets 'Ifステートメントで印刷をしたくないシート名を指定することで、条件以外のシートを印刷する If ws.Name <> "印刷したくないシート" Then 'PrintOutメソッドで条件に指定したシート名以外を印刷する ws.PrintOut End If Next ws End Sub
Sub プリントアウトメソッド() 'カウンタ変数を整数型で宣言する Dim i As Integer 'Worksheets.Countプロパティをつかってすべてのワークシート分繰り返す(For Nextステートメント) For i = 1 To Worksheets.Count 'Ifステートメントで印刷をしたくないシート名を指定することで、条件以外のシートを印刷する If Worksheets(i).Name <> "印刷したくないシート" Then 'PrintOutメソッドで条件に指定したシート名以外を印刷する Worksheets(i).PrintOut End If Next i End Sub
If文の条件で指定した、印刷したくないシートの部分を任意の名前に変更すると、そのシートが印刷から除外されます。

特定のシート以外の印刷ができると便利だね。
なぜ、膨大な事務作業でも定時で退社できるのか。
実務をプロから学べる「ユースフル」の動画は永年見放題。Q&A機能で分からないを放置しないから安心。
詳しくは以下のリンクをクリック
エクセルVBAで印刷するマクロであつかうPrintOutメソッドの引数
PrintOutメソッドには複数のパラメーターがあります。ここでは、それぞれをつかったときの効果をサンプルコードのマクロとともに紹介していきます。
fromやtoパラメーターをつかって印刷するページを指定するマクロ
エクセルファイル(ブック)に複数のシートがあり、印刷するページを指定するにはPrintOutメソッドのパラメーターの”From“と”To“を使います。
Sub プリントアウトメソッド() 'このエクセルファイルのシート2から3までを印刷するマクロ ThisWorkbook.PrintOut from:=2, to:=3 End Sub
WorkbookオブジェクトのPrintOutメソッドをつかった場合、Workbook(ワークブック)にあるすべてのシートが印刷対象となりますので、PrintOutメソッドのパラメーターの”From”と”To”にページ数を指定します。
なお、このマクロでは2ページから3ページを印刷することになります。

印刷対象をWorkbookオブジェクトにするとすべてのシートが印刷されるよ。
Sub プリントアウトメソッド() 'このエクセルファイルのシート2から3までを印刷するマクロ ThisWorkbook.Worksheets.PrintOut from:=2, to:=3 End Sub

ワークシートのみに限定したいならこっちだね。
Copiesパラメーターをつかって複数部印刷するマクロ
印刷部数を指定する場合は、PrintOutメソッドのパラメーターの”Copies“で部数を指定します。
Sub プリントアウトメソッド() 'このエクセルファイルのシート2を2部印刷するマクロ ThisWorkbook.Worksheets.PrintOut from:=2, to:=2, copies:=2 End Sub
“from”や”To”パラメーターは印刷する対象のページを指定しますが、こちらの“copies”パラメーターは印刷する枚数を数値で指定します。サンプルコードでは、2ページ目を2枚印刷するマクロとなります。

印刷するときの枚数(部数)の設定をするんだね。
Previewパラメーターをつかって複数部印刷するマクロ
印刷前にプレビュー画面を表示するためには、PrintOutメソッドのパラメーターの”preview“で部数を指定します。
Sub プリントアウトメソッド() '印刷する前に印刷プレビュー画面を表示するマクロ ThisWorkbook.Worksheets.PrintOut from:=1, to:=3, copies:=2, preview:=True End Sub
previewパラメーターはTrue/Falseで指定します。
省略するとFalseと同じく印刷プレビューは表示せずに即印刷となります。このマクロでは、fromとtoパラメーターで1から3ページを指定していますので、3ページ分の印刷プレビュー画面を表示します。

大量に印刷をする前には印刷プレビューでチェックできると安心だね。
ActivePrinterパラメーターをつかって印刷するプリンターを指定するマクロ
印刷するときにつかうプリンターを指定するためには、PrintOutメソッドのパラメーターの”ActivePrinter“でプリンター名を指定します。
Sub プリントアウトメソッド() '印刷するプリンターを指定するマクロ ThisWorkbook.Worksheets.PrintOut _ from:=1, to:=3, copies:=2, preview:=True, ActivePrinter:="Brother MFC-J738DN" End Sub
ActivePrinterのパラメーターにプリンター名の値を指定することで指定ができます。なお、プリンター名はエクセルの印刷画面で確認することができます。

PrintToFileパラメーターで印刷する前にファイルに出力するマクロ
印刷するときに印刷する対象をファイルに出力する場合、PrintOutメソッドのパラメーターの”PrintToFile“で指定します。
Sub プリントアウトメソッド() '印刷する対象をファイルに出力するマクロ ThisWorkbook.Worksheets.PrintOut _ from:=2, to:=2, copies:=2, PrintToFile:=True, PrToFileName:="テスト" End Sub
PrintToFileとPrToFileNameをセットでつかうとファイル名を指定できます。
PrintToFileパラメーターはTrue/Falseで指定します。Falseを指定する、または省略した場合はファイルは作られません。
PrToFileNameパラメーターではファイル名が指定できますが、省略した場合は、ファイル名を入力するウィンドウが表示されます。サンプルでは、PrToFileNameパラメーターに”テスト“を指定しているので、テストと言う名前のファイルが作られます。
PrintToFileで作られたファイルは「prn形式の印刷データ」で作られます。
prn形式のファイルは、エクセルアプリで開くことのできないファイルなので注意が必要です。

PrintToFileで作られるのはあまり見ないファイル形式なので、正直あまり使わないかも。
Collateパラメーターをつかって部単位での印刷をするマクロ
印刷するときの方式を部単位にするには、PrintOutメソッドのパラメーターの”Collate“で指定します。
Sub プリントアウトメソッド() '複数の部数を印刷をするときに部単位で印刷するマクロ ThisWorkbook.Worksheets.PrintOut _ from:=1, to:=3, copies:=2, Collate:=True End Sub
CollateパラメーターはTrue/Falseで指定します。複数ページかつ複数部の印刷をするときに指定すると、印刷の方法が以下のようになります。Falseを指定または、省略するとページ単位で印刷します。


部単位の印刷は会議資料を配布するときなんかには便利かも。
IgnorePrintAreasパラメーターでオブジェクト全体を印刷するマクロ
IgnorePrintAreasパラメーターをTrueに指定することで、事前に設定されている印刷範囲を無視し、オブジェクト全体を印刷するマクロになります。
Sub プリントアウトメソッド() '印刷範囲を無視し、オブジェクト全体を印刷するマクロ ThisWorkbook.Worksheets("Sheet1").PrintOut preview:=True, IgnorePrintAreas:=True End Sub
IgnorePrintAreasパラメーターはTrue/Falseで指定します。Trueを指定した場合、事前に印刷範囲を指定していても、この範囲を無視してすべてのオブジェクトを印刷するマクロになります。
サンプルコードには、previewパラメーターを指定していますので、印刷プレビュー画面で確認してみます。結果がわかりやすくなるようにエクセルのSheet1に印刷範囲を設定しておきます。

この状態でサンプルコードの「IgnorePrintAreas」をTrueとFalseに指定したときの印刷プレビュー画面を比較してみます。
IgnorePrintAreasパラメーターがTrueの印刷プレビュー画面

印刷範囲の設定が無視され、シート上にあるオブジェクト全体が印刷プレビューに表示されます。
IgnorePrintAreasパラメーターがFalseの印刷プレビュー画面

印刷範囲の設定が反映され、範囲内の領域のみ印刷プレビューに表示されます。
IgnorePrintAreasパラメーターは、Sheets、Workbook、Worksheet、Worksheetsのオブジェクトでのみ指定ができます。
![]() |
![]() |
差し込み印刷マクロをVlookupで連続印刷の自動化をする
この記事で紹介したPrintOutメソッドをつかったマクロですが、請求書を作成するマクロなどと組み合わせることで一連の作業を自動化し、さらに便利なマクロを作れます。
顧客リストや売上を記録したワークシートから、請求書に必要な情報を取得し、それぞれの取引先ごとの請求書を入力、印刷までの処理を書いたエクセルVBAの解説はこちらの記事をご覧ください。
エクセルVBAで印刷するマクロの作り方まとめ
印刷作業をマクロをつかってワンクリックにするなどができれば、あなたの作業の負担を大きく減らすことができる効果が期待できます。印刷はマクロにまかせて、他の作業を進められるようになるなど、仕事を効率よく進められてとても便利です。
紹介したエクセルVBAのサンプルコードも短いため、あなた自身の環境にあわせてカスタマイズするのもとても簡単にできるかと思います。

身近な作業を効率良くしていくことは、マクロを作りの楽しみにもなるよ。
さいごに本記事で紹介したことをまとめておきます。
印刷を実行するマクロの作るにはPrintOutメソッドをつかう
PrintOutメソッドでは以下のオブジェクトが使用可能
ワークブック (Workbook) オブジェクト
ワークシート (Worksheet) オブジェクト
セル範囲 (Range) オブジェクト
チャート (Chart) オブジェクト
PrintOutメソッドはfromやto、copiesなど9つのパラメーターがある

パラメーターの組み合わせかたで印刷の各種設定ができるね。
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント