ExcelVBA(マクロ)で余白、用紙サイズ、ヘッター、フッターなど印刷のページ設定をする方法/PageSetupオブジェクトの使い方

IT

基本的な印刷についてはPrintOutおよびPrintPreviewの記事で解説しましたが、もう少しつっこんだ印刷設定もまとめて行いたい場合、PageSetupオブジェクトを使い、印刷の「ページ設定」をVBAであらかじめ設定しておくことができます。

Advertisements

ページ設定とは(PageSetupオブジェクト)

pagesetup1
Excel上で操作する場合、ページレイアウトタブ「ページ設定」右下をクリックすると、
pagesetup2
ページ設定ダイアログが開きます。縦横や余白など、印刷にまつわるさまざまな設定の変更が可能です。
PageSetupオブジェクトを操作することで、このダイアログにある内容を色々変更することができます。
' vba
ActiveSheet.PageSetup
PageSetupオブジェクトの取得は、WorkSheetオブジェクト、ChartオブジェクトなどにPageSetupプロパティをくっつけます。

ページタブの設定

tagname14
ページ設定には「ページ」「余白」「ヘッダー/フッター」「シート」のよっつのタブがあります。
ページタブでは拡大率、用紙サイズなど、基本的かつよく使う設定を変更することができます。

拡大/縮小(Zoom)

' vba
ActiveSheet.PageSetup.Zoom = 50
ActiveSheet.PrintPreview
PageSetupプロパティを付けたシートなど=PageSetupオブジェクトにはページ設定を変更する色々なプロパティが用意されています。
そのひとつ、Zoomプロパティを変更することで、印刷の拡大/縮小率を指定することができます。
値は10から400までで指定します。後ろに%を付けてもOKです。
pagesetup3
PrintPreviewでプレビュー表示し、設定を確認すると倍率が変更されていることが確認できます。
pagesetup4
後述する別のプロパティと競合するので、Falseを指定して無効にすることもできます。

縦幅をページ数に合わせて印刷(FitToPagesTall)

' vba
ActiveSheet.PageSetup.Zoom = False
ActiveSheet.PageSetup. _
FitToPagesTall = 1
FitToPagesTallに任意の数値を指定すると、縦幅が指定した数値分のページに収まる形で印刷されます。
ZoomをFalseにしてる理由については後述。
pagesetup5
たとえば何もしないと複数ページにまたがるこれに、
pagesetup6
FitToPagesTall = 1を指定してやれば、縦が1ページに収まる形で自動縮小されます。
pagesetup7
FitToPagesTallを使う時は、Zoomが指定されているとそちらが優先されてしまうので、
pagesetup8
ZoomをFalseにする必要があります。
pagesetup9
FitToPagesTallでは、縦の長さがページをまたぐ場合は縮小しますが、逆に縦の長さより短い場合にぴったり収まるような拡大はされません。縮小のみ行われます。

横幅をページ数に合わせて印刷(FitToPagesWide)

' vba
ActiveSheet.PageSetup.Zoom = False
ActiveSheet.PageSetup. _
FitToPagesWide = 1
同様に、FitToPagesWideを指定すると横幅を収めるページ数を指定できます。
こちらもZoomをFalseにする必要があります。
pagesetup10
実行するとこんな感じになります。

用紙サイズの指定(PaperSize)

' vba
ActiveSheet.PageSetup. _
PaperSize = xlPaperA5
PaperSizeプロパティにXlPaperSize列挙型定数(または数値)で値を指定することで、用紙サイズを指定することができます。
pagesetup11
実行するとちゃんと用紙サイズが変更されてます。
定数はA4ならxlPaperA4のように後ろを変えるだけでOKなんですが、
pagesetup12
たとえばA3が出力できないプリンタに、
pagesetup13
xlPaperA3を指定するとエラーになります。あらかじめ使えるサイズを把握しておく必要があります。
pagesetup14
定数の代わりに数値で指定する場合、A4なら9、A3なら8、A5が11、B4が12、B5が13です。

縦横の指定(Orientation)

' vba
ActiveSheet.PageSetup. _
Orientation = xlPortrait
OrientationプロパティにXlPageOrientation列挙型定数を指定することで、用紙を縦横どちらで印刷するかを指定することができます。
pagesetup15
xlPortraitで縦に印刷、
pagesetup16
xlLandscapeで横に印刷となります。

印刷品質(PrintQuality)

