調べたいExcel-VBAの使用例などキーワードを入力してください

印刷開始と終了と枚数をセルの値にリンクさせる

printout印刷
セルの値を取得して印刷開始・終了・ページ数自動反映
スポンサーリンク

印刷する時にセルに計算された数字を反映して印刷枚数を自動的に取得たいと思いませんか

例えば、参加人数の合計が20人となっているセルの値を取得して、ユーザーフォームに配置したコマンドボタン(印刷ボタン)を押すと自動的に20枚印刷出来たら便利ですよね。

ついでに、印刷開始ページや印刷終了ページも同じくセルの値から取得できれば、いろいろ応用ができますよね。

スポンサーリンク

VBAでの印刷

印刷の基本

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

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

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

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

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

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

残念ながら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

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

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

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

このままでも目的の印刷ができるのですが、誤ってコマンドボタンを押してしまうと印刷が始まってしまうので、誤操作防止のために「印刷しますか?」ってメッセージを表示させた方が紙の無駄が無くなるので安心です。

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

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

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

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

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

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

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

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

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

スポンサーリンク

印刷関連VBA

スポンサーリンク
ボタン1つで作業完了へ
ちょっとの工夫でエクセル作業が飛躍的に早く終わったらいいなあ~と思いませんか? 面倒くさい作業よ!さようなら!

スポンサーリンク


印刷
参考になりましたらシェア宜しくお願い致します

山頂テラスデッキからの三段紅葉(2019年11月)

フリーパスって助成金つぎ込んでいいの?

コロナ禍のGo To トラベル以外にも助成金だらけでうらやましいね。

安くなったフリーパスで遊びに行きたいけど、給与も減って余裕ないよね。

Excel VBA