※本ブログのページには広告主との提携による広告や宣伝、プロモーションが含まれます。当ブログを経由しての商品の購入や、サービス申し込みが発生すると、それらの提携企業からの成果報酬を受けとる場合があります。

エクセルVBA|印刷作業をワンクリックに。PrintOutメソッドをあつかうマクロ

エクセルVBAのPrintOutメソッドのトップ画像

職場での作業において、エクセルなどで作った見積書や請求書をたくさん印刷する場面はありますが、これを毎回クリックで操作しながら作業をすると、かなりの時間と労力が必要になります。

エクセルVBAでは、印刷を実行するマクロを作ることができるため、エクセルで作成した見積書や請求書を印刷する作業もワンクリックで手放しできます。印刷する作業でパソコンの前に張りつくことをやめて省力化・自動化することでデスクワークの負担を軽くしていきましょう。

この記事では、VBAでエクセルの帳票や特定の様式を印刷するマクロの作り方について紹介していきます。

エクセルVBAでマクロを作ってしまえば、シートの印刷も楽ちんになるよ♡

独学だと中々スキルが身についた実感が湧かない。学習環境を見直してみませんか?

エクセルで繰り返しや転記作業で苦しい思いをした経験はありませんか?
今まで苦労してきたその作業を簡単なプログラムをおぼえるだけで解決できる可能性があります。
なるべくお金や時間をかけずにエクセルマクロVBAを習得したい人にはこちらの「1日速習講座」がおすすめです。

エクセルVBAで印刷するマクロの作り方

シートを印刷するマクロを作るためには、VBAのPrintOutメソッドを使います。

PrintOutメソッドがあつかえるオブジェクトは多数存在しています。イメージがしやすいものとしてはシートとなりますが、ブックやセルなどもPrintOutメソッドをあつかえます。

まずは、PrintOutメソッドについて紹介していきます。

メソッドは、して欲しい処理を命令するものだよ。

PrintOutメソッドの構文

PrintOutメソッドの構文

.PrintOut (From、 To、 Copies、 Preview、 ActivePrinter、 PrintToFile、 Collate、 PrToFileName、 IgnorePrintAreas)

式の部分にはオブジェクトに指定します。(例:シート (Worksheet) オブジェクトなど)

PrintOutメソッドで設定可能なパラメーター

PrintOutメソッドで設定可能なパラメーターは、以下の9つとなります。

パラメーター名 必須/省略可 概要
From 省略可 どのページから印刷をはじめるかを番号で指定します。
※省略すると最初のページになります。
To 省略可 どのページまで印刷をするかを番号で指定します。
※省略すると最後のページになります。
Copies 省略可 印刷部数を指定します。
※省略すると1部印刷になります。
Preview 省略可 印刷前にプレビューを表示するかをTrue/Falseで指定します。
※Falseや省略ではプレビューを表示せず印刷を開始します。
ActivePrinter 省略可 アクティブなプリンターの名前を指定します。
PrintToFile 省略可 ファイルとして出力するかをTrue/Falseで指定します。
※PrToFileName が指定されていない場合、出力するファイル名を入力するウィンドウを表示します。
Collate 省略可 部単位で印刷するかの設定をTrue/Falseで指定します。
PrToFileName 省略可 PrintToFile が True に設定されている場合、ファイル名を指定します。
IgnorePrintAreas 省略可 印刷範囲を無視してオブジェクト全体を印刷するかをTrue/Falseで指定します。

複数枚のシートを2部以上印刷をするとき、Trueにした場合は、1部(1ページ目,2ページ目,3ページ目…)→2部(1ページ目,2ページ目,3ページ目…)となります。

具体的に設定値をTrueまたはFalseにした場合の印刷結果については下記図を参考にしてください。

PrintOutメソッドのCollateパラメーターの設定による印刷結果の変化のイメージ

PrintOutメソッドで指定するオブジェクトやプロパティ

PrintOutメソッドは、以下のオブジェクトやプロパティを指定することで印刷する対象を指定できます。

PrintOutメソッドを使用して、ワークブック全体を印刷できます。PrintOutメソッドの対象となるワークブックは、Workbooksコレクションから取得することが一般的です。

