毎日の印刷業務に追われていませんか?
エクセル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 NextまたはFor Eachをステートメントですべてを印刷する
- 条件を判定してその後の処理に分岐する処理
- Ifステートメントで条件式に一致したシートは印刷はしない

くり返しと条件分岐についての記事は以下をクリックしてね。
ForEachなどのくり返し処理の書きかたはコチラ
条件分岐によって処理を分けるときの書きかたはコチラ
複数シートを連続で印刷をするマクロ(For Each版)
For Eachステートメントをつかって複数のシートを印刷する場合のマクロです。
PrintOutメソッドのVBAコード
Option Explicit
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
08行目
ForEachステートメントをつかってワークシートコレクションに含まれるシートの数だけくり返すようにします。
11行目
If文による条件式でシートの名前によって条件に当てはまったシート名であったときは印刷が実行されます。
ここでは、演算子として”<>”をつかうことで〇〇ではないときは印刷するといった指示になります。つまり、シート名が”印刷したくないシート“ではないシートが印刷されることになります。
(※”印刷したくないシート”を任意の名前に変更することで印刷から除外されます。)
13行目
PrintOutメソッドで印刷を実行します。
複数シートを連続で印刷をするマクロ(For Next版)
For Nextステートメントをつかって複数のシートを印刷する場合のマクロです。
PrintOutメソッドのVBAコード
Option Explicit
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
08行目
ForNextステートメントをつかってくり返しを指定します。ここでは、Worksheets.Countプロパティでシートの数だけくり返すようにしています。
11行目
If文による条件式でシートの名前によって条件に当てはまったシート名であったときは印刷が実行されます。
ここでは、演算子として”<>“をつかうことで〇〇ではないときは印刷するといった指示になります。つまり、シート名が”印刷したくないシート“ではないシートが印刷されることになります。
(※”印刷したくないシート”を任意の名前に変更することで印刷から除外されます。)
13行目
PrintOutメソッドで印刷を実行します。

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

印刷対象をWorkbookオブジェクトにするとすべてのシートが印刷されるよ。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
'このエクセルファイルのシート2から3までを印刷するマクロ
ThisWorkbook.Worksheets.PrintOut from:=2, to:=3
End Sub
※ワークシートコレクションのPrintOutメソッドを利用しているため、すべてのワークシート(グラフシートなどは対象外)が対象となります。

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

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

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

PrintToFileパラメーター
PrintOutメソッドの”PrintToFile“パラメーターは印刷する対象をファイルに出力する設定をします。
PrintToFileパラメーターはTrueまたはFalseの真偽値を用いて指定をしますが、省略した場合Falseと同じくファイルは作られません。
PrintToFileは、PrToFileNameとあわせてつかうことで出力時のファイル名の指定ができます。
PrToFileNameパラメーターではファイル名が指定できますが、省略した場合はファイル名を入力するウィンドウが表示されます。
以下のサンプルコードでは、PrintToFileにTrueを設定したうえで、PrToFileNameに”テスト“を指定しているので”テスト“という名前のファイルが作られます。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
'印刷する対象をファイルに出力するマクロ
ThisWorkbook.Worksheets.PrintOut _
from:=2, to:=2, copies:=2, PrintToFile:=True, PrToFileName:="テスト"
End Sub
PrintToFileで作られたファイルは「prn形式の印刷データ」で作られます。
※prn形式のファイルは、エクセルのアプリケーションでは開くことはできません。

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


部単位の印刷は会議資料を配布するときなんかには便利かも。
IgnorePrintAreasパラメーター
PrintOutメソッドのIgnorePrintAreasパラメーターは設定されている印刷範囲を無視する設定をします。
“IgnorePrintAreas“パラメーターはTrueまたはFalseの真偽値を用いて指定をしますが、Trueの場合事前に設定されている印刷範囲を無視し、オブジェクト全体を印刷する設定になります。
以下のサンプルコードでは、IgnorePrintAreasをTrueに設定していますので設定されていた印刷範囲に従わずすべてのオブジェクトを印刷します。
PrintOutメソッドのVBAコード
Option Explicit
Sub プリントアウトメソッド()
'印刷範囲を無視し、オブジェクト全体を印刷するマクロ
ThisWorkbook.Worksheets("Sheet1").PrintOut preview:=True, IgnorePrintAreas:=True
End Sub
サンプルコードには、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つのパラメーターがある

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