' vba
ActiveSheet.PageSetup. _
PrintQuality = -3
PrintQualityに任意の値を指定することで、印刷品質を選択することができます。
これもプリンタによって色々ですが、たとえば-3を指定すると、
tagname9
使用するプリンタの印刷品質一覧のうち下から3番目の印刷品質が選択されます。
-付けないとエラーになります。なんで下からなのかは知りません。
tagname10
-4だと下から4番目です。
tagname12
一覧の総数より大きな数を指定したり、”標準印刷(高品質)”のように名前で指定するとエラーになります。
tagname13
dpiで指定できるプリンタの場合は、PrintQuality = 600のように半角数字で指定することができます。
' vba
ActiveSheet.PageSetup. _
PrintQuality = Array(300, 150)
水平/垂直ごとに品質を指定できるプリンターの場合、配列で個別に指定することもできます。
この場合水平が300dpi、垂直が150dpiとなります。

先頭ページ番号の変更(FirstPageNumber)

tagname15
通常印刷した用紙にページ番号(ノンブル)をふると1からスタートしますが、先頭ページ番号を変更することにより、
tagname16
印刷されるページ番号を変更することが可能です。今はヘッダーに出してますが、フッターに表示することも可能です。
※ページ番号を印刷に表示するには、別途ヘッダー/フッターでの操作が必要となります。
' vba
ActiveSheet.PageSetup. _
FirstPageNumber = xlAutomatic
デフォルトの先頭ページ番号は「自動」です。
自動にしたい場合は、FirstPageNumberxlAutomaticを指定します。
tagname17
数値の指定は半角数字で行います。
0にした場合、2枚目が1ページになります。
Advertisements

余白タブの設定

上余白の設定(TopMargin)

pagesetup17
PageSetupの各種プロパティを指定することで、余白タブの余白を変更することができます。
ここで表示されている余白の数値はcmです。
' vba
ActiveSheet.PageSetup. _
TopMargin = 2
上側の余白を変更または取得するには、TopMarginプロパティを指定しますが、
pagesetup18
TopMarginで半角数字を指定すると、ポイントという単位で指定していることになります。
詳しい説明は割愛しますが、1ポイント=0.035cmとなり、0.1cmとして設定されています。
' vba
ActiveSheet.PageSetup. _
TopMargin = Application.CentimetersToPoints(2)
cmで値を指定したいので、値をApplication.CentimetersToPoints(2)のように変更します。
CentimetersToPointsはcmをポイント単位に変換するメソッドで、こうすることによって値に「2cm相当のポイント」を指定していることになります。
pagesetup19
上のコードを実行すると、指定した値が入力されていることが確認できます。

下余白の設定(BottomMargin)

' vba
ActiveSheet.PageSetup. _
BottomMargin = Application.CentimetersToPoints(2)
TopMarginと同じ要領で、下の余白も設定ないしは取得することができます。
使用するプロパティはBottomMarginです。
pagesetup20
実行結果です。

左右の余白の設定(LeftMargin、RightMargin)

' vba
ActiveSheet.PageSetup. _
LeftMargin = Application.CentimetersToPoints(2)
ActiveSheet.PageSetup. _
RightMargin = Application.CentimetersToPoints(2)
LeftMarginで左、RightMarginで右の余白を設定できます。
あとはTop、Bottomと同じです。

ヘッダー・フッターの余白の設定(HeaderMargin、FooterMargin)

' vba
ActiveSheet.PageSetup. _
HeaderMargin = Application.CentimetersToPoints(2)
ActiveSheet.PageSetup. _
FooterMargin = Application.CentimetersToPoints(2)
紙の端からHeaderMarginでヘッダー、FooterMarginでフッターまでの余白を設定できます。あとは他のMargin同様です。
pagesetup21
実行結果です。

水平方向中央に印刷(CenterHorizontally)

' vba
ActiveSheet.PageSetup. _
CenterHorizontally = True
印刷内容を水平方向中央に配置したい場合は、CenterHorizontallyプロパティにTrueを指定します。
Falseで無効にできます。
pagesetup22
実行すると、印刷内容が中央に寄っていることが確認できます。

垂直方向中央に印刷(CenterVertically)

' vba
ActiveSheet.PageSetup. _
CenterVertically = True
垂直方向中央に配置したい場合は、CenterVerticallyプロパティにTrueを指定します。
Falseで無効にできます。
pagesetup23
実行結果です。
pagesetup24
CenterHorizontallyとCenterVerticallyがどちらもTrueの場合、印刷内容は用紙中央に配置されます。

ヘッダー/フッタータブの設定

左のヘッダー(LeftHeader)

