ボタンをクリックして印刷、連番を挿入する(ナンバリング印刷)
Excelで作成した表や資料を印刷するときに、
ホーム > 印刷をクリックしていったり、
またはクイックアクセスツールバーに設定したショートカットボタンから印刷を実行すると思います。
しかし既に書式フォーマットが決まっていて、
中身を少しだけ変更して、その都度印刷を実行するときがあります。
例えば、印刷するもの毎に連番を挿入するようなときです。(ナンバリング印刷)
連番を挿入して、何回も印刷を実行するという反復作業は
単純作業ながらも面倒に思ったり、時間がもったいないと思うことがあります。
そこで自動的に連番を挿入して印刷(ナンバリング印刷)するVBAマクロを作成しました。
順を追って説明したいので、
まずは、ダイアログボックスで指定した枚数を印刷するVBAマクロをご紹介します。
【サンプルコード1】
Sub NumberPrint()
Dim idx As Integer
Dim frmPage, toPage
toPage = Application.InputBox("枚数を指定してください", Type:=1)
frmPage = 1
If toPage >= frmPage Then
For idx = frmPage To toPage
ActiveSheet.PrintOut
Next idx
Else
MsgBox "ページ数の指定が不適切です。印刷は行いません"
End If
End Sub
【サンプルコード1 解説】
「ActiveSheet.PrintOut」で現在のページを印刷します。
また、「Application.InputBox()」で印刷枚数を指定できるように
入力ダイアログボックスを表示するようにしています。
そして、For文を使ってその指定した印刷枚数分、印刷処理を繰り返し実行させています。
他にも、「Application.InputBox()」の入力値(指定印刷枚数)に
上限値のチェックを付加してもいいかもしれません。
例えば、If文であらかじめ印刷枚数の上限値を設定しておいて、
入力値がその値を超えていないか判断し、大量印刷を防止するといった具合です。
印刷するページの中に連番を挿入したいという要望がある場合もVBAマクロで対応できます。
次のサンプルコードは、指定したセルに連番を挿入します。
【サンプルコード2】
Sub NumberPrint()
Dim idx As Integer
Dim frmPage, toPage
frmPage = Application.InputBox("連番を挿入して印刷します" & Chr(13) _
& "開始番号を入力してください", Type:=1)
toPage = Application.InputBox("終了番号を入力してください", Type:=1)
If frmPage > 0 And toPage >= frmPage Then
For idx = frmPage To toPage
Range("A1").Value = idx
ActiveSheet.PrintOut
Next idx
Else
MsgBox "開始番号、終了番号が不適切です。印刷は行いません"
End If
End Sub
【サンプルコード2 解説】
上記のサンプルコード2では、VBAマクロ実行後に「Application.InputBox」で
開始番号と終了番号を入力ダイアログボックスで指定しています。
開始番号から1ずつ順次カウントアップしながら終了番号まで印刷します。
その番号をセルA1に入力することで、印刷物内に連番を挿入します。
具体的には「ActiveSheet.PrintOut」の前の「Range(“A1”).Value = toPage」の部分です。
「Range()」の部分で入力するセルを指定していますので、別のセルにすることも可能です。
また、開始番号が終了番号よりも大きな数字にならないように
If文に判定条件を加えて制御しています。
(「If frmPage > 0 And toPage >= frmPage Then」の部分)
まとめ
いかがでしたでしょうか?
今回はVBAマクロを用いて、連番を挿入して印刷する方法をご紹介しました。
ぜひ今回ご紹介したVBAマクロを参考に作業の効率化を目指してみてください。
今後もExcelやVBAについてお役立ち情報などご紹介していきたいと思います!!
以上、「【Excel VBA】ボタンをクリックして印刷、連番を挿入する」でした。
コメント
参考にさせていただいております。
質問なのですが、サンプルコード2で”開始番号1終了番号3”で実行してみたのですが、印刷された3枚に、すべて3が印字されておりました。
よろしければ解決策を教えていただきたいです。
M2さん、こんばんは。
申し訳ございません。サンプルコードに誤りがありました。
「Range(“A1”).Value = toPage」の箇所を
「Range(“A1”).Value = idx」と変更していただきます様お願いいたします。