2017年1月19日木曜日

VBAマクロを利用した繰り返し処理

業務でパソコンを利用している以上、エクセルは日常的に使います。

Excelでの印刷関連の設定は複数シートまとめて行う事ができないので
マクロで記録して、ちょこっとVBAを書いて連続処理することで手抜きを実現しています。

手順の概略

1.開発タブ→マクロの記録 で、行いたい印刷設定を行う。
 →開発タブが出ていない場合にはググって調べてください。設定で出せます。
2.以下のテンプレコードをVBAに貼り付ける。
3.テンプレコードを実行する

テンプレートコード(そのまま貼り付けて1行だけ修正)


Public Sub ExecuteAllSheets()
    
    Dim ws As Worksheet
    
    '高速化対応:再描画、都度計算を無効とする
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    'エラーハンドリングの開始
    On Error GoTo ErrorHandler
    
    '全シートに対して繰り返し処理を行う
    For Each ws In ThisWorkbook.Worksheets
        ws.Select
        Call Macro1   '(ここを変更)ここで繰り返し行いたい処理を指定
    Next
    
    'エラーハンドリングをやめてプログラム終了処理へ
    On Error GoTo 0
    GoTo Program_Exit

ErrorHandler:
    MsgBox "エラーが発生しました" & vbCrLf & _
            "No." & Err.Number & vbCrLf & _
            "Message : " & Err.Description, vbExclamation, ""

Program_Exit:

    '高速化対応:解除
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationManual

End Sub

【補足】

・プリンタ関連の処理を記憶すると、自働で作成されたコード中に以下が記録されるケースがあります。
 →ActiveWindow.SelectedSheets.PrintPreview
 これが記録されていると、処理が連続で行われません。(プレビューで止まる)
・余白調整、ヘッダフッタの一括設定等々、画面でできることはすべて処理できます。
 →どこで何ができるかは自動作成されたコードを見て判断してください。