【VBAリファレンス】VBAで印刷プレビューを徹底攻略!基本表示と初期設定をマスターする(第18回 1/4)

スポンサーリンク

Excel VBAを使いこなすベテラン講師の皆様、そして日々業務効率化に奮闘されているVBAユーザーの皆様、こんにちは。このVBAマクロ講座も第18回を迎えました。今回は、多くのビジネスシーンで不可欠ながらも、意外とVBAでの操作がおろそかになりがちな「印刷プレビュー」に焦点を当てます。全4回にわたるこのシリーズの初回として、まずは印刷プレビューの基本的な表示方法と、その初期設定をVBAで制御する方法について深く掘り下げていきます。

概要

Excel VBAを活用する上で、単なるデータ処理や集計だけでなく、最終的なアウトプットである「印刷」を効率的に管理することは、業務全体の生産性向上に直結します。特に、誤った内容やレイアウトで印刷してしまうことは、紙やインクの無駄遣いだけでなく、時間的コスト、ひいては環境負荷増大にもつながります。この問題を解決する強力なツールが「印刷プレビュー」です。

通常、印刷プレビューは手動で操作しますが、VBAマクロを用いることで、このプレビュープロセスを完全に自動化し、ユーザーに最適な状態での確認を促すことが可能になります。例えば、特定の条件を満たすシートのみをプレビュー表示させたり、特定の印刷範囲や拡大率を適用した状態でプレビュー画面を開いたりすることで、ユーザーは毎回設定を確認する手間から解放され、印刷ミスを劇的に削減できます。

本シリーズ『VBAマクロで印刷プレビューを操作する』では、この強力な機能を全4回にわたって徹底的に解説していきます。今回はその第一歩として、VBAから印刷プレビューを表示させる基本的なメソッドと、プレビュー表示時の初期設定(拡大率やページ設定など)を制御するための`PageSetup`オブジェクトの活用法に焦点を当てます。これにより、単にプレビューを表示するだけでなく、「どのような状態で」表示させるかをVBAで細かくコントロールできるようになるでしょう。

詳細解説

VBAで印刷プレビューを操作する基本的なメソッドは、`PrintPreview`メソッドです。このメソッドは、`Application`オブジェクト、`Worksheet`オブジェクト、`Range`オブジェクトなど、複数のオブジェクトに用意されており、それぞれが異なるスコープでプレビュー表示を実行します。

1. **`Application.PrintPreview` メソッド:**
これはブック全体を対象としたプレビュー表示を行います。通常は非推奨とされており、特定のシートや範囲を指定する方が効率的です。

2. **`Worksheet.PrintPreview` メソッド:**
最も一般的に使用される方法で、特定のワークシートの印刷プレビューを表示します。例えば、`Worksheets(“Sheet1”).PrintPreview` と記述することで、「Sheet1」の印刷プレビューが開きます。このメソッドは引数を持ちません。

3. **`Range.PrintPreview` メソッド:**
特定の範囲のみを対象とした印刷プレビューを表示します。例えば、`Worksheets(“Sheet1”).Range(“A1:G20”).PrintPreview` と記述することで、「Sheet1」のA1からG20セル範囲のみの印刷プレビューが開きます。これも引数を持ちません。

4. **`PrintOut` メソッドの `Preview` 引数:**
`Worksheet.PrintOut` メソッドには、`Preview`というオプション引数が用意されています。これを`True`に設定することで、印刷を実行する代わりに印刷プレビューを表示させることができます。例えば、`Worksheets(“Sheet1”).PrintOut Preview:=True` と記述します。これは`Worksheet.PrintPreview`とほぼ同等の機能を提供しますが、`PrintOut`メソッドの他の引数(例えば`From`, `To`, `Copies`など)と組み合わせて、より詳細な印刷設定を反映させたプレビューを表示できる点で柔軟性があります。

さて、これらの`PrintPreview`メソッドや`PrintOut Preview:=True`は、単にプレビュー画面を開くだけではありません。プレビュー表示される内容や、プレビュー画面の初期状態(例えば、拡大率など)は、そのオブジェクトの現在の「ページ設定(PageSetup)」に大きく依存します。したがって、VBAで印刷プレビューを効果的に制御するためには、`PageSetup`オブジェクトのプロパティを事前に操作することが不可欠です。

`PageSetup`オブジェクトは、用紙サイズ、印刷の向き、余白、ヘッダー/フッター、拡大縮小率、印刷範囲など、印刷に関するあらゆる設定を管理します。これらのプロパティをVBAで設定し、その後に`PrintPreview`メソッドを呼び出すことで、目的のレイアウトや表示設定が適用された状態でプレビュー画面を開くことができます。

特に重要な`PageSetup`プロパティとその影響をいくつか紹介します。

