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

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

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

 毎日の印刷業務に追われていませんか?

エクセルVBAマクロを活用すれば、複数のステップが必要だった印刷作業がたった1クリックで完了します。

 本記事では、印刷設定の選択、範囲指定、プレビュー確認といった手間のかかる作業をすべて自動化し、作業時間を大幅に短縮する方法をご紹介します。

印刷ミスの削減業務効率の向上、そして何より、本来の業務に集中できる時間の確保などこれらすべてのメリットを手に入れましょう。

たった一度の設定で、毎日の印刷ストレスから解放される方法をぜひお試しください。

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

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

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

 エクセルVBAでシートの印刷を1クリックするマクロを作るためには、PrintOutメソッドと呼ばれるものを使います。

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で印刷するマクロのサンプルコード

アクティブな(画面上に表示している)シートの印刷

PrintOutメソッドつかう場合は以下のようにコードを書きます。

  
Option Explicit

Sub プリントアウトメソッド()

    ActiveSheet.PrintOut

End Sub

05行目

 アクティブシートに表示されているものを印刷します。

表示中のシートにあるすべてを印刷するコードだね。

特定のシートを指定して印刷

 特定のシートを印刷したいときは、以下のようにコードを書きます。

  
Option Explicit

Sub プリントアウトメソッド()

    ThisWorkbook.Worksheets("Sheet1").PrintOut

'または

    ThisWorkbook.Worksheets(1).PrintOut

End Sub

05行目・09行目

 Sheetsコレクションから、インデックスである数値もしくは、シート名である”Sheet1を指定して印刷するコードです。

ActiveSheetとちがうポイントは、明確にシートを指定しているのでアクティブになっているシートが印刷対象となるのではなく、状況によって印刷するシートが変わらないところです。

こちらの書きかたであれば、誤って希望しないシートを印刷してしまうミスが予防できます。

Sheet1を任意のシート名に書きかえると、指定したシートを印刷するよ。

セル範囲を指定して印刷

 セルの範囲を指定して印刷するときは、以下のようにコードを書きます。

  
Option Explicit

Sub プリントアウトメソッド()

    ThisWorkbook.Worksheets("Sheet1").Range("A1:H3").PrintOut

End Sub

05行目

Sheet1セル範囲(“A1:H3”)を印刷します。

任意の範囲に書きかえると、指定した範囲を印刷するよ。

グラフやチャートを指定して印刷

 グラフやチャートを指定して印刷するときは、以下のようにコードを書きます。

グラフを印刷するときには、印刷したいグラフがワークシート上にあるグラフであるか、グラフシートを印刷するのかでコードの書きかたが異なります。

それぞれを印刷するマクロのサンプルコードを紹介します。

ワークシート上のグラフを印刷するマクロ

  
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オブジェクトは、中身のグラフ自体を指し示すオブジェクトとなるため、こういった書きかたになるわけです。

 はじめてこれを聞いたとき、額縁と絵みたいなイメージだと感じましたが、すこし難しく感じる人は、指示文としてこういった書きかたをする覚えてしまっても問題ないです。

なお、それぞれのグラフの名前をどのように調べるかの手順ですが、エクセルのワークシート上で対象のグラフを選択した状態にして、画面左上の枠内を確認します。

エクセルワークシート上でグラフ名を確認する手段のイメージ

グラフの名前を調べて、それを指定すれば印刷はできるよ。

グラフシートを印刷するマクロ

  
Option Explicit

Sub プリントアウトメソッド()
    
   Charts("グラフ1").PrintOut

End Sub

05行目

 Chartsコレクションから、グラフ1という名前のグラフシートを印刷するマクロです。

グラフシートはグラフ専用シートのことだよ。

グラフシートの挿入方法

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

グラフシートを作成する手順の画像

ワークシート上のグラフと、グラフシートがあるってことだね。

複数シートを連続で印刷をするマクロ

 エクセルファイル(ブック)のすべてのシートを連続で印刷する場合は、Workbookオブジェクトを指定すれば属するシートはすべて印刷されます。

また、特定のシートを印刷する場合は、Worksheetオブジェクトから、インデックス番号シート名を指定することで実行ができます。

 それでは、複数のシートを連続で印刷したい場合のマクロを考えてみます。

もうすこし厳密に言えば、特定したシートだけは除いて必要なシートだけを印刷したい場面を想定しています。


 まずは実装するにあたり必要な要素として見ておきましょう。


〇マクロを作るために必要な要素

  • シートの印刷をり返す処理
    • For NextまたはFor Eachをステートメントですべてを印刷する
  • 条件を判定してその後の処理に分岐する処理
    • Ifステートメントで条件式に一致したシートは印刷はしない

くり返しと条件分岐についての記事は以下をクリックしてね。

複数シートを連続で印刷をするマクロ(For Each版)

 For Eachステートメントをつかって複数のシートを印刷する場合のマクロです。

  
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ステートメントをつかって複数のシートを印刷する場合のマクロです。

  
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メソッドで印刷を実行します。

