一括印刷するシートをボタン一つで選択・指定するVBA3
このページは、一括印刷するシートをボタン一つで選択・指定できるVBAの作成方法を解説する3ページ目です。
ここでは、一括印刷するシートをボタン一つで選択できる方法のうち、VBA作成部分を説明します。
4.Excel VBAでのプログラムの作成
そして最後に、VBAでのプログラムの作成です。
ここが一番分かりづらいと思いますが、基本はコードをコピーして、少しだけ状況に合わせて変えるくらいで使えるようにしています。
ではいきましょう。
(1)Visual Basicを開く
「開発タブ」をクリック(①)し、「Visual Basic」をクリック(②)します。
すると下のような画面が現れます。
そうしたら、左側の枠内に表示されている「一括印刷操作用」に準備したシートをクリックします。
(2)コードをコピーする
次のコードを、画面右側に全て貼り付けます。
Sub 複数シートの一括印刷()
Dim rc As VbMsgBoxResult
Dim hairetu()
Dim shsu As Long
Dim ws As Worksheet
Dim i As Long
Dim x As Long
Dim y As Long
Dim wsmei As String
rc = MsgBox("「ON」になっているシートを一括で印刷します。よろしいですか?", vbYesNo + vbQuestion, "一括印刷実行の確認")
If rc = vbNo Then
Exit Sub
End If
shsu = Sheets.Count - 1
ReDim hairetu(1 To shsu)
For i = 1 To shsu
hairetu(i) = Sheets(i).Name
Next
i = 0
For i = 1 To shsu
y = 0
For x = 9 To 12' ← 状況によって変える所1
If ActiveSheet.Range("B" & x).Value = hairetu(i) Then' ← 状況によって変える所2
y = y + 1
Exit For
End If
Next x
If y = 0 Then
MsgBox ("「一括印刷対象シート名」とシート名が異なるシートがあります。元に戻してください。")
Exit Sub
End If
y = 0
Next i
Erase hairetu
ReDim hairetu(1 To 4)' ← 状況によって変える所3
i = 0
x = 0
For i = 1 To 4' ← 状況によって変える所4
If ActiveSheet.OLEObjects("sh" & i).Object.Caption = "ON" Then
hairetu(i) = 1
x = x + 1
Else
hairetu(i) = 0
End If
Next i
If x = 0 Then
MsgBox ("一括印刷の対象に指定がありません。")
Exit Sub
End If
i = 0
For i = 1 To 4' ← 状況によって変える所5
If hairetu(i) = 1 Then
Sheets(i).Activate
ActiveSheet.PrintOut
End If
Next i
Erase hairetu
End Sub
Private Sub sh1_Click()' ← 状況によって変える所6
If sh1.Caption = "ON" Then
sh1.Caption = "OFF"
Else
sh1.Caption = "ON"
End If
End Sub
Private Sub sh2_Click()' ← 状況によって変える所7
If sh2.Caption = "ON" Then
sh2.Caption = "OFF"
Else
sh2.Caption = "ON"
End If
End Sub
Private Sub sh3_Click()' ← 状況によって変える所8
If sh3.Caption = "ON" Then
sh3.Caption = "OFF"
Else
sh3.Caption = "ON"
End If
End Sub
Private Sub sh4_Click()' ← 状況によって変える所9
If sh4.Caption = "ON" Then
sh4.Caption = "OFF"
Else
sh4.Caption = "ON"
End If
End Sub
取りあえず何も考えずに、マルっとコピーしちゃいましょう。
すると次のような感じになります。
(3)状況によって変わる部分を修正する
一部状況によって変わる所があるので、そこを修正します。
① 状況によって変える所1と2
コードでは、
~~~~~~~~
i = 0
For i = 1 To shsu
y = 0
For x = 9 To 12' ← 状況によって変える所1
If ActiveSheet.Range("B" & x).Value = hairetu(i) Then' ← 状況によって変える所2
~~~~~~~~
の「 9 To 12」の部分と「Range("B"~」の部分です。
ここは「一括印刷操作用シートのどのセルにシート名が入っているか?」によって変わり、「9 To 12」にはシート名が入っている行番号が、「"B"」にはシート名が入っている列番号が入ります。
例えば、下のように操作用シートを作ったとします。
するとシート名は6行目から9行目に入っているので「9 To 12」は「6 To 9」に修正します。
また、シート名はセルの結合がされていますが左端はB列なので、「"B"」はそのままとなります。
②状況によって変える所3・4・5
3~5は全て「1 To 4」の所です。
ここは「一括印刷の操作をしたいシートがいくつあるのか?」で決まり、先ほどの例だとシートは4つだったので「1 To 4」となり、シートが3つなら「1 To 3」、シートが10個なら「1 To 10」というふうに、始めは必ず「1」、そして後の数字がシートの数という形になります。
ちなみに、操作用シートは数に入れないようにしましょう。
③状況によって変える所6・7・8
最後に、6~9は全て「Private Sub sh〇_Click()~End sub」の固まりについての話です。
ここは対象指定ボタンを押した時のボタンの表示を、「ON/OFF」と変えるためのものです。
一括印刷自体の動きには影響がないのでなければなくてもいいのですが、あると分かり易くなります。
例ではボタンが4つあるので、sh1~sh4までの4つ分、「Private Sub sh〇_Click()~End sub」の固まりがありますが、これをボタンの数に応じてコピーして増やしたり、削除したりしてください。
なお、増やす場合には、コピーした固まりの「sh」の後に続く数字の部分を変える(5つ目ならsh5など)ことを忘れないでください。
以上、VBAの所を解説しました。
最後に仕上げの作業がありますが、長くなりましたので次のページで説明します。
【関連ページへのリンク】
・その3Excel VBA編(現在のページ)
【口コミ・評判のいいExcel本の紹介】