日本語入力ソフトとVBAの覚え書き

・各種日本語入力ソフトの辞書解説 ・ちょっと楽になるWord/Excel VBA集 ・ボーダーブレイク用語辞書

(Excel) ページ設定ダイアログと対応するVBAコード


f:id:dz_dzone:20170814233145j:plain

はじめに

VBAでのページ設定の高速化

以前から、VBAでのページ設定の速度が遅いことが知られている。これを解消するため、Office2010以降では高速化させるコードが組み込まれた。

'**PageSetup高速化開始
Application.PrintCommunication = False

ここにページ設定処理を入れる

'**PageSetup高速化終了
Application.PrintCommunication = True

PageSetupはシート(Sheet)に対して行う

実際のワークシート(ブック)の操作を思い浮かべて貰うと、ページ設定が各シートに対してそれぞれ行うものだと理解できるだろう。

例:
'**1番左のワークシートのページ設定
Worksheets(1).PageSetup.'**Sheet3という名前のワークシートのページ設定
Worksheets("Sheet3").PageSetup.'**現在アクティブなワークシートのページ設定
ActiveSheet.PageSetup.'**ブックに含まれる全てのワークシートのページ設定
Dim mySheet As Worksheet
For Each mySheet In Worksheets
  mySheet.PageSetup.~~
Next mySheet

「ページ」タブ

f:id:dz_dzone:20170912205631j:plain

印刷の向き

f:id:dz_dzone:20170912210119j:plain

PageSetup.Orientation : 印刷の向きを設定する

' **アクティブシートの印刷の向きを「横」に設定する
ActiveSheet.PageSetup.Orientation = xlLandscape
項目 コード
xlPortrait 1
xlLandscape 2

拡大縮小印刷

拡大/縮小

f:id:dz_dzone:20170912212329j:plain

PageSetup.Zoom : シートの拡大縮小率を設定する

' **アクティブシートの拡大縮小率を「46%」に設定する
ActiveSheet.PageSetup.Zoom = 46
項目 コード
拡大縮小率 - 10~400
「次のページ数に合わせて印刷」の場合 False -
次のページ数に合わせて印刷

f:id:dz_dzone:20170912212346j:plain

PageSetup.FitToPageTall : シートを縦何ページ分で収めるかを設定する
PageSetup.FitToPageWide : シートを横何ページ分で収めるかを設定する

' **アクティブシートを縦1ページ、横1ページに収まるように設定する
With ActiveSheet.PageSetup
  .Zoom = False
  .FitToPagesTall = 1 
  .FitToPagesWide = 1
End With
項目 備考
.Zoom False 必須
.FitToPageTall 1~
.FitToPageWide 1~

用紙サイズ

f:id:dz_dzone:20170929103722j:plain

PageSetup.PaperSize : 用紙サイズを設定する

' **アクティブシートの用紙サイズをA3に設定する
ActiveSheet.PageSetup.PaperSize = xlPaperA3
日本で使う主な値
サイズ 幅x高さ
xlPaperA3 A3 297mm x 420mm
xlPaperA4 A4 210mm x 297mm
xlPaperA5 A5 148mm x 210mm
xlPaperB4 B4 250mm x 354mm
xlPaperB5 B5 177mm x 250mm

印刷品質

f:id:dz_dzone:20170929103734j:plain

PageSetup.PrintQuality : 印刷品質(dpi)を設定する

' **アクティブシートの印刷品質を600dpiに設定する
PageSetup.PrintQuality = 600

※印刷するプリンターによって異なるが、300dpi, 600dpi, 1200dpiなどが一般的。値が大きいほど綺麗に印刷されるが印刷データが大きくなる。(ファイルサイズではない)

先頭ページ番号

f:id:dz_dzone:20170929103746j:plain

PageSetup.FirstPageNumber : 先頭ページ番号を設定する

' **アクティブシートの先頭ページ番号を100に設定する
PageSetup.FirstPageNumber = 100
備考
xlAutomatic 自動的に先頭ページの番号が選択される
1~ 1~

「余白」タブ

f:id:dz_dzone:20170929133024j:plain

余白およびヘッダー/フッターの高さ

f:id:dz_dzone:20170929133333j:plain

PageSetup.LeftMargin   : 左余白を設定する
PageSetup.RightMargin  : 右余白を設定する
PageSetup.TopMargin    : 上余白を設定する
PageSetup.BottomMargin : 下余白を設定する

PageSetup.HeaderMargin : ヘッダーの高さを設定する
PageSetup.FooterMargin : フッターの高さを設定する

' **アクティブシートの余白を各2.0cm, 
'   ヘッダー/フッターの高さを1.5cmに設定する
With ActiveSheet.PageSetup
  .LeftMargin   = Application.CentimetersToPoints(2.0) 
  .RightMargin  = Application.CentimetersToPoints(2.0)
  .TopMargin    = Application.CentimetersToPoints(2.0)
  .BottomMargin = Application.CentimetersToPoints(2.0)
  .HeaderMargin = Application.CentimetersToPoints(1.5)
  .FooterMargin = Application.CentimetersToPoints(1.5)
End With
単位 コードと値
センチメートル単位
※ミリ単位ではない点に注意
Application.CentimetersToPoints( )
インチ単位 Application.InchesToPoints( )