まとめて印刷ができるとすごく便利だね。

PR

残業はしたくない!PCやExcelのスキルアップであなたのプライベート時間を奪わせない!
実務をプロから学べる「ユースフル」の動画は永年見放題。Q&A機能で分からないを放置しないから安心。


詳しくは以下のリンクをクリック

PrintOutメソッドの引数

 前の章でも紹介したとおり、PrintOutメソッドには複数のパラメーターがあります。

PrintOutメソッドは、これらのパラメーターを単独または複数で組み合わせてつかうことで柔軟に印刷に対応が可能です。

ここでは、それぞれをつかったときの効果をサンプルコードのマクロとともに紹介していきます。

From・Toパラメーター

 PrintOutメソッドの引数である”From“と”To“をつかって印刷するブックに含まれるシートを指定します。

こちらのマクロでは、エクセルファイル(ブック)に含まれるすべてのシートが印刷対象になりますが、引数の指定によって2枚目から3枚目までが印刷されます。

  
Option Explicit

Sub プリントアウトメソッド()
            
    'このエクセルファイルのシート2から3までを印刷するマクロ
    ThisWorkbook.PrintOut from:=2, to:=3
    
End Sub

 ※ワークブックオブジェクトのPrintOutメソッドを利用しているため、ワークブックに含まれるすべてのシートが対象となります。

印刷対象をWorkbookオブジェクトにするとすべてのシートが印刷されるよ。

  
Option Explicit

Sub プリントアウトメソッド()
            
    'このエクセルファイルのシート2から3までを印刷するマクロ
    ThisWorkbook.Worksheets.PrintOut from:=2, to:=3
    
End Sub

※ワークシートコレクションのPrintOutメソッドを利用しているため、すべてのワークシート(グラフシートなどは対象外)が対象となります。

ワークシートのみに限定したいならこっちだね。

Copiesパラメーター

 PrintOutメソッドの”Copies“パラメーターは印刷する部数を指定します。

 ”from”や”To”パラメーターの紹介で書いたコードに追記してみました。

copies“パラメーターは印刷する枚数を数値で指定します。

こちらのサンプルコードの実行結果では、2ページ目を2枚印刷するマクロとなります。

  
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ページ分の印刷プレビュー画面を表示します。

  
Option Explicit

Sub プリントアウトメソッド()
            
    '印刷する前に印刷プレビュー画面を表示するマクロ
    ThisWorkbook.Worksheets.PrintOut from:=1, to:=3, copies:=2, preview:=True
    
End Sub

大量に印刷をする前には印刷プレビューでチェックできると安心だね。

ActivePrinterパラメーター

 PrintOutメソッドのパラメーターの”ActivePrinter“は、印刷するときにつかうプリンターを指定します。

設定値にはプリンターの名前を指定する必要があります。

こちらのサンプルコードでは、”Brother MFC-J738DN“という名前のプリンタを指定しています。

  
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パラメーターではファイル名が指定できますが、省略した場合はファイル名を入力するウィンドウが表示されます。

 以下のサンプルコードでは、PrintToFileTrueを設定したうえで、PrToFileNameに”テスト“を指定しているので”テスト“という名前のファイルが作られます。

  
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に設定していますので部単位で印刷されます。

  
Option Explicit

Sub プリントアウトメソッド()
            
    '複数の部数を印刷をするときに部単位で印刷するマクロ
    ThisWorkbook.Worksheets.PrintOut _
    from:=1, to:=3, copies:=2, Collate:=True

End Sub

CollateパラメーターがTrueのときと、Falseのときのちがいについて

 部単位とページ単位で印刷される方式としては、以下のイメージ図のようになります。

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

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

IgnorePrintAreasパラメーター

 PrintOutメソッドのIgnorePrintAreasパラメーターは設定されている印刷範囲を無視する設定をします。

IgnorePrintAreas“パラメーターはTrueまたはFalseの真偽値を用いて指定をしますが、Trueの場合事前に設定されている印刷範囲を無視し、オブジェクト全体を印刷する設定になります。

 以下のサンプルコードでは、IgnorePrintAreasTrueに設定していますので設定されていた印刷範囲に従わずすべてのオブジェクトを印刷します。

  
Option Explicit

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

End Sub

 サンプルコードには、previewパラメーターを指定していますので、印刷プレビュー画面で確認してみます。

結果がわかりやすくなるようにエクセルのSheet1に印刷範囲を設定しておきます。

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

 印刷範囲を設定した状態でサンプルコードの”IgnorePrintAreas”パラメーターをTrueに設定したとき、Falseに設定したときの印刷プレビュー画面を比較してみます。

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

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


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

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

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

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

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

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

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

 印刷作業をマクロをつかってワンクリックにするなどができれば、あなたの作業の負担を大きく減らすことができる効果が期待できます。

印刷はマクロにまかせて、他の作業を進められるようになるなど、仕事を効率よく進められてとても便利です。

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

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

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

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

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

コメント

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