11/07/2018

Excel。マクロ37。複数シートを作業グループにして、まとめて印刷するには【Bulk printing】

Excel。マクロ37。複数シートを作業グループにして、まとめて印刷するには

<Excel VBA:シートの作業グループ>

ちょっと知っているだけで、
日ごろの業務が時短・改善することができる可能性を秘めているマクロ。

今回は、複数のシートを作業グループにして、
まとめて印刷できるようにExcel VBAで作っていきます。

次のように複数のシートがあります。

最初に複数のシートを作業グループにして、
シート見出しの色を変更することからご紹介していきます。

ここでは、作業グループのやり方の一例を兼ねております。

【シート見出しの色をまとめて設定する】

シート見出しの色を設定すること自体は簡単なのですが、
少数のシートならともかく、大量でしかも、
シートごとの間がある場合に選択するのが、結構面倒ですね。

そこで、次のようなExcel VBAの構文を作ってみましょう。

Sub 複数シート見出しの色()
    Dim wsheet As Worksheet
'グループ化されていないかの確認
    If ActiveWindow.SelectedSheets.Count > 1 Then
        ActiveSheet.Select
    End If

    Sheets("大崎").Select
    Sheets("品川").Select False
    Sheets("東京").Select False
   
    For Each wsheet In ActiveWindow.SelectedSheets
        wsheet.Tab.ColorIndex = 3
    Next wsheet
   
    ActiveSheet.Select
End Sub

簡単に説明していきましょう。

Dim wsheet As Worksheet
お馴染みの変数宣言で、wsheet という変数を用意しました。

If ActiveWindow.SelectedSheets.Count > 1 Then
    ActiveSheet.Select
End If
この3行は、すでに、
作業グループになっていないかの確認をするブロックになっています。

ActiveWindow.SelectedSheets.Count は、
アクティブになっているシートが何枚あるのかを数えてくれます。

それが1より多い場合は、アクティブになっているシートが複数ある。
すなわち、作業グループになっているということがわかります。

その場合は、
ActiveSheet.Select 作業グループを解除するには、
別のシートをクリックすれば解除できますので、その処理をしています。

Sheets("大崎").Select
Sheets("品川").Select False
Sheets("東京").Select False
ここで、作業グループにしたいシートを設定していきます。

For Each wsheet In ActiveWindow.SelectedSheets
    wsheet.Tab.ColorIndex = 3
Next wsheet
そして、シート見出しの色を設定するブロックですね。

For Each wsheet In ActiveWindow.SelectedSheets で、
アクティブになっているワークシートコレクションの分だけ
繰り返す処理を行います。

wsheet.Tab.ColorIndex = 3 は、
赤色でシート見出しの色を設定する行ですね。

最後の ActiveSheet.Select で、作業グループを解除しています。

では、実行してみましょう。

このように、複数シートの見出しの色を設定することができました。

それでは、複数シートをまとめて印刷する構文修正していきましょう。

【複数シートをまとめて印刷】

複数シートをまとめて印刷するには、シートを選択しなければなりません。
そこで、先ほどのExcel VBAの構文を次のようにアレンジすればOKです。

Sub 複数シート印刷()
    Dim wsheet As Worksheet
   
'グループ化されていないかの確認
    If ActiveWindow.SelectedSheets.Count > 1 Then
        ActiveSheet.Select
    End If
   
    Sheets("大崎").Select
    Sheets("品川").Select False
    Sheets("東京").Select False
   
    ActiveWindow.SelectedSheets.PrintOut
   
    ActiveSheet.Select
End Sub

変更箇所は、シート見出しの色を設定したブロックを、
ActiveWindow.SelectedSheets.PrintOut とするだけですね。
この行で、印刷してくれます。
なお、次の一行に変更すれば、
印刷プレビュー』で確認することができます。

ActiveWindow.SelectedSheets.PrintPreview

昨今のバージョンのバックステージビューではなくて、
かつて御厄介になった『印刷プレビュー』を表示することができます。


このように、複数シートをまとめて印刷したりすることができますので、
ちょっと知っていると意外と便利かもしれませんね。