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

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

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

そこで今回は、

・VBAで印刷する方法

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

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

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

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

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

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

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

使い方:

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

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

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

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

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


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

詳細な印刷設定方法

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

余白の設定方法

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

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説