
エクセルVBAで印刷枚数入力テキストボックス付き印刷フォームを作る

印刷する時に、印刷の部数を指定するために何度もクリックするのって面倒だから、枚数を入力するだけで印刷できるようになったら便利なんだけどなあ~って思ったことありませんか?
ユーザーフォームを使えば、印刷したい枚数をテキストボックスに入力して印刷実行ボタンをクリックするだけで、印刷完了できるようになるので、作業効率化できますよ。
印刷ページ・枚数が決まっている場合
まずは基本的なExcel-VBAを使用した印刷方法を押さえておきましょう。
ここでは、印刷ページも枚数も決まっているので変更の必要がない場合の例になります。
ワークシートをExcel-VBAを使用して印刷するにはPrintOutメソッドを使い、現在表示中のワークシートであらかじめ設定した印刷範囲を1枚印刷するコードを書いてみましょう。
Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub
- コマンドボタン1が押されたら
- 表示中のシートを1ページ目~1ページ目、1枚、部単位で印刷する
- マクロ終了
このようになり、ActiveWindow.SelectedSheets.PrintOutで表示中のシートを印刷すると指示するVBAコードになります。
そして、ページ数や枚数を下記のように指定できます。
- From・・・開始ページ
- To・・・・終了ページ
- Copies・・印刷部数(印刷枚数)
- Collate・・部単位指定(True)※省略すると1部印刷に指定
ちなみに、ここでは表示しているワークシートとしていますが、別のシート(表示していないシート)を指定して印刷することもできます。
この場合、「ActiveWindow.SelectedSheets」の部分を「Worksheets(“Sheet1”).Activate」に変更すると、Sheet1を指定して印刷できます。
印刷枚数を自由に指定して印刷
これで基本的なExcel-VBAでの印刷はできるようになりましたが、上記VBAコードでは印刷枚数を指定している(Copies:=1)ので、常に1枚しか印刷されません。
このページでやりたいことは、印刷枚数を自由に設定させることなので(Copies:=1)を簡単に変更できるようにさせる印刷フォームが必要になります。

上記画像が実際に作って使用している印刷フォームで、テキストボックスに印刷したい枚数を入力して印刷実行ボタンを押せば、入力した枚数分印刷ができます。
これにより(Copies:=1)のままならば、10枚印刷したい場合は10回印刷ボタンを押さなければならないのですが、この印刷フォームを使えば1回で済みます。
それでは実際に、ユーザーフォームを使いテキストボックスに入力された数字(枚数)を読み込んで、コマンドボタンで印刷を実行するようにしましょう。
必要なVBAコードは1枚の時、2枚の時・・・・10枚の時ですよね。
- 1枚の時「From:=1, To:=1, Copies:=1, Collate:=True」
- 2枚の時「From:=1, To:=1, Copies:=2, Collate:=True」
- 3枚の時「From:=1, To:=1, Copies:=3, Collate:=True」
- 省略(4枚~9枚の時)
- 10枚の時「From:=1, To:=1, Copies:=10, Collate:=True」
常に枚数が決まっていない時は、入力された枚数に応じて印刷枚数を変える必要があります。
Select Caseステートメント
このようにテキストボックスに入る数字(印刷枚数)が複数(1~10)ありますので、複数の条件で答えが出るまで順に処理を繰り返して行ってくれる「Select Caseステートメント」を使います。
Select Caseステートメントの詳細につきましては重複するので、詳しい事は下記をご覧ください。

では、シンプルにテキストボックスの数字が1だったら1枚印刷、2だったら2枚印刷・・・10だったら10枚印刷とVBAコードを書いていきたいのですが、長くなるので、3枚までにします。
Private Sub CommandButton1_Click()
Select Case TextBox1
Case Is = 1
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Case Is = 2
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=2, Collate:=True
Case Is = 3
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=3, Collate:=True
End Select
End Sub
- コマンドボタン1がクリックされたら
- Select Caseステートメントを実行し、テキストボックス1の値が下記の時処理を行う
- 1だったら
- 現在表示選択中のシートを1ページ目~1ページ目を1枚印刷する
- 2だったら
- 現在表示選択中のシートを1ページ目~1ページ目を2枚印刷する
- 3だったら
- 現在表示選択中のシートを1ページ目~1ページ目を3枚印刷する
- Select Caseステートメント終了
- マクロ記録終了
ここでは3枚でVBAコード書くのをやめましたが、10枚まで書き続けるならばCase Is =4以降を続ければ完了します。
Ifステートメント追加してエラー回避
これでも問題ないのですが、万が一テキストボックスが空欄の時に印刷実行ボタン押されるとエラーになってしまうので、エラー回避の為に空欄の時はメッセージを出してお知らせしましょう。
Private Sub CommandButton1_Click()
If TextBox1.Value = “” Then
MsgBox “印刷枚数を入力してください”
Else
Select Case TextBox1
Case Is = 1
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Case Is = 2
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=2, Collate:=True
Case Is = 3
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=3, Collate:=True
End Select
End If
End Sub
最初にIf~Thenを追加する事で、テキストボックスが空欄の時は、「印刷枚数を入力してください」というメッセージを表示させました。
そして正しく枚数が入力されていたら、Else以下の印刷処理を開始するようになりますので、うっかり空欄でコマンドボタンを押されてもエラーにならずに済みますので、この方法をおススメしますよ。