一括印刷するシートをボタン一つで選択・指定する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の所を解説しました。

 

最後に仕上げの作業がありますが、長くなりましたので次のページで説明します。

→ 次のページへはコチラ

 

【関連ページへのリンク】

・その1具体例&準備編

・その2操作用シート作り編

・その3Excel VBA編(現在のページ)

・その4仕上げ編


口コミ・評判のいいExcel本の紹介】


Top