本記事には広告(PR)が含まれます。
くわしくは プライバシーポリシー をご確認ください。
ExcelのVBAを使って印刷を自動化できるようになると、
帳票作成や定型業務がぐっと楽になります。
一方で、マクロで印刷処理を組んだあとに
「プリンターの指定でつまずく」 という壁に当たる方も多いのではないでしょうか。
たとえば、
-
プリンターを間違えて印刷してしまう
-
裏紙のつもりが新品の用紙に出てしまう
-
手差しで色紙に印刷したかったのに、通常トレイで出てしまう
といった 印刷まわりのミス は、実務では意外と起こりがちです。
私自身、プリンターごとに
裏紙・新品のコピー用紙・手差し印刷を使い分ける環境で作業していたため、
慌ててそのまま印刷してしまい、ミスプリを出してしまうことが何度もありました。
そこで
「VBAでプリンターを指定できれば防げるのでは?」
と考え、実際にいくつかの方法を試してみました。
ところが、プリンター名やサーバー名が変更される環境では、
思ったように安定しないケースも多い ことが分かってきます。
この記事では、
-
VBAでプリンターを指定する基本的な考え方
-
プリンター名指定で起こりやすい問題点
-
実務でミスを減らすための現実的な対処法
を、VBA初心者の方にもわかりやすく整理して解説していきます。
「自動化したつもりなのに、かえって印刷が怖くなった」
そんな経験がある方は、ぜひ最後まで読んでみてください。
VBAでプリンターを指定して印刷する基本
VBAで「プリンター指定」が必要になる場面とは
Excelマクロで印刷処理を自動化すると、
ボタンひとつで帳票を印刷できるようになり、作業効率は大きく向上します。
しかし実務では、次のようなケースも少なくありません。
-
プリンターごとに 用途が決まっている
(裏紙用・新品用・色紙用など) -
通常トレイとは別に 手差しトレイ を使う必要がある
-
PDF出力用のプリンターを使い分けたい
このような環境では、
「どのプリンターで印刷するか」を人の判断に任せていると、
どうしても 操作ミスが起きやすくなります。
そこで、
VBAでプリンターを指定できれば、
印刷ミスを減らせるのでは?
と考える方が多いわけです。
Excel VBAでプリンターを指定する仕組み
Excel VBAでプリンターを指定する場合、
基本的には ActivePrinter プロパティ を利用します。
Excelは、
「現在アクティブになっているプリンター」を基準に印刷を行う仕組みになっており、
VBAからもその設定を一時的に変更できます。
ポイントは次の2点です。
-
Excel単体でプリンターを管理しているわけではない
-
Windowsに登録されているプリンター情報を参照している
つまり、VBAで指定できるプリンターは
OS側で認識されているプリンターのみ ということになります。
プリンター名を指定して印刷する基本コード
最もよく紹介されているのが、
プリンター名を直接指定する方法です。
Application.ActivePrinter = "プリンター名 on ポート名"
ActiveSheet.PrintOut

一見すると、
「プリンター名を指定するだけで簡単そう」
に見えるかもしれません。
しかし実際には、次のような点でつまずきやすくなります。
-
プリンター名は 完全一致 が必要
-
「on USB001」「on Ne03:」など
ポート名まで含める必要がある -
表示名と実際の内部名が一致しない場合がある
初心者の方が
「コードは合っているはずなのに動かない」
と感じやすいポイントでもあります。
プリンター名を調べる方法
VBAでプリンターを指定する場合、「プリンター名 on ポート名」 を正確に指定する必要があります。
ただしここで注意したいのが、
Windowsの画面で見えているプリンター名・ポート名を入れても、
Excelが受け付ける文字列と一致せず、エラー(1004)になることがある 点です。
特にネットワークプリンター(Brotherなど)では、
-
Ne01:のような表記で通る場合 -
BRWxxxxxxxxxxxxのような表記になってエラーになる場合
があり、環境によって結果が変わります。
そこで初心者の方におすすめなのが、
Excel自身に「正解の文字列」を教えてもらう方法です。
イミディエイトウィンドウで確認する
-
Excelで 印刷したいプリンターを選んだ状態 にします
(ファイル → 印刷 でプリンターを選ぶだけでもOK) -
VBAの画面(VBE)を開きます
-
[開発]タブ → [Visual Basic] をクリック
(Windows:Alt + F11)![Excelの[開発]タブから[Visual Basic]をクリックしてVBAエディターを開く操作画面](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsAQAAAABRBrPYAAAAAnRSTlMAAHaTzTgAAAAiSURBVGje7cExAQAAAMKg9U9tCj+gAAAAAAAAAAAAAAB4GS20AAH/6QlrAAAAAElFTkSuQmCC)
[開発]タブ → [Visual Basic]をクリックすると、VBAエディターを開けます(Alt + F11でも可)
-
-
イミディエイトウィンドウを表示します
-
[表示]タブ → [イミディエイトウィンドウ]をクリック
(Ctrl + G)![VBAエディターの[表示]メニューから[イミディエイトウィンドウ]を開く操作画面](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsAQAAAABRBrPYAAAAAnRSTlMAAHaTzTgAAAAiSURBVGje7cExAQAAAMKg9U9tCj+gAAAAAAAAAAAAAAB4GS20AAH/6QlrAAAAAElFTkSuQmCC)
VBEの[表示]→[イミディエイトウィンドウ]で確認用のウィンドウを表示します(Ctrl + G)
-
-
次の1行を入力して Enter を押します
? Application.ActivePrinter
すると、Excelが認識している
「そのまま指定に使える文字列」 が表示されます。

