みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでPDF出力や印刷をする際の様々なテクニックをお伝えしています。
前回はこちらの記事。
PageSetupオブジェクトの設定で印刷設定をページ中央配置にする方法と上下左右のマージンを設定する方法についてお伝えしました。
さて、以下記事でお伝えしたプログラムですが、縦横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ずつ
という設定を行っています。
今回のお題:社内向けのコメントを印刷範囲から外したい
今回のお題ですが、例えばこちらのようなシートがあるとします。
図の赤枠で囲ったエリアのみが本来印刷したいエリアで、「ここに品目、単価、数量を入力してください」という吹き出しによるコメントは印刷範囲として含みたくありません。
ですが、普通に印刷プレビューを見てみますと
とこのように吹き出しまで全部印刷範囲に含まれてしまいます。
これ間違えて取引先に送ったら、こっぱずかしいですね~。
さて、エクセルで普通に印刷範囲の設定をする方法としては
- 印刷範囲を選択してアクティブにする
- リボンから「ページレイアウト」→「印刷範囲」→「印刷範囲の設定」
としますね。
これを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オブジェクトではなく範囲を表す文字列で設定をするということをお忘れなく。
次回は印刷のヘッダーやフッターを指定する方法についてお伝えしたいと思います。
どうぞお楽しみに!