VBAで印刷枚数を指定して印刷する方法

印刷print-excel-vba VBA

スポンサーリンク


エクセルで作成した様々な文書や表などを印刷しますが、ボタン1回押したら自動的に印刷範囲を指定して印刷できると時間節約できて効率的ですよね。

だけど、印刷枚数だけが毎回異なるので印刷枚数を指定して印刷できるようになるともっと便利なので、ユーザーフォームを使って印刷画面を作っちゃいましょう。
スポンサーリンク


スポンサーリンク

Excel-VBAで印刷

ワークシートをExcel-VBAを使用して印刷するにはPrintOutメソッドを使います。

まずは基本的なExcel-VBAを使用した印刷方法を押さえておきましょう。

いつものようにユーザーフォームに配置したコマンドボタンを押すと印刷するようにコードを書いています。

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub

  1. コマンドボタン(CommandButton1)を押すと
  2. 選択しているワークシート(表示しているシート)を印刷、1ページ目から1ページ目で枚数は1部(1枚)、部単位を指定
  3. マクロ終了

これで表示しているワークシート(ActiveWindow.SelectedSheets)を印刷するのですが、1ページ目を1枚印刷するコードです。印刷ページや枚数は自由に設定できます。

  • From・・・開始ページ
  • To・・・・終了ページ
  • Copies・・印刷部数(印刷枚数)
  • Collate・・部単位指定(True)

ちなみに、ここでは表示しているワークシートでユーザーフォームを使用していますが、別のシート(表示していないシート)を指定して印刷することもできます。

この場合、「ActiveWindow.SelectedSheets」の部分を「Worksheets(“Sheet1”).Activate」に変更すると、Sheet1を指定して印刷できます。

印刷枚数を指定して印刷

印刷print

それでは基本的なExcel-VBAでの印刷はできるようになりましたが、コードに印刷枚数を指定している(Copies:=1)ので、常に設定した枚数しか印刷されません。

印刷するたびに枚数が異なる時などは、この(Copies:=1)を簡単に変更できると便利なのです。

そこで、ユーザーフォームを使いテキストボックスに入力された数字(枚数)を読み込んで、コマンドボタンで印刷を実行するようにしましょう。

Private Sub CommandButton1_Click()
If TextBox1.Value = “” Then
MsgBox “印刷枚数を入力してください”
Else
Worksheets(“Sheet1”).Activate
Select Case TextBox1
Case Is = 1
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate:=True
Case Is = 2
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=2, Collate:=True
Case Is = 3
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=3, Collate:=True
End Select
End If
End Sub

  1. ユーザーフォームに配置されたコマンドボタン(CommandButton1)を押したら
  2. もしテキストボックス(TextBox1)が空欄だったら
  3. メッセージ「印刷枚数を入力してください」を表示する
  4. そうでない場合(入力されている場合)
  5. ワークシート【Sheet1】を選択
  6. テキストボックス(TextBox1)の値により処理を分岐させるSelect Caseステートメントを使用する
  7. テキストボックスの値が1の場合
  8. 表示されているシートを1ページ目から2ページ目を1枚、部単位で印刷
  9. テキストボックスの値が2の場合
  10. 表示されているシートを1ページ目から2ページ目を2枚、部単位で印刷
  11. テキストボックスの値が3の場合
  12. 表示されているシートを1ページ目から2ページ目を3枚、部単位で印刷
  13. Select Caseステートメント終了
  14. Ifステートメント終了
  15. マクロ終了

このようにSelect Caseステートメントを使用すると上記記載した印刷枚数3枚までではなく10枚でも30枚でも書き続ければ可能なので、印刷したい時に必要印刷枚数が異なる場合でも、必要枚数が印刷できるので便利ですね。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?