例:
-
Brother DCP-XXXX Printer (1 コピー) on Ne01:
この表示結果を、次のように そのままコピペ するのが一番安全です。
Application.ActivePrinter = "(ここに表示結果をコピペ)"
ActiveSheet.PrintOut
※この記事では何度か「イミディエイトウィンドウで確認する」という話が出てきます。
これはプリンター指定が環境依存で不安定なため、最も確実な確認方法だからです。
補足:なぜこの方法が確実なの?
Application.ActivePrinter は、
「Windowsが登録している情報」ではなく、
Excelが内部で使っている印刷設定の文字列を返します。
そのため、
-
画面で見た名前を入れたらエラーになった
-
ポート名が合っているはずなのに動かない
といった場合でも、
Excelが受け付ける正解の形式を確認できる というわけです。
プリンター名指定が不安定になりやすい理由
実務環境では、プリンター名を固定指定する方法が
うまくいかなくなるケース も珍しくありません。
代表的な原因は次のとおりです。
-
プリンターの再インストールで名前が変わる
-
サーバー名や共有名が変更される
-
拠点・PCごとにプリンター構成が異なる
-
管理者権限で設定が変更される
このような環境では、
「昨日まで動いていたマクロが、今日はエラーになる」
といった状況が起こりやすくなります。
そのため、
-
個人PCだけで使うマクロ
-
環境が固定されている業務
であれば有効でも、
複数人・複数PCで使うマクロでは注意が必要 です。
「指定できる」と「安全に使える」は別問題
VBAでは確かにプリンターを指定できます。
ただしそれは、
技術的に可能
= 実務で安全に使える
とは限りません。
ここを理解せずに
「完全自動化」を目指してしまうと、
かえって印刷トラブルが増えてしまうこともあります。
次の章では、
-
プリンター一覧の取得
-
PDFプリンター指定
-
あえて印刷ダイアログを表示する方法
など、実務で現実的に使いやすい対処法 を順番に見ていきます。
実務で安全に使うプリンター指定テクニック
ここからは、
「VBAでプリンターを指定できるかどうか」ではなく、
実務でミスを減らし、安心して使えるか という視点で解説していきます。
プリンター一覧を取得して確認する方法
VBAでは、Windowsに登録されているプリンター一覧を取得することも可能です。
代表的なのは、WMI(Windows Management Instrumentation)を使う方法です。
※この方法で取得できるプリンター名も、そのまま指定に使えるとは限りません。
実際に指定する際は、イミディエイトウィンドウで ActivePrinter を確認してください。
Sub ListPrintersWithPort()
Dim objWMI As Object, printers As Object, p As Object
Set objWMI = GetObject("winmgmts:")
Set printers = objWMI.InstancesOf("Win32_Printer")
For Each p In printers
Debug.Print p.Name & " | Port=" & p.PortName
Next
End Sub

このコードを実行すると、
現在のPCで認識されているプリンター名が一覧で表示されます。
ただし注意点もあります。
-
コードがやや難しく、初心者にはハードルが高い
-
PCや権限によって取得結果が変わる
-
取得できても そのまま指定して安定するとは限らない
この方法は「自動指定」よりも、
- 環境確認
- トラブル調査
に向いた方法です。
後半の「ダイアログで選択→OKなら印刷」の方法も便利です。
PDFプリンターを指定して出力する方法
紙に出さず、PDFとして保存したい場合は
PDFプリンターを指定する方法もよく使われます。
代表的なのが
Microsoft Print to PDF です。
※ポート名(Ne01: など)は環境によって異なります。
必ず事前に ? Application.ActivePrinter で確認した文字列を使用してください。
Sub PrintPDF()
Application.ActivePrinter = "Microsoft Print to PDF on Ne03:"
ActiveSheet.PrintOut
End Sub

