« ワークブックのパスを取得する | トップページ | ヘッダー・フッターの設定 »

2020年3月28日 (土)

ページ設定の自動化

ページ設定は
[ファイル]-[印刷]-[ページ設定]をクリックする、もしくは
[ページレイアウト]タブのページ設定区分、右下の矢印をクリックすると
現れるウィンドウで設定できます。
(以下このウィンドウを「ページ設定」とする)
Vba20200328a

ページ設定の項目はたくさんありますが
まずは、アクティブシートを印刷するときに
よく設定する項目についてのみ
自動設定をするマクロを作成します。

よく設定する項目として下記の5点を設定していきます。
(1)印刷範囲の設定
(2)余白
(3)印刷の向き
(4)用紙サイズ
(5)拡大縮小印刷

 

(1)印刷範囲の設定
手動で印刷範囲を設定する場合は、
印刷したい範囲(例としてA1:I100の範囲)を選択した状態で
[ページレイアウト]タブ-[印刷範囲]-[印刷範囲の設定]ボタンをクリックします。

VBAでは
次のようにPrintAreaプロパティを指定します。

ActiveSheet.PageSetup.PrintArea = "A1:I100"

(2)余白
手動では、ページ設定の[余白]タブで設定します。
Vba20200328b

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)印刷の向き
手動では、
ページ設定の[ページ]タブ-[印刷の向き]で設定します。
Vba20200328c

VBAでは次のコードの1行目で縦向き、2行目で横向きを指定します。
どちらか片方のみ使用してください。

ActiveSheet.PageSetup.Orientation = xlPortrait '縦
ActiveSheet.PageSetup.Orientation = xlLandscape '横

(4)用紙サイズ
手動では
ページ設定の[ページ]タブ-[用紙サイズ]で設定します。
Vba20200328d

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)拡大縮小印刷
手動では
ページ設定の[ページ]タブ-[拡大縮小印刷]で設定します。
Vba20200328e

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")などとすれば
特定のシートに対してページ設定ができます。

|

« ワークブックのパスを取得する | トップページ | ヘッダー・フッターの設定 »

コメント

この記事へのコメントは終了しました。