【VBA】複数シートを高速にループする(印刷プレビューやページ設定)コード
明けましておめでとうございます🐄
さて、新年最初のネタは、複数シートをFor Each~でループしながら、
印刷プレビューや印刷範囲を設定する時に実質的に高速に回すことができるコードの紹介です。
ネットを検索すると、定番の
Application.ScreenUpdating = False’画面更新停止
Application.Calculation = xlCalculationManual '手動計算~Application.Calculation = xlCalculationAutomatic '自動計算に戻す
Application.PrintCommunication = False’プリンター通信を遮断
などが挙げられていますが、、、そんなに変わりませんでした。
私が最も効果を実感したのは、
sh.DisplayPageBreaks = False '''''''''''''''''''''★改ページを非表示にする
というコードです。これを入れるとループ速度が飛躍的に向上しました。
コード例)
シートインデックス1シートのA2セルに、ページ設定先頭セル入力。A3セルに終端セル入力して、
数字名シートのページ設定、改ページ/標準ビューを切り替えるコードです。
-----------------------------------------------------------------
Sub ★数字シートページ設定プレビュー切り替え基本形()
Dim ash, sh As Worksheet
Set ash = ActiveSheet
For Each sh In Worksheets
If IsNumeric(sh.Name) = True Then '数字シート限定
With sh.PageSetup
'★ページ範囲設定
Dim pa1 As String
Dim pa2 As String
pa1 = Sheets(1).Range("A2").Value 'ページ設定開始セル
pa2 = Sheets(1).Range("A3").Value 'ページ設定終端セル
.PrintArea = Range(pa1, pa2).Address '★セル値で設定
.Zoom = False '1ページに収める
.FitToPagesTall = 1 '1ページに収める
.FitToPagesWide = 1 '1ページに収める
sh.DisplayPageBreaks = False '''''''''★改ページ非表示
End With
'★★プレビュー切替設定
sh.Activate '★shをアクティブにする
If ActiveWindow.View = xlNormalView Then
ActiveWindow.View = xlPageBreakPreview
sh.DisplayPageBreaks = False '''''''''''''★改ページ非表示
ElseIf ActiveWindow.View = xlPageBreakPreview Then
ActiveWindow.View = xlNormalView
sh.DisplayPageBreaks = False '''''''''''''★改ページ非表示
End If
End If
Next
Application.ScreenUpdating = True
ash.Activate
MsgBox "処理完了"
End Sub
-----------------------------------------
表だらけでデータ量の大きいページでも、ループが高速に動くのを実感できると思います。
このような処理の場合、シートを配列に入れて回しても、処理は、1枚ずつ行われるので、改ページ表示の点線の表示を停止すると高速になるようです。
あまり触れられていないので、紹介してみました。
・・・もしかしたら、極秘テクニックなのか・・・
はたまた、そんなの当たり前だよ!ってコードなのか・・・。
とにかく、私が試した中では最も高速に動きました。
では、本年もよろしくお願い申し上げます。