ページ設定は
[ファイル]-[印刷]-[ページ設定]をクリックする、もしくは
[ページレイアウト]タブのページ設定区分、右下の矢印をクリックすると
現れるウィンドウで設定できます。
(以下このウィンドウを「ページ設定」とする)
ページ設定の項目はたくさんありますが
まずは、アクティブシートを印刷するときに
よく設定する項目についてのみ
自動設定をするマクロを作成します。
よく設定する項目として下記の5点を設定していきます。
(1)印刷範囲の設定
(2)余白
(3)印刷の向き
(4)用紙サイズ
(5)拡大縮小印刷
(1)印刷範囲の設定
手動で印刷範囲を設定する場合は、
印刷したい範囲(例としてA1:I100の範囲)を選択した状態で
[ページレイアウト]タブ-[印刷範囲]-[印刷範囲の設定]ボタンをクリックします。
VBAでは
次のようにPrintAreaプロパティを指定します。
ActiveSheet.PageSetup.PrintArea = "A1:I100"
(2)余白
手動では、ページ設定の[余白]タブで設定します。
VBAでは次のようにします。
カッコ内の0.6などの数値をcm単位で指定します。
下のコードでは左の余白0.6cm、右0.6cm
上1.9cm、下1.9cm
ヘッダー0.8cm、フッター0.8cmに指定します。
With ActiveSheet.PageSetup
.LeftMargin = Application.CentimetersToPoints(0.6) '左
.RightMargin = Application.CentimetersToPoints(0.6) '右
.TopMargin = Application.CentimetersToPoints(1.9) '上
.BottomMargin = Application.CentimetersToPoints(1.9) '下
.HeaderMargin = Application.CentimetersToPoints(0.8) 'ヘッダー
.FooterMargin = Application.CentimetersToPoints(0.8) 'フッター
End With
(3)印刷の向き
手動では、
ページ設定の[ページ]タブ-[印刷の向き]で設定します。
VBAでは次のコードの1行目で縦向き、2行目で横向きを指定します。
どちらか片方のみ使用してください。
ActiveSheet.PageSetup.Orientation = xlPortrait '縦
ActiveSheet.PageSetup.Orientation = xlLandscape '横
(4)用紙サイズ
手動では
ページ設定の[ページ]タブ-[用紙サイズ]で設定します。
VBAでは
下記のコードの1行目でA4用紙サイズを指定します。
2行目がA3サイズ、3行目がB5サイズを指定します。
目的の用紙サイズの1行のみ使用してください。
ActiveSheet.PageSetup.PaperSize = xlPaperA4 'A4
ActiveSheet.PageSetup.PaperSize = xlPaperA3 'A3
ActiveSheet.PageSetup.PaperSize = xlPaperA5 'B5
その他のサイズは下記のMicrosoftサイト内を参照してください。
xlpapersize 列挙 (Excel)
(5)拡大縮小印刷
手動では
ページ設定の[ページ]タブ-[拡大縮小印刷]で設定します。
VBAでの方法は、次のよく使う設定3パターンを見ていきます。
・シートを1ページに印刷
・すべての列を1ページに印刷
・拡大縮小率を設定
下記のコードのようにします。
'シートを1ページに印刷
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
'すべての列を1ページに印刷
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
End With
'拡大縮小率を設定
ActiveSheet.PageSetup.Zoom = 80
以上で設定の各要素を見てきましたので、
これらをまとめて一括でページ設定をできるようにします。
(1)~(5)の必要な部分をコピペして
1つのマクロにまとめます。
ページ設定のコードの前に
次のコード記述してプリンタとの通信を停止します。
Application.PrintCommunication = False
設定後PrintCommunicationプロパティをTrueにして
プリンタの設定にも変更を反映させます。
これをしないと設定項目を変更するごとに
プリンタも設定することになるので
コードの実行時間が長くなります。
例としてページ設定をまとめたコードは次のようになります。
ページ設定の自動化するコード1:
|
Sub macro20200328a() '印刷設定 ' 印刷範囲 A1:I100 ' 余白 左右0.6cm 上下1.9cm ヘッダーフッター0.8cm ' 用紙向き 縦 ' 用紙サイズ A4 ' 拡大縮小 シートを1ページに印刷
Application.PrintCommunication = False '印刷範囲 ActiveSheet.PageSetup.PrintArea = "A1:I100" '余白 With ActiveSheet.PageSetup .LeftMargin = Application.CentimetersToPoints(0.6) .RightMargin = Application.CentimetersToPoints(0.6) .TopMargin = Application.CentimetersToPoints(1.9) .BottomMargin = Application.CentimetersToPoints(1.9) .HeaderMargin = Application.CentimetersToPoints(0.8) .FooterMargin = Application.CentimetersToPoints(0.8) End With '用紙の向き ActiveSheet.PageSetup.Orientation = xlPortrait '縦 '用紙サイズ ActiveSheet.PageSetup.PaperSize = xlPaperA4 'A4
'拡大縮小 'シートを1ページに印刷 With ActiveSheet.PageSetup .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Application.PrintCommunication = True End Sub
|
上記マクロをよく見てみると
ActiveSheet.PageSetupの部分が共通していますので、
この共通部分はWithステートメントでまとめることができます。
まとめると次のコードのようになります。
ページ設定の自動化するコード2:
|
'印刷設定 ' 印刷範囲 A1:I100 ' 余白 左右0.6cm 上下1.9cm ヘッダーフッター0.8cm ' 用紙向き 縦 ' 用紙サイズ A4 ' 拡大縮小 シートを1ページに印刷
Application.PrintCommunication = False With ActiveSheet.PageSetup '印刷範囲 .PrintArea = "A1:I100" '余白 .LeftMargin = Application.CentimetersToPoints(0.6) .RightMargin = Application.CentimetersToPoints(0.6) .TopMargin = Application.CentimetersToPoints(1.9) .BottomMargin = Application.CentimetersToPoints(1.9) .HeaderMargin = Application.CentimetersToPoints(0.8) .FooterMargin = Application.CentimetersToPoints(0.8) '用紙の向き .Orientation = xlPortrait '縦 '用紙サイズ .PaperSize = xlPaperA4 'A4 '拡大縮小 'シートを1ページに印刷 .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 End With Application.PrintCommunication = True End Sub
|
以上ではアクティブシートに対してのページ設定でしたが
ActiveSheetの部分をSheets("Sheet1")などとすれば
特定のシートに対してページ設定ができます。