【VBA入門】印刷範囲の設定方法・セル選択で直接指定する方法とは

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

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

Excelのデータを印刷するとき、印刷範囲を指定して印刷するケースはよくありますよね。

そこで今回は、

・VBAで印刷範囲を指定する2つの方法

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

・印刷範囲を固定値で指定するサンプルコード

・印刷範囲をセル選択で直接指定するサンプルコード

・合わせて覚えると便利なPrintOutメソッドの使い方

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

目次

印刷範囲の設定方法

VBAで印刷方法を設定する方法は、大きく分けて2つあります。

  • 印刷時に範囲を指定して印刷
  • 印刷範囲を事前に設定してから印刷

それぞれ使い方を解説しますね。

印刷時に範囲を指定して印刷

まず、印刷時に範囲を指定して印刷する方法について解説します。

VBAで印刷する場合はPrintOutメソッド、印刷プレビューをする場合はPrintPreviewメソッドを使うのですが、メソッドを実行するオブジェクトの指定で印刷範囲を指定することができます。

印刷範囲を指定する方法:

Range(印刷範囲).PrintOut       '印刷
Range(印刷範囲).PrintPreview   '印刷プレビュー

印刷範囲は「A1:B5」のようにセル範囲を指定します。

このように、範囲を指定して印刷・印刷プレビューをすることができます。

印刷範囲を事前に設定してから印刷

次に、事前に印刷範囲を設定する方法について解説します。

印刷範囲は、次のように設定することができます。

WorkSheet.PageSetup.PrintArea = 印刷範囲

こちらも印刷範囲には、「A1:B5」のようにセル範囲を指定します。

事前に設定しておけば、次のように印刷時に自動で印刷範囲に指定した個所のみ印刷することができます。

With ActiveSheet
    .PageSetup.PrintArea = "A1:A5"  '印刷範囲を設定
    .PrintPreview                   '印刷プレビュー
    .PageSetup.PrintArea = ""       '印刷範囲をクリア
End With

この例では、印刷範囲を「A1:A5」に変更してから、印刷プレビューをしています。

また、印刷範囲が設定後残ってしまうと次の印刷時に影響が出るので、最後にクリアする処理も入れています。

このように、簡単に印刷範囲を設定して印刷することができます。

設定した印刷範囲を取得する方法

VBAから印刷範囲を設定する場合は先ほど説明した2つの方法で良いのですが、事前に設定している印刷範囲で印刷したいケースもありますよね。

ただ、目視だと印刷範囲がわかりづらいためVBAから印刷範囲を取得する方法を知っておくと便利です!

印刷範囲の取得方法は次のとおりです。

印刷範囲の取得方法:

WorkSheet.PageSetup.PrintArea

印刷範囲を設定するときと同じメソッドなので、覚えやすいですね。

サンプルコード

次に、サンプルコードをもとに、具体的な使い方を解説します。

印刷範囲を固定値で設定

まずは、印刷範囲を固定値で設定する方法です。

セルのデータ:

サンプルコード:

Sub Test1()

    Dim strCellArea As String
    strCellArea = "A1:C6"
      
    '選択したセル範囲で印刷プレビュー実施
    With ActiveSheet
        .PageSetup.PrintArea = strCellArea '印刷範囲を設定
        .PrintPreview
        .PageSetup.PrintArea = ""          '印刷範囲をクリア
    End With

End Sub

実行結果:

A1~C6までのデータのみ印刷プレビューに表示されていますよね。

このように、簡単にセル範囲を指定して印刷することができます。

事前に印刷範囲が決まっている場合は、この方法がおすすめです!

InputBoxから選択したセル範囲を印刷

次は、印刷するときにセル範囲を指定する方法です。

サンプルコード:

Sub Test2()
On Error Resume Next

    Dim strPrintMessage As String
    strPrintMessage = "印刷範囲をマウスで選択してください"

    'InputBoxでセル入力後、OKでセル範囲を格納
    Dim inputCell As Range
    Set inputCell = Application.InputBox(Prompt:=strPrintMessage, Type:=8)

    'InputBoxでキャンセルが押されたときは、処理を抜ける
    If inputCell Is Nothing Then
      Exit Sub
    End If

    '選択したセル範囲で印刷プレビュー実施
    With ActiveSheet
        .PageSetup.PrintArea = inputCell.Address '印刷範囲を設定
        .PrintPreview
        .PageSetup.PrintArea = ""                '印刷範囲をクリア
    End With

End Sub

実行直後のセル選択ウィンドウ:

OKボタンクリック後の印刷プレビュー画面:

セル選択範囲を入力するためにInputBoxで入力画面を用意し、選択した値を使って印刷プレビューをするサンプルです。

キャンセルボタンをクリックされることを考慮し、処理の冒頭で「On Error Resume Next」 を書くことでInputBoxに値が入っていない場合もエラーにならないようにしています。

また、値が入っていないと印刷プレビューはできないため、「If inputCell Is Nothing Then」で変数inputCellに値が入っていない場合(キャンセルをクリックした場合)に処理が終了するように書いています。

InputBoxの詳しい使い方、「On Error Resume Next」を含むエラー処理の詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!

合わせて覚えると便利なPrintOutメソッドの使い方

今回は印刷範囲の設定方法に特化して解説してきましたが、合わせて印刷方法について覚えておくと便利です。

PrintOutメソッド(印刷)、PrintPreviewメソッド(印刷プレビュー)はページ数を指定したり、ページの印刷範囲を指定することもできます。

以下で詳しく解説しているので、気になる方は見てみてくださいね!

まとめ

今回は、VBAで印刷範囲を設定・クリアする方法について解説しました!

データやグラフを扱うことの多いExcelだからこそ、印刷するケースは多いです。

今回解説した方法はどれも簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

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

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

目次