Excel VBAを使うと、印刷時に特定のプリンターを指定して出力することが可能です。
特に、複数のプリンターを使いたい場合や、ネットワークプリンターを選択したい場合に便利です。
この記事では、VBAを使ってプリンターを指定しながら印刷する方法や、便利なカスタマイズ方法を解説します。
目次
デフォルトのプリンターを取得する
VBAでは、現在の既定のプリンター名を取得できます。
✅デフォルトのプリンターを取得
Sub GetActivePrinter()
Debug.Print "現在のプリンター: " & Application.ActivePrinter
End Sub
📌Debug.Printを使って、最新のプリンター名を即確認!
📌プリンター名を調べて、VBAで指定する際の参考に!
【VBA】デバック(Debug Print)で変数の中身の確認する方法
プリンターを指定して印刷
VBA でプリンターを指定するには、まずApplication.ActivePrinterでプリンター名を設定してからPrintOutを実行します。
✅ プリンターを指定して印刷
Sub PrintWithSpecificPrinter()
Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)
Application.ActivePrinter = printerName
ActiveSheet.PrintOut
End Sub
📌プリンター名はApplication.ActivePrinterで事前に確認!
📌Ne02:の部分は環境によって異なるため、GetActivePrinterで確認!
ユーザーにプリンターを選択させる
固定のプリンターを指定するのではなく、ユーザーがプリンターを選択できるようにすることも可能です。
✅InputBoxを使ってユーザーにプリンターを指定させる
Sub PrintWithUserSelectedPrinter()
Dim selectedPrinter As String
selectedPrinter = InputBox("使用するプリンター名を入力してください:", "プリンター選択")
If selectedPrinter <> "" Then
Application.ActivePrinter = selectedPrinter
ActiveSheet.PrintOut
Else
MsgBox "プリンターが指定されていません。", vbExclamation
End If
End Sub
📌ユーザーがプリンター名を入力し、指定したプリンターで印刷します!
📌間違ったプリンター名を入力するとエラーになるので注意してください!
プリンターの一覧を取得する
PCにインストールされているプリンターの一覧を取得したい場合は、WMIを使用します。
✅ プリンターの一覧を取得して表示
Sub GetPrinterList()
Dim objWMI As Object, objPrinter As Object
Dim printers As String
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * From Win32_Printer")
printers = "インストール済みのプリンター一覧:" & vbCrLf
For Each objPrinter In objWMI
printers = printers & objPrinter.Name & vbCrLf
Next objPrinter
MsgBox printers, vbInformation, "プリンター一覧"
End Sub
📌インストールされているプリンターの一覧をメッセージボックスで表示!
📌取得したプリンター名をActivePrinter設定すれば、任意のプリンターを指定可能!
特定のプリンターが利用可能か確認
ユーザーが指定したプリンターが本当に利用できるかどうかチェックする方法もあります。
✅ 指定したプリンターが存在するか確認
Function IsPrinterAvailable(printerName As String) As Boolean
Dim objWMI As Object, objPrinter As Object
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * From Win32_Printer")
For Each objPrinter In objWMI
If objPrinter.Name = printerName Then
IsPrinterAvailable = True
Exit Function
End If
Next objPrinter
IsPrinterAvailable = False
End Function
Sub PrintIfPrinterExists()
Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)
If IsPrinterAvailable(printerName) Then
Application.ActivePrinter = printerName
ActiveSheet.PrintOut
Else
MsgBox "指定したプリンターは見つかりません。", vbExclamation
End If
End Sub
📌プリンターが存在するかチェックしてから印刷!
📌利用不可のプリンターを設定してしまうのを防止!
両面印刷を指定
プリンターが両面印刷(両面)に対応している場合、VBAで指定できます。
✅ 両面印刷を設定して印刷
Sub PrintWithDuplex()
Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)
Application.ActivePrinter = printerName
Sheets.PrintOut Copies:=1, Collate:=True, Duplex:=True
End Sub
📌プリンターが両面印刷に対応している必要あります!
用紙サイズや印刷設定を適用する
印刷時に用紙サイズやレイアウトを調整することも可能です。
✅ A4用紙・横向き・1ページにて行って印刷
Sub PrintWithSettings()
Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)
Application.ActivePrinter = printerName
With ActiveSheet.PageSetup
.PaperSize = xlPaperA4 ' A4 に設定
.Orientation = xlLandscape ' 横向き
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveSheet.PrintOut
End Sub
📌用紙サイズ・向き・縮小設定を適用して印刷!
📌データも 1 大きなページにわかる!
まとめ
| 機能 | VBAコード |
|---|---|
| 現在のプリンターを取得 | Debug.Print Application.ActivePrinter |
| プリンターを指定して印刷 | Application.ActivePrinter = "プリンター名" |
| ユーザーにプリンターを選ばれる | InputBox見る |
| プリンターの一覧を取得 | Win32_Printerを WMI で取得 |
| プリンターの存在を確認 | IsPrinterAvailable見る |
| 両面印刷 | Duplex:=True |
| A4 / 横向き / 1ページに燃える | .PaperSize = xlPaperA4, .Orientation = xlLandscape |
おすすめの活用方法
✅ VBA でプリンターを指定すれば、印刷ミスを防ぐ!
✅プリンターの一覧を取得し、動的に設定すると便利!
✅PrintPreviewを活用すれば、意図的に印刷を防止できる!