pagesetup25
続いてヘッダー/フッタータブの設定となります。
' vba
ActiveSheet.PageSetup. _
LeftHeader = "&D"
ヘッダー/フッターにはよく使うものが色々コードで用意されていて、たとえばLeftHeaderプロパティの値に“&D”を指定してやると……。
pagesetup26
左上のヘッダー今日の日付が表示されます。””で囲う必要がある点に注意してください。
pagesetup27
“&D &T”とすると、今日の日付 今の時間が表示されます。
pagesetup28
直接文字を入力することもできます。&の後ろに所定の文字を付けた場合だけ変換されます。
あまり融通はきかず、たとえば&D+1とかを指定しても、明日の日付ではなく(今日の日付)+1という形で表示されます。

右のヘッダー(RightHeader)

' vba
ActiveSheet.PageSetup. _
RightHeader = "&P/&N"
RightHeaderには、“&P/&N”を指定してみます。
&P現在のページ数&N全体のページ数を意味します。
pagesetup31
実行結果です。

中央のヘッダー(CenterHeader)

' vba
ActiveSheet.PageSetup. _
CenterHeader = "&F"
次にCenterHeaderプロパティで中央上部のヘッダーを設定してみます。
“&F”ファイル名を意味します。他にも“&A”シート名“&Z”ファイルパスを表示させることもできます。
pagesetup30
実行結果です。

左、中央、右フッター(LeftFooter、CenterFooter、RightFooter)

' vba
ActiveSheet.PageSetup. _
LeftFooter = "test"
ActiveSheet.PageSetup. _
CenterFooter = "test"
ActiveSheet.PageSetup. _
RightFooter = "test"
以下同様。LeftFooterで左、CenterFooterで中央、RightFooterで右のフッターの表示設定が行えます。

ヘッダー、フッターに画像を表示(Graphicオブジェクト.Filename)

pagesetup32
ヘッダー、フッターに画像を挿入してみます。
今回はデスクトップに置いた画像を使用します。
pagesetup33
画像のパスをプロパティなどから拾ってきます。
' vba
ActiveSheet.PageSetup. _
LeftFooterPicture.Filename = _
"C:\Users\User\Desktop\sg.jpg"
ActiveSheet.PageSetup. _
LeftFooter = "&G"
左のフッターの場合、まずLeftFooterPicture.Filenameプロパティに画像のパス名を指定し、その後でLeftFooterプロパティ“&G”を指定します。&G=画像です。
右ヘッダーならRightHeaderPicture.Filename→RightHeaderです。
たとえばLeftHeaderPicture.Filenameに画像のパスを指定して、LeftFooterに”&G”を指定しても画像は表示されません。対になっているか注意してください。

※厳密には、LeftFooterPictureを付けた時点でGraphicオブジェクトなるものを取得しています。FilenameはGraphicオブジェクトのプロパティです。

pagesetup34
うまくいくと、こんな感じでヘッダー/フッターに画像が挿入されます。

画像の高さ、幅を変更(Height、Width)

' vba
With ActiveSheet.PageSetup.LeftFooterPicture
.Filename = "C:\Users\User\Desktop\sg.jpg"
.Height = 1
.Width = 150
End With
ActiveSheet.PageSetup. _
LeftFooter = "&G"
取得した画像(Graphicオブジェクト)に対して、Heightで高さ、Widthで幅を指定することができます。
縮尺は固定で、幅か高さの大きいほうの数字に合わせたサイズに拡大します(たとえば高さが1で幅が150の場合、高さも幅に合わせて大きくなります)。
pagesetup36
つまりこうなります。
数字の単位はポイントなので、cmでしたい場合はApplication.CentimetersToPoints(数字)のように指定します。

ヘッダー/フッターに「&」を入力する方法

' vba
ActiveSheet.PageSetup. _
CenterFooter = "&&"
以下同様。LeftFooterで左、CenterFooterで中央、コードの前には&を付けるので一見「&」を入力することはできなさそうですが、“&&”とすることで「&」を入力することも可能です。
pagesetup35
実行結果です。
たとえば現在のページ&全体のページ数であれば、“&P&&&N”のように指定します。

ヘッダー/フッターのフォントの変更

' vba
ActiveSheet.PageSetup. _
RightFooter = "&""MS 明朝""てすとtest"
フォントを変更する場合は、最初に”&”その次に”フォント名”を入力、その後に入力内容を記述します。
' vba
' これはダメ
ActiveSheet.PageSetup. _
RightFooter = "てすとtest""&""MS 明朝"
順不同ではありません。たとえば内容、&、フォント名のようにしても、フォントは変わりません。
' vba
ActiveSheet.PageSetup. _
RightFooter = "&""HGPゴシックE""てすとtest"
また、フォント名は正確に記述する必要があります。たとえばMS 明朝のアルファベットは全角でないと反映されません(間のスペースは半角/全角どちらでもいいようです)。ゴシックEであれば、カタカナ部分は半角で書く必要があります。
pagesetup37
比較用にCenterFooterにも同じ文章を入力しました。
うまくいくとこんな感じで、フォントが変更されます。

