エクセルで楽々校務

学校現場で使えるエクセルファイルや小技の紹介をしています。掘り出し物があるかもしれません。あと、今までの実践での疑問点もつぶやきます。

【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枚ずつ行われるので、改ページ表示の点線の表示を停止すると高速になるようです。

あまり触れられていないので、紹介してみました。

・・・もしかしたら、極秘テクニックなのか・・・

はたまた、そんなの当たり前だよ!ってコードなのか・・・。

とにかく、私が試した中では最も高速に動きました。

 

では、本年もよろしくお願い申し上げます。