ページ中央

f:id:dz_dzone:20170929133341j:plain

PageSetup.CenterHorizontally : 水平方向のページ中央に配置する
PageSetup.CenterVertically   : 垂直方向のページ中央に配置する

' **アクティブシートを水平方向でページ中央に配置し、
'                     垂直方向ではページ中央に配置しない
With ActiveSheet.PageSetup
  .CenterHorizontally = True
  .CenterVertically   = False
End With
項目 コード
ページ中央に配置する True
ページ中央に配置しない False

「ヘッダー/フッター」タブ

f:id:dz_dzone:20170929135435j:plain

「ヘッダーの編集」「フッターの編集」

f:id:dz_dzone:20181219112736j:plain

With ActiveSheet.PageSetup
  '**全ページ用ヘッダー/フッターの指定
  .LeftHeader = ""
  .CenterHeader = ""
  .RightHeader = ""
  .LeftFooter = ""
  .CenterFooter = "&P ページ"
  .RightFooter = ""
End With
    
※但し、OddAndEvenPagesHeaderFooter = Trueの場合は奇数ページ用となる

その他のオプション

奇数/偶数ページ別指定

f:id:dz_dzone:20181219143833j:plain

With ActiveSheet.PageSetup
  '**奇数/偶数ページ別指定
  .OddAndEvenPagesHeaderFooter = True
  
  '**偶数ページ用ヘッダー/フッターの指定
  .EvenPage.LeftHeader.Text = ""
  .EvenPage.CenterHeader.Text = ""
  .EvenPage.RightHeader.Text = ""
  .EvenPage.LeftFooter.Text = ""
  .EvenPage.CenterFooter.Text = ""
  .EvenPage.RightFooter.Text = ""
End With
項目 コード
奇数/偶数ページを別指定する True
奇数/偶数ページを別指定しない False
先頭ページのみ別指定

f:id:dz_dzone:20181219143901j:plain

With ActiveSheet.PageSetup
  '**先頭ページのみ別指定
  .DifferentFirstPageHeaderFooter = True
  
  '**先頭ページ用ヘッダー/フッターの指定
  .FirstPage.LeftHeader.Text = ""
  .FirstPage.CenterHeader.Text = ""
  .FirstPage.RightHeader.Text = ""
  .FirstPage.LeftFooter.Text = ""
  .FirstPage.CenterFooter.Text = ""
  .FirstPage.RightFooter.Text = ""
End With
項目 コード
先頭ページのみ別指定する True
先頭ページのみ別指定しない False
ドキュメントに合わせて拡大/縮小

f:id:dz_dzone:20181219143913j:plain

PageSetup.ScaleWithDocHeaderFooter:ドキュメントに合わせて拡大/縮小する
項目 コード
ドキュメントに合わせて拡大/縮小する True
ドキュメントに合わせて拡大/縮小しない False
ページ余白に合わせて配置

f:id:dz_dzone:20181219143926j:plain

PageSetup.AlignMarginsHeaderFooter:ページ余白に合わせて配置する
項目 コード
ページ余白に合わせて配置する True
ページ余白に合わせて配置しない False

「シート」タブ

f:id:dz_dzone:20170929135752j:plain

印刷範囲

f:id:dz_dzone:20170929140315j:plain

PageSetup.PrintArea : 印刷範囲を設定する

' **アクティブシートの印刷範囲を$A$1:$AB$32に設定する
ActiveSheet.PageSetup.PrintArea = "$A$1:$AB$32"

印刷タイトル

f:id:dz_dzone:20170929140333j:plain

PageSetup.PrintTitleRows    : 
PageSetup.PrintTitleColumns : 

印刷

f:id:dz_dzone:20170929140640j:plain

枠線
PageSetup.PrintGridlines : 枠線を印刷するか設定する
項目
枠線を印刷する True
枠線を印刷しない False
白黒印刷
PageSetup.BlackAndWhite : 白黒印刷するか設定する
項目
白黒印刷する True
白黒印刷しない False
簡易印刷
PageSetup.Draft : 簡易印刷するか設定する
項目
簡易印刷する True
簡易印刷しない False
行列番号
PageSetup.PrintHeadings : 行と列の番号を印刷するか設定する
項目
行と列の番号を印刷する True
行と列の番号を印刷しない False
コメント
PageSetup.PrintComments : コメントを印刷するか設定する
PageSetup.PrintNotes    : コメントを印刷するか設定する
項目 コード
表示通りにコメントを印刷する PageSetup.PrintComments xlPrintInPlace
末尾にまとめてコメントを印刷する PageSetup.PrintComments xlPrintSheetEnd
コメントを印刷しない PageSetup.PrintNotes False
セルのエラー
PageSetup.PrintErrors : エラーを印刷するか設定する
項目
印刷エラーは空白 xlPrintErrorsBlank
印刷エラーはダッシュとして表示 xlPrintErrorsDash
すべての印刷エラーが表示 xlPrintErrorsDisplayed
印刷エラーは使用不可として表示 xlPrintErrorsNA

ページの方向

f:id:dz_dzone:20170929140349j:plain

PageSetup.Order : 印刷するページの方向を設定する
項目 コード
左から右 xlDownThenOver 1
上から下 xlOverThenDown 2