職場での作業において、エクセルなどで作った見積書や請求書をたくさん印刷する場面はありますが、これを毎回クリックで操作しながら作業をすると、かなりの時間と労力が必要になります。
エクセルVBAでは、印刷を実行するマクロを作ることができるため、エクセルで作成した見積書や請求書を印刷する作業もワンクリックで手放しできます。印刷する作業でパソコンの前に張りつくことをやめて省力化・自動化することでデスクワークの負担を軽くしていきましょう。
この記事では、VBAでエクセルの帳票や特定の様式を印刷するマクロの作り方について紹介していきます。

エクセルVBAでマクロを作ってしまえば、シートの印刷も楽ちんになるよ♡
エクセルVBAで印刷するマクロの作り方
シートを印刷するマクロを作るためには、VBAの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で印刷するマクロのサンプルコード
アクティブな(画面上に表示している)シートの印刷
以下のようにコードを書きます。
Sub プリントアウトメソッド() ActiveSheet.PrintOut End Sub

表示中のシートにあるすべてを印刷するコードだね。
特定のシートを指定して印刷
印刷するシートを指定したいときは、以下のようにコードを書きます。
Sub プリントアウトメソッド() ThisWorkbook.Worksheets("Sheet1").PrintOut 'または ThisWorkbook.Worksheets(1).PrintOut End Sub
Sheetsコレクションから、インデックスである数値もしくは、シート名である”Sheet1“を指定して印刷するコードです。
ActiveSheetとちがうポイントは、現在開かれているシートではないため、状況によって印刷するシートが変わることがなく、別のシートを印刷してしまうといったミスが発生しなくなります。

Sheet1を任意のシート名に書きかえると、指定したシートを印刷するよ。
セル範囲を指定して印刷
セルの範囲を指定して印刷するときは、以下のようにコードを書きます。
Sub プリントアウトメソッド() ThisWorkbook.Worksheets("Sheet1").Range("A1:H3").PrintOut End Sub
こちらのコードであれば、Sheet1のセル範囲(“A1:H3”)が印刷する対象範囲になります。

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


グラフの名前を調べて、それを指定すれば印刷はできるよ。
Sub プリントアウトメソッド() Charts("グラフ1").PrintOut End Sub
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つのパラメーターがある

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