PrintOutメソッドを使用して、ワークシート単位で印刷できます。PrintOutメソッドの対象となるワークシートは、Worksheetsコレクションから取得できます。

PrintOutメソッドを使用して、特定のセル範囲を印刷できます。Rangeオブジェクトを使用して、印刷したいセル範囲を指定します。

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ステートメントをつかってシート名を判定し、条件に一致したシートは印刷はしない

For Eachなどの繰り返し文の書きかたについてはこちらで確認ができます。また、If文をつかった条件分岐で処理をわける方法についてはこちらの記事で解説しています。

特定シート以外を連続で印刷するサンプルコード(For Eachステートメントで書いた場合)
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
特定シート以外を連続で印刷するサンプルコード(For Nextステートメントで書いた場合)
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文の条件で指定した、印刷したくないシートの部分を任意の名前に変更すると、そのシートが印刷から除外されます。

特定のシート以外の印刷ができると便利だね。

独学の学習効率でお悩みの人必見!
<動画学習見放題サービス>

初心者にやさしいチューターなら今すぐにはじめられる

オンラインで学習したい
プログラミングで副業をはじめたい
パソコン・エクセルの学習をしたい

エクセル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

PrintToFilePrToFileNameをセットでつかうとファイル名を指定できます。

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を指定または、省略するとページ単位で印刷します。

PrintOutメソッドのCollateパラメーターの設定による印刷結果の変化のイメージ

部単位の印刷は会議資料を配布するときなんかには便利かも。

IgnorePrintAreasパラメーターでオブジェクト全体を印刷するマクロ

IgnorePrintAreasパラメーターをTrueに指定することで、事前に設定されている印刷範囲を無視し、オブジェクト全体を印刷するマクロになります。

Sub プリントアウトメソッド()
                     
    '印刷範囲を無視し、オブジェクト全体を印刷するマクロ
    ThisWorkbook.Worksheets("Sheet1").PrintOut preview:=True, IgnorePrintAreas:=True

End Sub

IgnorePrintAreasパラメーターはTrue/Falseで指定します。Trueを指定した場合、事前に印刷範囲を指定していても、この範囲を無視してすべてのオブジェクトを印刷するマクロになります。

サンプルコードには、previewパラメーターを指定していますので、印刷プレビュー画面で確認してみます。結果がわかりやすくなるようにエクセルのSheet1に印刷範囲を設定しておきます。

印刷範囲を設定したエクセルのワークシートの画像
Sheet1の上部の薄いピンク色の部分に印刷範囲を設定しています。

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

PrintOutメソッドのIgnorePrintAreasパラメーターをTrueに指定したときの印刷プレビュー画面

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

PrintOutメソッドのIgnorePrintAreasパラメーターをFalseに指定したときの印刷プレビュー画面

印刷範囲の設定が反映され、範囲内の領域のみ印刷プレビューに表示されます。

IgnorePrintAreasパラメーターは、Sheets、Workbook、Worksheet、Worksheetsのオブジェクトでのみ指定ができます。

差し込み印刷マクロをVlookupで連続印刷の自動化をする

この記事で紹介したPrintOutメソッドをつかったマクロですが、請求書を作成するマクロなどと組み合わせることで一連の作業を自動化し、さらに便利なマクロを作れます。

顧客リストや売上を記録したワークシートから、請求書に必要な情報を取得し、それぞれの取引先ごとの請求書を入力、印刷までの処理を書いたエクセルVBAの解説はこちらの記事をご覧ください。

エクセルVBAで印刷するマクロの作り方まとめ

印刷作業をマクロをつかってワンクリックにするなどができれば、あなたの作業の負担を大きく減らすことができる効果が期待できます。印刷はマクロにまかせて、他の作業を進められるようになるなど、仕事を効率よく進められてとても便利です。

紹介したエクセルVBAのサンプルコードも短いため、あなた自身の環境にあわせてカスタマイズするのもとても簡単にできるかと思います。

身近な作業を効率良くしていくことは、マクロを作りの楽しみにもなるよ。

さいごに本記事で紹介したことをまとめておきます。

パラメーターの組み合わせかたで印刷の各種設定ができるね。

コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。

コメント

タイトルとURLをコピーしました