エクセルVBAで印刷時のページ中央配置と余白を設定する

margin

photo credit: Magic Margin via photopin (license)

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

前回、エクセルVBAでPDF出力する方法と出力の際に1ページに収めて出力する方法についてお伝えしました。

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

ただちょっと配置が左にちょっとずれていたんですよね…

エクセルVBAでは前回も登場したPageSetupオブジェクトを使うことでPDF出力や印刷の際の様々な設定を行うことができます。

今回は、エクセルVBAで印刷設定をページ中央配置にする方法、また上下左右のマージンを設定する方法についてお伝えしたいと思います。

また、プレビューの表示の仕方にも触れますよ。

どうぞよろしくお願いいたします!

スポンサーリンク

前回のおさらい:シートを1ページに収めてPDF出力をする

前回のおさらいですが、シートを1ページに収めてPDF出力をするプログラムはこちらです。

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

With ActiveSheet.PageSetup

    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1

End With

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
End Sub

アクティブシートに対して、5行目~11行目で1ページ内に収める設定をしつつ、13行目で指定したファイル名でPDF出力をしています。

しかしお題のシートに対してプログラムを実行をすると

エクセルVBAで1ページに収めて出力したPDF

このようにちょっと左に寄った状態で出力されてしまいます。

今回はこれを解決していきたいと思います。

印刷プレビューを表示する

まずその前に、実行のたびに出力されたPDFを開いて結果を確認するのが、ほんの少し面倒なので、印刷プレビューを使いたいと思います。

エクセルVBAで特定のシートの印刷プレビューを表示したいとき

WorkSheetオブジェクト.PrintPreview

を使います。

お題のプログラムの13行目について

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

として実行をしますと

エクセルVBAで印刷プレビューを表示

このようにプレビュー画面が表示されます。

これでチェックが楽ちんになりますね。

印刷出力設定を中央配置にする

エクセルVBAで印刷の出力設定をする場合はシートのPageSetupオブジェクトを使います。

その中でも、印刷をページの水平方向または垂直方向で中央に設定する場合はそれぞれ

WorkSheetオブジェクト.PageSetup.CenterHorizontally = True または False
WorkSheetオブジェクト.PageSetup.CenterVertically = True または False

というプロパティを使います。

Trueにすればそれぞれの方向についての中央配置となります。

これはエクセルの「印刷」→「ページ設定」→「余白」タブからページ中央のチェックボックスにチェックを入れた状態と同じです。

エクセルで印刷のページ設定をする

例えば先ほどのプログラムのPageSetupの設定ですが、Withのブロック内に

.CenterHorizontally = True

を追加しますと

エクセルVBAで印刷時のページ中央配置
このようにバッチリ水平方向の中央配置となります。

印刷の上下左右とヘッダー・フッターの余白を設定する

先ほどのプレビューなのですが、上下のマージンをもう少し小さくしてもいいかも知れませんね。

その前にエクセルの余白について簡単に説明をしておきたいと思います。

エクセルの余白は上下左右以外にヘッダーとフッターがあり、全部で6箇所設定が可能です。

ヘッダー、フッターはどこを指しているかというと、以下の図のようにヘッター領域(またはフッター領域)までの距離を指定します。

エクセルのヘッダー余白と上余白

上、下はそれぞれ印刷用紙の上端、下端からシート内の印刷範囲で設定されているエリアまでの距離となります。

今回の場合、上下左右を今の半分くらいにしても良いかなという感じですね。

さて、エクセルVBAで印刷出力時の上下左右そしてヘッダーとフッターのマージン設定をする場合はそれぞれ

WorkSheetオブジェクト.PageSetup.TopMargin = 上余白(pt)
WorkSheetオブジェクト.PageSetup.BottomMargin = 下余白(pt)
WorkSheetオブジェクト.PageSetup.LeftMargin = 左余白(pt)
WorkSheetオブジェクト.PageSetup.RightMargin = 右余白(pt)
WorkSheetオブジェクト.PageSetup.HeaderMargin = ヘッダー余白(pt)
WorkSheetオブジェクト.PageSetup.FooterMargin = フッター余白(pt)

と設定します。

では試しに上下のマージンをそれぞれ1に設定してみましょう。

PageSetupの設定のWithのブロック内に

.TopMargin = 1
.BottomMargin = 1

を追加して実行してみましょう。

エクセルVBAで上下余白を1ポイントに設定

おや…?思ったよりも窮屈になってしまいましたね。

長さの単位をセンチメートルからポイントに変換

実は設定の単位が良くありません。

PageSetupオブジェクトへのマージン設定の単位はポイント(pt)ですが、エクセルの「印刷」→「ページ設定」で開くウィンドウで設定する単位はセンチメートル(cm)なのです。

こういう場合は、センチメートルからポイントに単位を変更するCentimetersToPointsメソッドを使います。

Application.CentimetersToPoints(センチメートル)

上下の余白を

.TopMargin = Application.CentimetersToPoints(1)
.BottomMargin = Application.CentimetersToPoints(1)

に変更をして実行してみます。

エクセルVBAで上下マージンを1cmに設定

ちょうど良いマージンになりました。

まとめ

エクセルVBAで印刷設定をページ中央配置にする方法上下左右のマージンを設定する方法についてお伝えしました。

全部PageSetupオブジェクトで設定できるのでわかりやすいですね。ちょっとプロパティの数は多いですが…

また、PrintPreviewメソッドによるプレビューの表示の仕方についてもお伝えしました。

本番のプログラムでは使わないと思いますが、デバッグなど開発途中では便利そうですよね。

次回は、印刷範囲の設定をする方法とクリアする方法についてお伝えできればと思います。

429 Too Many Requests

どうぞお楽しみに!

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

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