ExcelVBA(マクロ)で印刷する方法/PrintOut、PrintPreviewメソッドの使い方

IT

ワークシートやグラフを何度も定期的に印刷する場合、あらかじめマクロで印刷範囲や設定を決めておくと時間短縮、労力削減につながります。ここではVBAでの印刷方法および設定について解説しています。

スポンサーリンク

PrintOutメソッド(印刷実行)

印刷
対象.PrintOut (From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName,IgnorePrintAreas)
※()内は省略可能
設定の説明は後に回すとして、最も基本的な形としては、対象範囲に対してPrintOutを実行するだけで印刷されます。プレビューなどは表示されず、問答無用で実行されます。
ちなみにActiveCell = 「今選択しているセル(範囲選択してるならその中の左上のセル)」です。
ActiveCell、Range、Cells、WorkSheets、ActiveSheetなどで範囲を指定できます。
ActiveWorkbook.PrintOutを行うと、現在使用中のブックのシートを全部印刷します。
ThisWorkbookだと、マクロを実行しているブックが対象となります。

PrintPreviewメソッド(プレビュー表示)

印刷プレビュー表示
対象.PrintPreview (EnableChanges)
※()内は省略可能
一度プレビューを表示してから印刷したい場合は、PrintPreviewメソッドを使用します。
実行するとプレビューが表示され、印刷、設定、キャンセルが行えます。
PrintPreviewのあとにPrintOutを付けたくなりますが、こうするとプレビューで印刷をキャンセルしたのに印刷スタート(または印刷二回実行)みたいなことになるので、一度の印刷にふたつ使わないようにしてください。

プレビュー時の設定変更禁止(EnableChanges)

PrintPreviewメソッドの引数EnableChangesはTrueまたはFalseのブール型で指定します。
True(規定値)だと、プレビューで余白や用紙サイズ、色などの設定変更が可能です。
Falseにするとこんな感じで、プレビューから設定変更ができなくなります。

印刷開始/終了ページの指定(From、To)

以下、PrintOutの引数です。

' vba
Sheets(1).PrintOut From:=2, To:=3
Fromが開始ページ、Toが終了ページで、それぞれ半角数字で指定します。
省略するとすべてのページを印刷します。
From:=2, To:=3のPrintOutをActiveWorkbookに対して実行すると、「全てのシートの2~3ページを印刷」という命令になります。

印刷部数の指定(Copies)

' vba
ActiveSheet.PrintOut copies:=2
半角数字で指定することで、印刷する部数を指定できます。規定値は1です。

プレビュー表示(Preview)

' vba
ActiveSheet.PrintOut Preview:=True
PrintPreviewメソッドを使わず、PrintOutで引数PreviewをTrueにすることでも印刷前プレビュー表示は可能です。規定値はFalseです。
PrintOut preview:=TruePrintPreviewは実質同じ命令です。両方実行すれば、プレビューが二回表示されます。
スポンサーリンク

プリンタの指定(Active Printer)

' vba
ActiveSheet.PrintOut ActivePrinter := _
"send to kindle"
使用するプリンタを指定できます。PDFにしたり、Fax送ったりもできます。省略すると現在使っているプリンタになります。
使用可能なプリンタは、印刷プレビュー画面で確認できます。

ファイルに出力(PrintToFile)

すいませんがこの機能についてはよく知りません。とりあえず触った結果だけ書いときます。

' vba
ActiveSheet.PrintOut PrintToFile:=True
PrintToFileをTrueにすることで、印刷結果をファイルに出力することができます。規定値はFalseです。
実行すると出力するファイル名を訊かれます(後述するPrToFileNameで最初から指定しておくことも可能)。
C:\Users\User\Desktop\test.txtのように指定してOKを押してみます。
印刷自体は普通に行われ、
それとは別にデスクトップにファイルが作成されます。
中身はこんな感じ。CSVでも出せます。内容分からないので一応隠しましたが、最初のほうに設定が色々書いてあります。
何かあった時の設定確認に使う機能なんじゃないかと思います。

部単位で印刷(Collate)

' vba
ActiveSheet.PrintOut Collate := True
TrueかFalseで指定します。Trueにすると部単位で印刷できます(規定値:False)。
たとえば3ページの資料を2部印刷するとして、Trueなら123123と印刷、Falseなら112233と印刷します。

出力ファイル名指定(PrToFileName)

' vba
ActiveSheet.PrintOut PrintToFile:=True, _
PrToFileName:="C:\Users\User\Desktop\test.txt"
PrintToFileで出力するファイル名をあらかじめ指定できます。
試しにPrintToFile抜きで実行してみましたが、その場合もファイルは作ってくれるようです。

既定の印刷範囲を無視(IgnorePrintAreas)

Excelではページレイアウトタブ印刷範囲印刷範囲の設定とすることであらかじめ印刷する範囲を決めておくことができますが、
' vba
ActiveSheet.PrintOut IgnorePrintAreas := True
PrintOutの引数でIgnorePrintAreasをTrueにすると、それを無視することができます。規定値はFalseです。
WorkBookオブジェクト、Sheetsコレクション、WorkSheetオブジェクト、WorkSheetsコレクションを対象にした時のみ指定可能です。

その他の設定

PageSetupオブジェクトを使うと、部数や用紙サイズ、余白などの設定も行うことができます。必要に応じて併せてご参照ください。

ExcelVBA(マクロ)で余白、用紙サイズ、ヘッター、フッターなど印刷のページ設定をする方法/PageSetupオブジェクトの使い方
基本的な印刷についてはPrintOutおよびPrintPreviewの記事で解説しましたが、もう少しつっこんだ印刷設定もまとめて行いたい場合、PageSetupオブジェクトを使い、印刷の「ページ設定」をVBAであらかじめ設定しておくことがで...
Excel(エクセル):印刷、ヘッダーとフッター
Excelにおける印刷操作関連まとめです。 印刷方法 印刷を実行するには、印刷したいシートを選択した状態で①ファイルをクリックし、 さらに印刷をクリックするか、 印刷 Ctrl+P ②ショートカットを押します...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント

モバイルバージョンを終了