みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
引き続き、エクセルVBAでPDF出力や印刷をする際のテクニックについてお伝えしています。
前回の記事はこちら。
印刷範囲の設定とクリアをする方法についてお伝えしました。
これまで印刷またはPDF出力に関しては
- ページ中央配置にする
- 上下左右のマージンをとる
- 縦横1ページに収める
- 倍率を決める
- 印刷範囲を決める
などなど、様々な設定をシートに対するPageSetupオブジェクトで設定してきました。
今回はそれに加えてエクセルVBAで印刷時のヘッダー・フッターの設定の方法についてお伝えしたいと思います。
では、行ってみましょう!
前回までのおさらい
前回終了時点のプログラムはこちらです。
Sub outputPDF()
Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201603請求書_株式会社ホゲホゲ御中.pdf"
With ActiveSheet.PageSetup
.PrintArea = "A:D" '印刷範囲の設定
.Zoom = False '倍率をクリア
.FitToPagesWide = 1 '横方向に1ページに収める
.FitToPagesTall = 1 '縦方向に1ページに収める
.CenterHorizontally = True '水平方向に中央配置
.TopMargin = Application.CentimetersToPoints(1) '上マージンを1cm
.BottomMargin = Application.CentimetersToPoints(1) '下マージンを1cm
End With
ActiveSheet.PrintPreview
'ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力
End Sub
PageSetupオブジェクトの各プロパティの設定についてはコメントでおわかりだと思いますが、結構いろいろ設定できますよね。
それでとある請求書を印刷した結果がこちらです。
だいぶ出来上がっていますが、今回はこれにヘッダー・フッターを追加していきましょう。
エクセルVBAでヘッダー・フッターの設定をする
ちなみにヘッダー・フッターは皆さん使われていますか?
エクセルはセルの行列の幅を自在に変更できるので、ページの見出しやページ番号などをシートに直接書き込んでいる場合も多いかもしれませんが、使いこなすと便利です。
特に以下二つのメリットは作業効率という意味ではかなり大きいです。
- ヘッダー・フッターの領域にはセルの幅に依存せずに配置できる
- テーブルに無駄な行列を入れる必要がなく数式やマクロに強いシートが作れる
ヘッダー・フッターを活用しましょう!
ヘッダー・フッターを設定するPageSetupオブジェクトのプロパティ
ということで、エクセルVBAでヘッダー・フッターを設定する方法です。
これもおなじみのPageSetupオブジェクトのプロパティで以下をそれぞれ使います。
WorkSheetオブジェクト.PageSetup.LeftHeader = 設定内容
WorkSheetオブジェクト.PageSetup.CenterHeader = 設定内容
WorkSheetオブジェクト.PageSetup.RightHeader = 設定内容
WorkSheetオブジェクト.PageSetup.LeftFooter = 設定内容
WorkSheetオブジェクト.PageSetup.CenterFooter = 設定内容
WorkSheetオブジェクト.PageSetup.RightFooter = 設定内容
設定内容は基本的に文字列を指定していくのですが、書式コードまたはVBAコードを利用することでヘッダー・フッター特有の設定をすることができます。
書式コード・VBAコードを使った設定内容の表記の仕方
ヘッダー・フッターの設定で利用可能な書式コード・VBAコードは以下のようなものがあります。
コード | 説明 |
---|---|
&L | 左詰めに配置 |
&C | 中央揃えに配置 |
&R | 右詰めに配置 |
&E | 二重下線付き |
&X | 上付き文字 |
&Y | 下付き文字 |
&B | 太字 |
&I | 斜体 |
&U | 下線付き |
&”フォント名” | フォント指定(※ダブルクォーテーションで囲む) |
&nn | フォントサイズ指定(※nnには2桁の数値を指定) |
&D | 現在の日付 |
&T | 現在の時刻 |
&F | ファイル名 |
&A | シート名 |
&P | ページ番号 |
&P+<数値> | ページ番号に<数値>を加えた値 |
&P-<数値> | ページ番号から<数値>を引いた値 |
&& | アンパサンド (&) |
&N | 総ページ数 |
&Z | ファイルパス |
書式コード・VBAコードを使う際のルールはこちらです。
- 文字列に装飾をするものは、装飾したい文字列の前に上記コードを付加します。
- 装飾を打ち消したいときは、打ち消したい文字列の前に再度同じコードを付加します。
- フォントの指定はフォントの名称をダブルクォーテーションで囲います。
- フォントサイズの指定は二ケタの数字で指定をします。
ヘッダー・フッターを指定する例
では一つ試してみましょう。
出力するシートはこちらです。
前回まで上部に「請求書」とシート内に記載していたのですが、中央ヘッダーで配置をしたいので削除しました。
例としてのプログラムはこちらです。
Sub outputPDF()
Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201603請求書_株式会社ホゲホゲ御中.pdf"
With ActiveSheet.PageSetup
.PrintArea = "A:D" '印刷範囲の設定
.Zoom = False '倍率をクリア
.FitToPagesWide = 1 '横方向に1ページに収める
.FitToPagesTall = 1 '縦方向に1ページに収める
.CenterHorizontally = True '水平方向に中央配置
.TopMargin = Application.CentimetersToPoints(1) '上マージンを1cm
.BottomMargin = Application.CentimetersToPoints(1) '下マージンを1cm
.LeftHeader = "" '左側ヘッダー:なし
.CenterHeader = "&""メイリオ""&28請求書" '中央ヘッダー:なし
.RightHeader = "&D &T" '右側ヘッダー:日付 時刻
.LeftFooter = "" '左側フッター:なし
.CenterFooter = "&""Verdana""&08" & "Confidencial" '中央ヘッダー:Verdanaフォント、サイズ8で「Confidencial」
.RightFooter = "&P/&N" '右側フッター:ページ数/総ページ数
End With
ActiveSheet.PrintPreview
'ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力
End Sub
ヘッダー・フッターの指定をしている箇所は以下の通りです。
- 15行目:左側ヘッダー→なし
- 16行目:中央ヘッダー→フォントをサイズ28のメイリオにして「請求書」と出力
- 17行目:右側ヘッダー→今日の日付に半角スペース空けて今の時間
- 18行目:左側フッター→なし
- 19行目:中央フッター→フォントをサイズ8のVerdanaにして「Confidencial」と出力
- 20行目:右側フッター→現在のページ数/総ページ数
フォントの指定はダブルクォーテーションで囲むのですが、VBAで記述する場合はエスケープのため2つ連続で書く必要があります。
ちなみに、左側のヘッダー・フッターはあえて「””」で指定していますが、シートに前の設定が保存されている可能性があるので、空欄にするときも念のため設定をしておいたほうが良いと思います。
出力結果
実行してプレビューを見ますと、ヘッダーは
フッターは
と出力されます。
まとめ
エクセルVBAでPDF出力または印刷時のヘッダー・フッターの指定をする方法についてお伝えしました。
使える書式コード・VBAコードがたくさんありましたね…覚えなくても良いので、本ページをブックマークして都度参照頂ければと思います。
次回はワークブックの全てのシートをまとめてPDF出力する方法についてお伝えしたいと思います。
どうぞお楽しみに!