皆さんは、VBAで印刷する方法を知っていますか?
Excelのデータを印刷するケースはよくあるので、使い方を覚えておくと便利です!
そこで今回は、
・VBAで印刷する方法
といった基礎的なことから、
・VBAで高度な印刷設定をする方法
・印刷を高速化するテクニック
といった応用的な方法まで、徹底的に解説します!
基礎的な印刷・プレビュー方法
はじめに、VBAで印刷・プレビューする方法について簡単に解説します。
印刷・プレビューする方法は次のとおりです。
使い方:
‘シート全体を印刷する場合
Worksheets(シート名).PrintOut '印刷
Worksheets(シート名).PrintPreview '印刷プレビュー
‘指定した範囲を印刷する場合
Range(印刷範囲).PrintOut '印刷
Range(印刷範囲).PrintPreview '印刷プレビュー
シート全体を指定する場合は「Worksheets(シート名)」を指定し、範囲指定する場合は「Range(セル範囲)」のようにセル範囲を指定します。
このように、簡単に印刷・プレビューをすることができます。
VBAの基礎的な印刷方法については以下で詳しく解説しているので、気になる方は見てみてくださいね!
【ExcelVBA入門】PrintOutを使った印刷方法について徹底解説!
更新日 : 2019年7月9日
【VBA入門】印刷範囲の設定方法・セル選択で直接指定する方法とは
更新日 : 2018年9月11日
詳細な印刷設定方法
次に、詳細な印刷設定方法について解説します。
余白の設定方法
まずは、「余白の設定方法」について解説します。
印刷の余白は、Marginプロパティを使って設定します。
上下左右・ヘッダー・フッダーでそれぞれ以下のように設定することができます。
No | 設定値 | 意味 |
1 | LeftMargin | 左余白の設定 |
2 | RightMargin | 右余白の設定 |
3 | TopMargin | 上余白の設定 |
4 | BottomMargin | 下余白の設定 |
5 | HeaderMargin | ヘッダー余白の設定 |
6 | FooterMargin | フッター余白の設定 |
サンプルコード:
Sub Test()
'印刷設定
With Worksheets("請求書").PageSetup
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1)
.BottomMargin = Application.CentimetersToPoints(1)
.HeaderMargin = Application.CentimetersToPoints(0.5)
.FooterMargin = Application.CentimetersToPoints(0.5)
End With
'印刷プレビュー
Worksheets("請求書").PrintPreview
End Sub
上下左右にそれぞれ1cm、ヘッダー・フッダーにそれぞれ0.5cm余白を設定しています。
このように、簡単に余白を設定することができます。
「CentimetersToPoints」はcmで数値を指定するための関数なので、合わせて覚えておくと便利です!
用紙の向きの設定方法
次に、「用紙の向きの設定方法」について解説します。
用紙の向きは、Orientationプロパティを使って設定します。
指定方法は次のとおり。
・縦向き:xlPortrait
・横向き:xlLandscape
これだけだとわかりづらいので、簡単なサンプルを用意しました。
サンプルコード:
Sub Test()
'印刷設定
With Worksheets("請求書").PageSetup
.Orientation = xlPortrait
End With
'印刷プレビュー
Worksheets("請求書").PrintPreview
End Sub
縦向きで印刷されるよう設定しているサンプルです。
このように、簡単に用紙の向きを指定することができます。
ヘッダー・フッダーの設定方法
次に、「ヘッダー・フッダーの設定方法」について解説します。
ヘッダー・フッダーは、左・中央・右の表示位置ごとに、それぞれ次のように指定して値を設定します。
No | プロパティ | 意味 |
1 | LeftHeader | ヘッダー左 |
2 | CenterHeader | ヘッダー中央 |
3 | RightHeader | ヘッダー右 |
4 | LeftFooter | フッダー左 |
5 | CenterFooter | フッダー中央 |
6 | RightFooter | フッダー右 |
ヘッダー・フッダーはシート名、ページ番号、日付などをよく使うので、合わせて以下オプションも覚えておくと便利です!
No | 設定値 | 変換された値 |
1 | &D | 日付 |
2 | &P | ページ番号 |
3 | &N | 総ページ数 |
4 | &A | シート名 |
これだけだとわかりづらいので、簡単なサンプルを用意しました。
サンプルコード:
Sub Test4()
'印刷設定
With Worksheets("請求書").PageSetup
.Orientation = xlPortrait
.CenterHeader = "&A"
.RightHeader = "&D"
.CenterFooter = "&P" & "/" & "&N"
End With
'印刷プレビュー
Worksheets("請求書").PrintPreview
End Sub
ヘッダー中央にシート名、ヘッダー右に日付、フッダー中央に(ページ/総ページ数)を表示するためのサンプルです。
このように、簡単にヘッダー・フッダーを設定することができます。
合わせて覚えると便利な印刷処理高速化方法
ここまで詳細な印刷設定方法について解説してきましたが、Excelとプリンターを接続したまま印刷設定をすると、1つずつ設定するため時間がかかってしまします。
印刷設定直前にプリンターとの接続を切り、全ての設定の準備ができた後にプリンターを再接続することで、無駄な待ち時間なく高速で印刷設定をすることができます。
ApplicationオブジェクトのPrintCommunicationプロパティで、以下のようにプリンターの接続を設定することができます。
・True :接続
・False:接続を切る
こちらもサンプルコードを用意しました。
サンプルコード:
Sub Test5()
'プリンタ接続を一度切る
Application.PrintCommunication = False
'印刷設定
With Worksheets("請求書").PageSetup
.Orientation = xlPortrait
.CenterHeader = "&A"
.RightHeader = "&D"
.CenterFooter = "&P" & "/" & "&N"
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1)
.BottomMargin = Application.CentimetersToPoints(1)
.HeaderMargin = Application.CentimetersToPoints(0.5)
.FooterMargin = Application.CentimetersToPoints(0.5)
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
'プリンタを再接続
Application.PrintCommunication = True
'印刷プレビュー
Worksheets("請求書").PrintPreview
End Sub
以下の流れで処理を書いているため、印刷設定が多くても無駄な時間を待たずに処理を動かすことができます。
設定前にプリンタとExcelの接続を止める
↓
VBAで設定用のコードを実行
↓
最後にプリンタとExcelを接続
印刷設定とあわせて覚えておくと便利です!
まとめ
今回は、VBAで印刷設定をする方法について解説しました。
Excelを使っていると、データを印刷したいケースはよくあります。
使い方も簡単なので、ぜひ使ってみてくださいね!