VBAでプリンターを指定して印刷する方法|名前指定・PDF・トラブル回避まで解説

VBAでプリンターを指定して印刷する方法|名前指定・PDF・トラブル回避まで解説

本記事には広告(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
Application.ActivePrinterでプリンター名とポート名を指定して印刷するVBAの基本コード例
プリンター名とポート名を指定して印刷する、VBAの基本的なコード例です

一見すると、
「プリンター名を指定するだけで簡単そう」
に見えるかもしれません。

しかし実際には、次のような点でつまずきやすくなります。

  • プリンター名は 完全一致 が必要

  • 「on USB001」「on Ne03:」など
    ポート名まで含める必要がある

  • 表示名と実際の内部名が一致しない場合がある

初心者の方が
「コードは合っているはずなのに動かない」
と感じやすいポイントでもあります。

プリンター名を調べる方法

VBAでプリンターを指定する場合、「プリンター名 on ポート名」 を正確に指定する必要があります。

ただしここで注意したいのが、
Windowsの画面で見えているプリンター名・ポート名を入れても、
Excelが受け付ける文字列と一致せず、エラー(1004)になることがある 点です。

特にネットワークプリンター(Brotherなど)では、

  • Ne01: のような表記で通る場合

  • BRWxxxxxxxxxxxx のような表記になってエラーになる場合

があり、環境によって結果が変わります。

そこで初心者の方におすすめなのが、
Excel自身に「正解の文字列」を教えてもらう方法です。


イミディエイトウィンドウで確認する

  1. Excelで 印刷したいプリンターを選んだ状態 にします
    (ファイル → 印刷 でプリンターを選ぶだけでもOK)

  2. VBAの画面(VBE)を開きます

    • [開発]タブ → [Visual Basic] をクリック
      (Windows:Alt + F11)

      Excelの[開発]タブから[Visual Basic]をクリックしてVBAエディターを開く操作画面
      [開発]タブ → [Visual Basic]をクリックすると、VBAエディターを開けます(Alt + F11でも可)
  3. イミディエイトウィンドウを表示します

    • [表示]タブ → [イミディエイトウィンドウ]をクリック
      (Ctrl + G)

      VBAエディターの[表示]メニューから[イミディエイトウィンドウ]を開く操作画面
      VBEの[表示]→[イミディエイトウィンドウ]で確認用のウィンドウを表示します(Ctrl + G)
  4. 次の1行を入力して Enter を押します

? Application.ActivePrinter

すると、Excelが認識している
「そのまま指定に使える文字列」 が表示されます。

イミディエイトウィンドウで「? Application.ActivePrinter」を実行し、Excelが認識しているプリンター名を確認している画面
「? 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
VBAでWin32_Printerを使い、プリンター名とポート名をイミディエイトウィンドウに一覧表示している画面
WMIを使って、PCに登録されているプリンター一覧を取得した例(イミディエイトウィンドウに表示)

このコードを実行すると、
現在の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
VBAでMicrosoft Print to PDFを指定して印刷し、PDFの保存先とファイル名を選択している画面
Microsoft Print to PDF を指定した場合、印刷時に保存ダイアログが表示される

この方法は、

  • 印刷ミスが起こりにくい

  • 帳票の保存・共有に向いている

といったメリットがあります。

一方で、

  • 保存先を自動指定しづらい

  • 環境によってポート名が異なる

といった制約もあります。

そのため、
「完全自動でPDF保存したい」場合は、
別の方法(ExportAsFixedFormatなど)を検討した方が安全なケースもあります。


印刷ダイアログを強制表示してミスを防ぐ方法

実務で特におすすめなのが、
あえて印刷ダイアログを表示する方法 です。

Application.Dialogs(xlDialogPrint).Show
VBAで印刷ダイアログを表示する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
Excelのプリンター設定ダイアログで、使用するプリンターを選択している画面
プリンターの設定ダイアログでは、プリンターを目で確認してから実行できる

このコードでは、

・プリンター選択でキャンセルした場合は何も起きない
・選択後に確認メッセージを表示
・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出力などを段階的に試していくのがよいでしょう。

【関連記事】

印刷マクロをさらに理解したい方は、以下の記事も参考になります。

※外部リンク※

※おすすめの動画講座 (PR)

プリンター指定や印刷自動化だけでなく、
PDF出力やファイル分割までまとめて学びたい方は、
実務向けに解説されている以下の動画講座も参考になります。

※本リンクはアフィリエイト(PR)を含みます。

※参考書籍 (PR)

※本ボックスにはアフィリエイトリンク(PR)が含まれます。
くわしくは プライバシーポリシー へ。

VBAでプリンターを指定して印刷する方法|名前指定・PDF・トラブル回避まで解説
最新情報をチェックしよう!