エクセルVBAで印刷範囲の設定をする方法とクリアをする方法


area

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでPDF出力や印刷をする際の様々なテクニックをお伝えしています。

前回はこちらの記事。

エクセルVBAで印刷時のページ中央配置と余白を設定する
エクセルVBAでPageSetupオブジェクトを使って印刷設定をページ中央配置にする方法、また上下左右のマージンを設定する方法についてお伝えします。また印刷プレビューの表示方法も紹介します。

PageSetupオブジェクトの設定で印刷設定をページ中央配置にする方法と上下左右のマージンを設定する方法についてお伝えしました。

さて、以下記事でお伝えしたプログラムですが、縦横1ページに収めるという設定をしています。

初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム
エクセルVBAではPDF形式での出力もできます。今回は、初心者向けエクセルVBAでPDFを出力する最も簡単なプログラムと、PDF出力の際にシート1ページに収めて出力する方法についてお伝えしていきます。

この場合、本来印刷したくない領域も印刷範囲に含まれてしまい困ることがあります。

今回は、その点を解決すべく、エクセルVBAで印刷範囲の設定する方法についてお伝えしたいと思います。

また、印刷設定のクリアについてもお伝えします。

では、よろしくお願いいたします!

スポンサーリンク

前回のおさらい:請求書の印刷プレビュー

まず前回のおさらいをしておきましょう。

プログラムはこちらです。

Sub outputPDF()
Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201603請求書_株式会社ホゲホゲ御中.pdf"

With ActiveSheet.PageSetup

    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    .CenterHorizontally = True
    .TopMargin = Application.CentimetersToPoints(1)
    .BottomMargin = Application.CentimetersToPoints(1)

End With

ActiveSheet.PrintPreview
'ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力

End Sub

「201603請求書_株式会社ホゲホゲ御中.pdf」という書類のPDFを出力するプログラムなのですが、検証中ということで実際のPDF出力はコメントアウトしていまして、代わりに16行の命令でプレビュー表示としています。

印刷の設定に関しては5行~14行のPageSetupオブジェクトの各プロパティで

  • シートを縦横1ページに収める
  • 水平方向にページを中央配置
  • 上下のマージンを1cmずつ

という設定を行っています。

今回のお題:社内向けのコメントを印刷範囲から外したい

今回のお題ですが、例えばこちらのようなシートがあるとします。

エクセルで印刷をしたい範囲

図の赤枠で囲ったエリアのみが本来印刷したいエリアで、「ここに品目、単価、数量を入力してください」という吹き出しによるコメントは印刷範囲として含みたくありません。

ですが、普通に印刷プレビューを見てみますと

エクセルでプレビュー

とこのように吹き出しまで全部印刷範囲に含まれてしまいます。

これ間違えて取引先に送ったら、こっぱずかしいですね~。

さて、エクセルで普通に印刷範囲の設定をする方法としては

  1. 印刷範囲を選択してアクティブにする
  2. リボンから「ページレイアウト」→「印刷範囲」→「印刷範囲の設定」

としますね。

エクセルで印刷範囲の設定をする

これをVBAでやりたい場合はどうしたらよいでしょうか?

印刷範囲の設定とクリア

エクセルVBAで印刷範囲を設定する場合はPageSetupオブジェクトのPrintAreaプロパティを使います。

書き方は

WorkSheetオブジェクト.PageSetup.PrintArea=範囲を表す文字列

です。

ここで、「範囲」ではなくて「範囲を表す文字列」であることに注意してください。

Rangeオブジェクトではなくて文字列で指定するということです。

例えば今回の場合はA1からD60までの範囲ですから、PageSetupのWithのブロック内に

.PrintArea = "A1:D60"

を追加してあげればOKです。

それで実行をしますと

エクセルで印刷範囲を設定してプレビュー

このように必要なところのみが印刷範囲となっていることがわかります。

Addressプロパティで範囲の文字列を求める

Rangeオブジェクトから範囲を表す文字列を求める方法がありますので、触れておきたいと思います。

Addressプロパティを使いまして

Rangeオブジェクト.Address

とすることで、範囲を表す文字列を取得できます。

例えば「Range(“A1:D60”).Address」であれば、「$A$1:$D$60」という文字列が得られます。

今回の例ではわざわざ使う必要はないのですが、あえてAddressプロパティを使うと

.PrintArea = ActiveSheet.Range("A1:D60").Address

となります。

範囲の文字列は列全体でもOK

PrintAreaで指定する範囲の文字列は列のみの指定でも動作します。

今回の例ではD列までを印刷範囲としたいので

.PrintArea = "A:D"

としてもOKです。

印刷範囲のクリアをする

印刷範囲のクリアをする場合は

WorkSheetオブジェクト.PageSetup.PrintArea=”” または false

と設定をします。

人為的に印刷範囲の設定が行われる可能性があるシートに対して、VBAで印刷やPDF出力をする際などには念のためで入れておくのが良いかも知れません。

まとめ

エクセルVBAで印刷範囲の設定をする方法とクリアをする方法についてお伝えしました。

引き続きPageSetupオブジェクトが大活躍でしたね。

設定する場合はRangeオブジェクトではなく範囲を表す文字列で設定をするということをお忘れなく。

次回は印刷のヘッダーやフッターを指定する方法についてお伝えしたいと思います。

エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
エクセルVBAでPDF出力や印刷をする際のテクニックについてお伝えしています。 今回はエクセルVBAで印刷時のヘッダー、フッターの設定の方法と設定できる書式コード・VBAコードの一覧についてです。

どうぞお楽しみに!

連載目次:エクセルVBAでPDF出力と色々な印刷設定

エクセルで見積書や請求書などの帳票を作成する場合、印刷やPDF出力したいときがありますよね。このシリーズでは印刷やPDF出力をする方法、またその際の様々な設定やテクニックについてお伝えします。
  1. 初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム
  2. エクセルVBAで印刷時のページ中央配置と余白を設定する
  3. エクセルVBAで印刷範囲の設定をする方法とクリアをする方法
  4. エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
  5. エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法
  6. エクセルVBAで一部のワークシートのみ選択してPDFで出力する方法

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