ヘッダー/フッターの文字サイズの変更

' vba
ActiveSheet.PageSetup. _
RightFooter = "&20てすとtest"
文字サイズは、サイズを変更したい内容の前に&数字を入力して指定します。
単位はポイントです。試した感じCentimetersToPointsは使えないようなので、もし意地でもcmで考えたい場合、1ポイント=約0.0353cm(1/72インチ)なので、1cm=約29ポイントと考えて自力で調節します。
pagesetup38
実行結果です。
pagesetup39
フォントと併用も可能です。
pagesetup40
数字を入力したい場合は、“&20 100”のようにして間を半角スペースで空ければ可能です。

ヘッダー/フッターの文字色変更

' vba
ActiveSheet.PageSetup. _
RightFooter = "&K34ebc6てすとtest"
文字色もサイズ同様、入力内容の前にくっつけます。
&Kの後に16進数で指定します。
pagesetup41
実行結果です。
pagesetup42
組み合わせも可能です。たとえば文字サイズ20ポイントの色つけたページ番号であれば、“&20&K34ebc6&P”となります。

ヘッダー/フッターを右詰め/左詰め/中央に変更

' vba
ActiveSheet.PageSetup. _
RightFooter = "&C右フッター"
RightFooterを中央フッターに表示させたり、Centerheaderを左ヘッダーに表示させたりすることができます。&Lで左詰め、&Cで中央、&Rで右詰めとなります。
pagesetup43
これがRightFooter = “右フッター”の状態で、
pagesetup44
これがRightFooter = “&C右フッター”の状態です。RightFooterに指定した内容が中央フッターに表示され、元々あるCenterFooterといっしょくたに表示されています。
pagesetup45
設定で確認すると「中央フッターに設定した」状態になってます。
なお、上画像から再度CenterFooter = “てすとtest”、RightFooter = “右フッター”を指定しても中央に右フッターが残り続けます。挙動的に怪しげなので、あまり使うことを推奨しません。

斜体/太字/取り消し線/上付き文字/下付き文字

' vba
ActiveSheet.PageSetup. _
LeftFooter = "&Iてすとtest"
ActiveSheet.PageSetup. _
CenterFooter = "&Sてすとtest"
ActiveSheet.PageSetup. _
RightFooter = "&Bてすとtest"
ActiveSheet.PrintPreview
その他まとめて。&I斜体&B太字&S取り消し線&U下線&E二重下線&X上付き文字&Y下付き文字が指定可能です。
pagesetup46
左から斜体、取り消し線、太字、
pagesetup47
指定なし、上付き文字、下付き文字です。

ヘッダー/フッターで使用可能なコードまとめ

VBAコード 内容
&D 今日の日付
&T 現在時刻
&P ページ番号
&N 総ページ数
&F ファイル名
&A シート名(見出し)
&Z ファイルパス
&G Graphicオブジェクトに設定した画像
&& &
文字コード 内容
“&””フォント名” フォントの変更
&数字 フォントサイズ
&Kカラーコード(16進数) 色変更
&L 左詰め
&C 中央詰め
&R 右詰め
&I 斜体
&B 太字
&S 取り消し線
&U 下線
&E 二重下線
&X 上付き文字
&Y 下付き文字
Advertisements

最初のページだけ別のヘッダー/フッター(DifferentFirstPageHeaderFooter)

' vba
ActiveSheet.PageSetup. _
DifferentFirstPageHeaderFooter = True
最初のページだけちがうヘッダー/フッターを指定したい場合は、まずPageSetupオブジェクトのDifferentFirstPageHeaderFooterプロパティをTrueにします。
' vba
ActiveSheet.PageSetup. _
DifferentFirstPageHeaderFooter = True
ActiveSheet.PageSetup. _
FirstPage.CenterFooter.Text = "最初のページ"
最初のページに指定したいヘッダー/フッターにはPageSetupのあとにFirstPageを付け、その後に挿入箇所の指定、さらにTextを付けてあげます。
' vba
With ActiveSheet.PageSetup
    .DifferentFirstPageHeaderFooter = True
    .FirstPage.CenterFooter.Text = "最初のページ"
    .CenterFooter = "2ページ目以降"
    .RightFooter = "てすとtest"
End With
2ページ目以降も指定してみます。
1ページ目は中央フッターのみ、2ページ目は中央と右のフッターを指定。これで実行すると、
pagesetup48
1ページ目では指定したフッターのみ表示されます。
特に指定してない右フッターも表示されません。
pagesetup49
2ページ目以降では、通常通り指定したヘッダー/フッターが表示されます。

コメント