この方法は、
-
印刷ミスが起こりにくい
-
帳票の保存・共有に向いている
といったメリットがあります。
一方で、
-
保存先を自動指定しづらい
-
環境によってポート名が異なる
といった制約もあります。
そのため、
「完全自動でPDF保存したい」場合は、
別の方法(ExportAsFixedFormatなど)を検討した方が安全なケースもあります。
印刷ダイアログを強制表示してミスを防ぐ方法
実務で特におすすめなのが、
あえて印刷ダイアログを表示する方法 です。
Application.Dialogs(xlDialogPrint).Show

このコードを使うと、
マクロ実行時に必ず印刷ダイアログが表示されます。
一見すると「自動化としては中途半端」に感じるかもしれませんが、
次のようなメリットがあります。
-
プリンターを 目で確認できる
-
トレイ・部数・カラー設定を最終チェックできる
-
「勢いで印刷してしまう」事故を防げる
私自身、
プリンター名指定が不安定な環境では、
最終的にこの方法に落ち着きました。
一度立ち止まる仕組みを作る
それだけで、ミスプリは大きく減ります。
応用:プリンターを選ばせてから印刷する
印刷ダイアログを表示する方法は安全ですが、
「選んだあと、そのまま印刷まで進めたい」
と感じる方もいるかもしれません。
そんな場合は、
プリンターを選ばせたあとに「印刷するかどうか」を確認し、
OKのときだけ印刷する方法もあります。
Sub PrintWithPrinterSetup()
' プリンター設定ダイアログを表示
' OK:True / キャンセル:False
If Not Application.Dialogs(xlDialogPrinterSetup).Show Then
Exit Sub
End If
' 最終確認
If MsgBox(Application.ActivePrinter & vbCrLf & vbCrLf & _
"このプリンターで印刷しますか?", _
vbOKCancel + vbQuestion, "印刷の確認") = vbOK Then
ActiveSheet.PrintOut
End If
End Sub

