【ExcelVBA入門】高度な印刷設定をする方法とは?高速化対応も解説!

皆さんは、VBAで印刷する方法を知っていますか?

Excelのデータを印刷するケースはよくあるので、使い方を覚えておくと便利です!

そこで今回は、

・VBAで印刷する方法

といった基礎的なことから、

・VBAで高度な印刷設定をする方法

・印刷を高速化するテクニック

といった応用的な方法まで、徹底的に解説します!

目次

基礎的な印刷・プレビュー方法

はじめに、VBAで印刷・プレビューする方法について簡単に解説します。

印刷・プレビューする方法は次のとおりです。

使い方:

‘シート全体を印刷する場合
Worksheets(シート名).PrintOut       '印刷
Worksheets(シート名).PrintPreview   '印刷プレビュー

‘指定した範囲を印刷する場合
Range(印刷範囲).PrintOut       '印刷
Range(印刷範囲).PrintPreview   '印刷プレビュー

シート全体を指定する場合は「Worksheets(シート名)」を指定し、範囲指定する場合は「Range(セル範囲)」のようにセル範囲を指定します。

このように、簡単に印刷・プレビューをすることができます。

VBAの基礎的な印刷方法については以下で詳しく解説しているので、気になる方は見てみてくださいね!


【VBA入門】印刷範囲の設定方法・セル選択で直接指定する方法とは
更新日:2024年3月1日

詳細な印刷設定方法

次に、詳細な印刷設定方法について解説します。

余白の設定方法

まずは、「余白の設定方法」について解説します。

印刷の余白は、Marginプロパティを使って設定します。

上下左右・ヘッダー・フッダーでそれぞれ以下のように設定することができます。

No設定値意味
1LeftMargin左余白の設定
2RightMargin右余白の設定
3TopMargin上余白の設定
4BottomMargin下余白の設定
5HeaderMarginヘッダー余白の設定
6FooterMarginフッター余白の設定

サンプルコード:

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プロパティ意味
1LeftHeaderヘッダー左
2CenterHeaderヘッダー中央
3RightHeaderヘッダー右
4LeftFooterフッダー左
5CenterFooterフッダー中央
6RightFooterフッダー右

ヘッダー・フッダーはシート名、ページ番号、日付などをよく使うので、合わせて以下オプションも覚えておくと便利です!

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を使っていると、データを印刷したいケースはよくあります。

使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次