* **`Zoom` プロパティ:** プレビュー表示時の拡大率を設定します。例えば、`Worksheets(“Sheet1”).PageSetup.Zoom = 75` と設定すると、75%の拡大率でプレビューが表示されます。`False`を設定すると、`FitToPagesWide`と`FitToPagesTall`の設定が優先されます。
* **`FitToPagesWide` と `FitToPagesTall` プロパティ:** 印刷内容を特定のページ幅や高さに収める設定です。`Worksheets(“Sheet1”).PageSetup.FitToPagesWide = 1` と `Worksheets(“Sheet1”).PageSetup.FitToPagesTall = 1` を同時に設定すると、内容が1ページに収まるように自動調整されます。`Zoom`が`False`の場合に有効になります。
* **`PrintArea` プロパティ:** 印刷範囲を設定します。`Worksheets(“Sheet1”).PageSetup.PrintArea = “A1:G50″` と設定すると、その範囲のみが印刷プレビューの対象となります。
* **`Orientation` プロパティ:** 印刷の向き(縦または横)を設定します。`xlPortrait`(縦)または `xlLandscape`(横)を指定します。
* **`CenterHorizontally` / `CenterVertically` プロパティ:** 印刷内容を用紙の中央に配置するかどうかを設定します。`True`または`False`。

これらの`PageSetup`プロパティを組み合わせることで、ユーザーが望む印刷イメージを正確にVBAで制御し、プレビュー画面に反映させることが可能になります。

サンプルコード

以下に、基本的な印刷プレビューの表示方法と、`PageSetup`オブジェクトを活用した初期設定の制御例を示します。

1. アクティブシートの印刷プレビュー表示

最もシンプルに、現在アクティブなシートの印刷プレビューを表示します。


Sub ActiveSheetPrintPreview()
    ' 現在アクティブなシートの印刷プレビューを表示します。
    ActiveSheet.PrintPreview
End Sub

2. 特定のシートの印刷プレビュー表示

シート名を指定して、そのシートの印刷プレビューを表示します。


Sub SpecificSheetPrintPreview()
    ' "データシート"という名前のシートの印刷プレビューを表示します。
    ' 存在しないシート名を指定するとエラーになります。
    On Error GoTo ErrorHandler
    Worksheets("データシート").PrintPreview
    Exit Sub

ErrorHandler:
    MsgBox "指定されたシート 'データシート' が見つかりませんでした。", vbCritical
End Sub

3. 特定の範囲の印刷プレビュー表示

特定のシートの特定の範囲のみを印刷プレビューの対象とします。


Sub RangePrintPreview()
    ' "レポートシート"のA1からH50の範囲のみを印刷プレビュー表示します。
    On Error GoTo ErrorHandler
    With Worksheets("レポートシート")
        .Range("A1:H50").PrintPreview
    End With
    Exit Sub

ErrorHandler:
    MsgBox "指定されたシート 'レポートシート' が見つからないか、範囲が不正です。", vbCritical
End Sub

4. 印刷設定を事前に変更してプレビュー表示

`PageSetup`オブジェクトを操作し、プレビューの拡大率、印刷の向き、印刷範囲などを設定してからプレビューを表示します。元の設定に戻す処理も加えています。


Sub CustomPageSetupAndPrintPreview()
    Dim ws As Worksheet
    Dim originalZoom As Variant
    Dim originalFitToPagesWide As Variant
    Dim originalFitToPagesTall As Variant
    Dim originalOrientation As XlPageOrientation
    Dim originalPrintArea As String

    Set ws = Worksheets("請求書") ' 対象シートを設定

    On Error GoTo ErrorHandler

    With ws.PageSetup
        ' 現在のページ設定を保存
        originalZoom = .Zoom
        originalFitToPagesWide = .FitToPagesWide
        originalFitToPagesTall = .FitToPagesTall
        originalOrientation = .Orientation
        originalPrintArea = .PrintArea

        ' プレビュー用のページ設定を適用
        .Zoom = False ' FitToPagesWide/Tall を有効にするためZoomをFalseに設定
        .FitToPagesWide = 1 ' 幅を1ページに収める
        .FitToPagesTall = 99 ' 高さは最大99ページまで許容(実質制限なし)
        .Orientation = xlLandscape ' 横向きに設定
        .PrintArea = "$A$1:$J$60" ' 印刷範囲をA1:J60に指定
        .CenterHorizontally = True ' 水平中央に配置
        .CenterVertically = False ' 垂直中央には配置しない
    End With

    ' 設定を適用した状態で印刷プレビューを表示
    ws.PrintPreview

    ' プレビュー終了後、元のページ設定に戻す
    With ws.PageSetup
        .Zoom = originalZoom
        .FitToPagesWide = originalFitToPagesWide
        .FitToPagesTall = originalFitToPagesTall
        .Orientation = originalOrientation
        .PrintArea = originalPrintArea
    End With

    MsgBox "印刷プレビューが終了しました。ページ設定は元に戻されました。", vbInformation
    Exit Sub

ErrorHandler:
    ' エラーが発生した場合も、可能であれば元の設定に戻す
    If Not ws Is Nothing Then
        With ws.PageSetup
            .Zoom = originalZoom
            .FitToPagesWide = originalFitToPagesWide
            .FitToPagesTall = originalFitToPagesTall
            .Orientation = originalOrientation
            .PrintArea = originalPrintArea
        End With
    End If
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub

5. `PrintOut`メソッドの`Preview`引数を使用

`PrintOut`メソッドの`Preview:=True`を使用してプレビューを表示します。


Sub PrintOutPreview()
' "Summary"シートを印刷プレビューで表示します。
' PrintOutメソッド

タイトルとURLをコピーしました