このコードでは、
・プリンター選択でキャンセルした場合は何も起きない
・選択後に確認メッセージを表示
・OKを押したときだけ印刷
という流れになります。
なぜこの方法が実務向きなのか
この方法のポイントは、
完全自動化と手動確認のバランス にあります。
・プリンター選択は人が行う
・実際に印刷するかどうかも最終確認する
この2段階を入れることで、
「意図しないプリンターで印刷された」
「キャンセルしたつもりなのに印刷された」
といった事故を防ぎやすくなります。
印刷ダイアログ表示との使い分け
・部数やトレイ設定も毎回確認したい
→ xlDialogPrint を使う方法がおすすめ
・プリンター選択だけ確認できれば十分
→ 今回の応用コードが便利
環境や運用に合わせて、
「止める位置」を選ぶ のが大切です。
プリンター指定でよくあるトラブルと注意点
プリンター指定まわりで、よくあるトラブルには次のようなものがあります。
-
他人のPCではエラーになる
-
プリンターが変わった途端に動かなくなる
-
管理者変更後に突然失敗する
特に注意したいのが、
-
マクロを 複数人で使う
-
部署・拠点をまたいで配布する
といったケースです。
この場合、
「完全自動で指定する」よりも
確認ステップを残す設計 の方が結果的に安全です。
プリンターのトレイ(手差しなど)をVBAで指定することはできる?
「手差しトレイに切り替えて印刷したい」
「上段・下段トレイをVBAで指定できないか」
このように考える方も多いですが、
Excel VBA単体では、プリンターのトレイを確実に指定する公式な方法はありません。
Excel VBAの印刷設定で制御できるのは、
-
用紙サイズ
-
向き(縦・横)
-
拡大縮小
-
余白
といった Excel側のページ設定まで です。
一方で、
-
手差しトレイ
-
給紙カセット
-
トレイ番号
といった設定は プリンター固有の機能 にあたり、
VBAから直接コントロールすることはできません。
「できた」という情報がある理由
インターネット上では、
「VBAで手差しトレイにできた」「設定次第で可能」
といった情報を見かけることがあります。
これは主に次のようなケースです。
-
プリンタードライバが直前の設定を記憶している
-
手差し設定済みの状態で印刷した結果、たまたま動いた
-
同一プリンターを別名で登録して使い分けている
いずれも VBAでトレイを指定しているわけではなく、
プリンタードライバの挙動に依存している状態 です。
そのため、
-
PCが変わる
-
プリンターが再設定される
-
他の人が使う
といった状況では、
同じ結果にならない可能性が高くなります。
実務でおすすめの考え方
トレイ指定が必要な印刷(手差し・色紙など)の場合は、
-
VBAで完全自動化しようとしない
-
印刷ダイアログを表示して最終確認する
という運用の方が、結果的に安全です。
印刷前にダイアログを表示して、
「トレイ指定は人が確認する」
この一手間を入れるだけで、
ミスプリや用紙トラブルを大きく減らすことができます。
結局どの方法を選ぶべきか?
最後に、初心者向けに考え方をまとめます。
-
環境が固定・個人利用
→ プリンター名指定も検討可 -
PDF保存が目的
→ PDF出力専用の方法を検討 -
複数人・実務利用・ミス防止重視
→ 印刷ダイアログ表示が最も安全
VBAでの印刷自動化は、
「どこまで自動化するか」の見極めがとても重要です。
完璧な自動化より、事故らない仕組み。
これが、プリンター指定で失敗しにくくする一番のポイントだと思います。
まとめ
VBAを使えば、Excelの印刷処理はかなり自動化できます。
しかし、プリンター指定については、
-
技術的に「できること」
-
実務で「安全に使えること」
が必ずしも一致しない点に注意が必要です。
プリンター名を直接指定する方法は、
環境が固定されていれば有効な場合もありますが、
-
プリンター名やポートの変更
-
PCや利用者の違い
といった要因で、動かなくなることも少なくありません。
また、手差しトレイなどの 給紙方法の指定 は、
Excel VBAから確実に制御できる公式な方法がなく、
プリンタードライバ依存になりやすいのが実情です。
そのため実務では、
-
完全自動化にこだわりすぎない
-
印刷前に確認できる仕組みを残す
といった考え方が重要になります。
特に、
「印刷ダイアログを表示して、最終確認を行う」
という運用は、
ミスプリや用紙トラブルを大きく減らせる現実的な対策です。
完璧な自動化より、事故らない仕組み。
この記事が、VBAでの印刷まわりのトラブルを減らすヒントになれば幸いです。
FAQ(よくある質問)
Q1:VBAでプリンターのトレイ(手差しなど)を指定できますか?
A:Excel VBA単体では、確実に指定する公式な方法はありません。
一部の環境では動いているように見える場合もありますが、
プリンタードライバの挙動に依存しているケースがほとんどです。
実務では、
印刷ダイアログを表示して人が確認する運用の方が安全です。
Q2:PDFプリンターを指定して自動でPDF保存できますか?
A:PDFプリンターを指定して印刷することは可能ですが、注意が必要です。
「Microsoft Print to PDF」などを指定すればPDF化できますが、
-
保存先を自動指定しづらい
-
ポート名が環境によって異なる
といった制約があります。
PDFとして保存したい場合は、ExportAsFixedFormat など、PDF出力専用の方法も検討すると安心です。
Q3:他人のPCでマクロが動かないのはなぜですか?
A:プリンター構成や名称が異なる可能性があります。
プリンター名・ポート名・既定のプリンター設定は、
PCごとに異なることが多く、
それが原因でエラーになるケースは珍しくありません。
複数人で使うマクロでは、
プリンターを固定指定しすぎない設計がおすすめです。
Q4:完全に自動で印刷したいのですが、やめたほうがいいですか?
A:業務内容によりますが、慎重に判断した方がよいです。
環境が固定されている場合は問題ありませんが、
用紙やトレイを使い分ける業務では、
-
最終確認を入れる
-
あえて人の判断を残す
方が、結果的にミスが減ることも多いです。
Q5:初心者にはどの方法がおすすめですか?
A:まずは印刷ダイアログを表示する方法がおすすめです。
プリンターや設定を目で確認できるため、
安心してマクロを使い始めることができます。
慣れてきたら、
プリンター指定やPDF出力などを段階的に試していくのがよいでしょう。
【関連記事】
印刷マクロをさらに理解したい方は、以下の記事も参考になります。
- Excelでマクロで印刷する方法まとめ|ボタン作成・連続印刷・設定の基本と応用を紹介
- Excelでマクロで値を変えながら連続印刷する方法|差し込み印刷のように自動化しよう
- マクロのステップインとは?初心者でもわかるVBAのデバッグ基本操作を解説
※外部リンク※
※おすすめの動画講座 (PR)※
プリンター指定や印刷自動化だけでなく、
PDF出力やファイル分割までまとめて学びたい方は、
実務向けに解説されている以下の動画講座も参考になります。
※本リンクはアフィリエイト(PR)を含みます。
※参考書籍 (PR)※
※本ボックスにはアフィリエイトリンク(PR)が含まれます。
くわしくは プライバシーポリシー へ。
