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

IT

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

Advertisements

PrintOutメソッド(印刷実行)

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

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

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

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

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

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

以下、PrintOutの引数です。

' vba
Sheets(1).PrintOut From:=2, To:=3
Fromが開始ページ、Toが終了ページで、それぞれ半角数字で指定します。
省略するとすべてのページを印刷します。
printout10
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です。
printout18
PrintOut preview:=TruePrintPreviewは実質同じ命令です。両方実行すれば、プレビューが二回表示されます。
Advertisements

プリンタの指定(Active Printer)

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

ファイルに出力(PrintToFile)

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

' vba
ActiveSheet.PrintOut PrintToFile:=True
PrintToFileをTrueにすることで、印刷結果をファイルに出力することができます。規定値はFalseです。
printout13
実行すると出力するファイル名を訊かれます(後述するPrToFileNameで最初から指定しておくことも可能)。
printout14
C:\Users\User\Desktop\test.txtのように指定してOKを押してみます。
印刷自体は普通に行われ、
printout15
それとは別にデスクトップにファイルが作成されます。
printout16
中身はこんな感じ。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で出力するファイル名をあらかじめ指定できます。
printout17
試しにPrintToFile抜きで実行してみましたが、その場合もファイルは作ってくれるようです。

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

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

その他の設定

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

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

コメント