印刷開始ページと終了ページと枚数をセルの値にリンク・取得するVBA

開始・終了・枚数セル値取得印刷

エクセルVBAを利用しているならば、印刷を開始するページ番号「From」・印刷を終了するページ番号「To」、そして印刷枚数「Copies」を入力して印刷するのも面倒なので、自動化したいと思いませんか?

FromもToもCopiesも数字でVBAコードを記載するのではなく、セルの値を取得させることで自動化できるようになります。

目次

VBAでの印刷

基本のVBA印刷

印刷をVBAで行うにはPrintOutメソッドを使用し、下の図のような「印刷ダイアログボックス」で設定できることは、このPrintOutメソッドを使う事でVBAコードで設定することができます。

印刷ダイアログボックス

印刷VBAコードですが、現在表示中のシートで1ページ目~2ページ目を1枚印刷するVBAコードはこのように書きます。

表示中のシートを印刷するVBA

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut FROM:=1, To:=2, COPIES:=1, COLLATE:=True
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 現在表示中のシートを選択して1ページ目から2ページ目を1枚ずつ部単位で印刷する
  3. マクロ記録終了

これで印刷できますが、もしお使いのプリンターが両面印刷対応機種ならば、プリンターの設定により1枚の紙に両面印刷できますが、そうでない場合は2枚出ますよね。

残念ながらVBAでプリンターの両面印刷を指定することはできませんので、ダイアログを表示させるVBAコードで設定できるようにしましょう。

セルの値から印刷ページ・枚数を取得して印刷

それではやりたいセルの値で印刷開始ページ・印刷終了ページ・印刷枚数を取得して印刷できるようにする方法です。

結論は、From,To,Copiesの数字をセル番地にするだけです。

  • 印刷開始ページ「1」をシート名「sheet1」のセル「A1」から取得
  • 印刷終了ページ「2」をシート名「sheet1」のセル「B1」から取得
  • 印刷枚数を「1」をシート名「sheet」のセル「C1」から取得

先ほどのVBAコードの例を参考に数字をセル番地に変えたVBAコードが下記の通りです。

印刷引数をセル番地に変更したVBA

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut FROM:=Sheets(“sheet1”).Range(“A1”).Value, To:=Sheets(“sheet1”).Range(“B1”).Value, COPIES:=Sheets(“sheet1”).Range(“C1”).Value, COLLATE:=True
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 現在表示中のシートで開始ページはシート1のセルA1の値、終了ページはシート1のセルB1の値、印刷枚数はシート1のセルC1の値で部単位で印刷する
  3. マクロ記録終了

これで、印刷開始・印刷終了・印刷ページ数をセルの値から取得して印刷して使っています。

このままでも目的の印刷ができるのですが、誤ってコマンドボタンを押してしまうと印刷が始まってしまいます。

そこで誤操作防止のために「印刷しますか?」ってメッセージを表示させて「はい」をクリックしたら印刷が開始されるようにした方が紙の無駄が無くなるので安心です。

メッセージを追加して印刷ページをセルから取得

Private Sub CommandButton1_Click()
msg = MsgBox(“印刷実行しますか?”, Buttons:=vbYesNo + vbExclamation)
If msg = vbYes Then
ActiveWindow.SelectedSheets.PrintOut FROM:=Sheets(“sheet1”).Range(“A1”).Value, To:=Sheets(“sheet1”).Range(“B1”).Value, COPIES:=Sheets(“sheet1”).Range(“C1”).Value, COLLATE:=True
Else
MsgBox “印刷を中止しました”
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 「はい」「いいえ」を選択するメッセージを表示する
  3. もし「はい」がクリックされたら
  4. 現在表示中のシートで開始ページはシート1のセルA1の値、終了ページはシート1のセルB1の値、印刷枚数はシート1のセルC1の値で部単位で印刷する
  5. そうでなかったら(いいえを選択)
  6. 「印刷を中止しました」と表示する
  7. IFステートメント終了
  8. マクロ記録終了

これで、コマンドボタンが押されたらメッセージで「印刷しますか?」とメッセージが表示されます。

「はい」を選択すると印刷が始まり「いいえ」を選択すると「印刷を中止しました」と再度メッセージが表示されるようになり、誤って印刷してしまう事が無くなるので、印刷ボタンを作ったらこのようにエラー防止するVBAコードを付けた方が安心ですね。

今回は印刷開始ページ・印刷終了ページ・印刷枚数をセルの値から取得する方法を書きましたが、印刷枚数だけテキストボックスを利用する方法が実際多いですよ。

印刷と言えば、住所録や顧客名簿から差し込み印刷ができるようになれば、作業効率が大幅にアップします。

メッセージ機能とIFステートメントと繰り返し処理を組み合わせる事により、エクセルからエクセルへの差し込み印刷ができるので、ぜひ活用してください。

目次