【VBA印刷入門】PDF変換・印刷範囲指定・自動印刷のやり方まとめ|実務で使えるサンプル付き

VBA & Excel
スポンサーリンク

Excelで作業していて、ふと気づくことがあります。

「あれ?これ、昨日も…いや一昨日もやってない?」

毎日のように同じ帳票を開いて、印刷範囲を調整して、PDFにして保存して、メールに添付して…。

そう、もはや“印刷ボット”状態です。(しかも残業つき)

そんなある日、「もっと楽する方法ないのかな…」とVBAに出会いました。

最初はちょっと難しそうに見えたけれど、触ってみるとExcelの中で一番やさしい味方かも?と思えるようになりました。

この記事では、そんな経験をベースに「VBAで印刷やPDF保存を自動化する方法」をまとめています。 やることは毎日同じでも、やり方は変えられる!

「印刷のたびに心をすり減らしてるかも…」と感じている方に届きますように!

スポンサーリンク
  1. はじめに|VBAで印刷やPDF化するメリットとは?
    1. 印刷やPDF処理って、こんなに“あるある”が多い!
    2. なぜ「VBAで印刷制御」を覚えるとラクになるの?
  2. まずは印刷の基本をおさえよう!|PrintOutの書き方
    1. ① 基本の書き方はこれ!
    2. ② より細かく制御したいときの構文は?
    3. ③ どのシートを印刷するのか?指定ミスに注意!
    4. おまけ:印刷プレビューを表示するには?
  3. ここが重要!印刷範囲・レイアウトの指定方法
    1. ① 印刷範囲の指定:見せたいとこだけをしっかり印刷!
    2. ② ページ余白・向き・サイズを整えて読みやすさUP!
    3. ③ ページの拡大縮小で「1ページに収める」
    4. ④ ヘッダー・フッターで情報を加える
    5. まとめ:レイアウト制御こそ「見た目の安心」をつくる!
  4. PDFに変換して保存する方法|ExportAsFixedFormat
    1. ① ExportAsFixedFormatの基本構文
    2. ② 保存フォルダ・ファイル名を変数で管理する例
    3. ③ 複数シートのPDF化や、全ブック一括出力も可能!
    4. ④ よくある落とし穴とその対策
    5. 実務向けサンプルの流れをまとめると…
  5. 保存後にメール添付やログ記録もできる!(応用編)
    1. ① Outlookと連携してPDFをメール添付で送信!
    2. ② 保存処理のログをワークシートに記録!
    3. ③ 保存も送信も終わったら、ひとことメッセージで安心を
    4. 応用のヒント:宛先やメール内容を動的に切り替える
  6. よくあるエラーとその解決法
    1. エラー①:保存先フォルダが存在しない(エラー76)
    2. エラー②:ファイル名に使えない文字が含まれている(エラー5, 1004)
    3. エラー③:PDF出力で指定したパスが不正(エラー1004)
    4. エラー④:Outlook送信時に「オブジェクトが設定されていません」
    5. 補足:エラー発生時のユーザーへの伝え方も大事!
  7. まとめ
    1. 記事のおさらい

はじめに|VBAで印刷やPDF化するメリットとは?

Excel作業をしていて「今日もまたこの帳票をPDF化して、保存して、メール添付して…」 気づけば印刷オペレーター兼PDF職人になっていた——

そんな瞬間ってありませんか?

私自身、毎日まるでルーティンゲームのように同じ操作を繰り返しているうちに、ふと思いました。

「これ、もしかして全部…VBAにお願いできるのでは?」

そして、ちょっとずつVBAに仕事を渡し始めた結果、

  • 印刷範囲がズレる問題ともおさらば!
  • PDF保存ミスや名前の付け間違いもゼロに!
  • 印刷完了後に「送信済みです」と自分で言いたくなるような達成感!

VBAは、ただのコードではなく、私にとっては心の平穏を守ってくれる業務の味方です。

印刷やPDF処理って、こんなに“あるある”が多い!

たとえば──

悩みあるあるVBAでの解決法
印刷したら用紙が切れてる…PageSetup で印刷範囲&用紙サイズ調整
毎回手動でPDFに保存…ExportAsFixedFormat で自動PDF出力
保存先の指定を毎回やり直すパス&ファイル名をコードで一括指定
送信するまでが面倒くさい保存→メール添付→送信 まで自動化可能!

なぜ「VBAで印刷制御」を覚えるとラクになるの?

  • 印刷設定をコードにしておけば、毎回同じ結果が出せる(再現性◎)
  • “作業のゆらぎ”や“ヒューマンエラー”をなくせる
  • 紙・PDF・保存・送信…すべてが“ひとつのボタン”で完了することも!

つまり、VBAで印刷やPDF保存を自動化することは、作業ストレスの根っこを絶つことにもつながるんです✨

この記事では、そんな「印刷まわりのルーティン業務」をVBAでやさしく・確実に効率化する方法をまとめました!

第2章からは、いよいよ実際のコードと一緒に、

  • 印刷の基本
  • 範囲の指定
  • PDF化&保存処理

といった内容をステップごとに解説していきます!

まずは印刷の基本をおさえよう!|PrintOutの書き方

VBAで印刷を制御する際に使う最も基本的なメソッドは、ズバリ PrintOut。

たった1行で印刷ができちゃう、とてもパワフルなコマンドです。

① 基本の書き方はこれ!

Sheet1.PrintOut

はい、これだけです(笑)

このコードは、Sheet1 をデフォルトプリンターで1部印刷してくれます。

シンプルだけど注意点:

  • 対象のシートを間違えると、意図しない内容を印刷する恐れがある
  • 複数部印刷やページ指定が必要なら、オプション設定も検討しましょう!

② より細かく制御したいときの構文は?

PrintOut にはいくつもの引数(オプション)が用意されており、自分好みにカスタマイズできます。

Sheet1.PrintOut _
    From:=1, To:=2, _
    Copies:=3, _
    Collate:=True, _
    IgnorePrintAreas:=False
引数名意味よく使う?
From / To印刷する開始ページ・終了ページ
Copies 印刷部数(例:3部)
Collate印刷時にページ順をまとめる(丁合)
IgnorePrintAreas 印刷範囲の指定を無視するかどうか

ポイント:「印刷範囲を指定済みなら IgnorePrintAreas:=False にするとそのまま使える」など、紙の節約にもなる設定です!

③ どのシートを印刷するのか?指定ミスに注意!

  • ActiveSheet.PrintOut → アクティブなシートを印刷
  • Worksheets(“請求書”).PrintOut → 名前を指定して印刷
  • Sheets(Array(“Sheet1”, “Sheet2”)).PrintOut → 複数シートをまとめて印刷

おすすめは、シート名などで明示的に指定すること!

「気づいたら違うシートを印刷してた…」を防げます。

おまけ:印刷プレビューを表示するには?

印刷前に「ちゃんと印刷されそうか確認したい…」という方に。

Sheet1.PrintPreview

この1行で印刷プレビューが表示されます!安心して「本当にこの状態で出して大丈夫?」をチェックできます。

印刷そのものはできるようになったけど、 「表が途中で切れてる!」「余白が広すぎる!」「横向きで印刷したかったのに!」などの“印刷あるある”はまだまだ解決すべき課題です。

次章では、PageSetupを活用して印刷範囲やページ設定を思い通りにカスタマイズする方法を紹介していきます。

ここが重要!印刷範囲・レイアウトの指定方法

印刷してみたら、

「列が切れて2ページ目に続いてる…」

「印刷範囲が広すぎて真っ白の紙が出てきた…」

そんな“VBAあるある印刷事故”に心当たりはありませんか?

実は、きれいに印刷するには「レイアウト設定」が超重要ポイントなんです!

この章では、PageSetup プロパティを使って、印刷範囲・用紙サイズ・レイアウト調整などを自動化する方法をご紹介します。

① 印刷範囲の指定:見せたいとこだけをしっかり印刷!

印刷範囲を事前にシートに設定しておくのもアリですが、VBAで動的に指定することで、対象データが変わっても安心です。

With Worksheets("売上表").PageSetup
    .PrintArea = "A1:G30"
End With

このコードで「A1~G30」が印刷範囲になります。

可変データに対応したいときは、変数で範囲を組み立てるのもおすすめ!

② ページ余白・向き・サイズを整えて読みやすさUP!

With Worksheets("売上表").PageSetup
    .Orientation = xlLandscape         ' 横向き
    .PaperSize = xlPaperA4             ' A4用紙
    .LeftMargin = Application.InchesToPoints(0.5)
    .RightMargin = Application.InchesToPoints(0.5)
    .TopMargin = Application.InchesToPoints(0.7)
    .BottomMargin = Application.InchesToPoints(0.7)
End With
  • .Orientation → xlPortrait(縦) / xlLandscape(横)
  • .PaperSize → xlPaperA4 / xlPaperLetter など

InchesToPoints関数を使えば、「0.5インチの余白」など物理サイズで直感的に指定できます!

③ ページの拡大縮小で「1ページに収める」

表がほんの少しだけ2ページ目にはみ出す…。

そんなときは「縮小印刷で1ページに収める」のが便利!

With Worksheets("売上表").PageSetup
    .Zoom = False                      ' 拡大率は使わず、FitToPage優先
    .FitToPagesWide = 1               ' 横1ページに収める
    .FitToPagesTall = False           ' 縦は自動
End With

Zoom = False にすることで、「1ページに収めたい」優先になります。

実務でありがちな「ちょっとだけはみ出す!」もこれで解決。

④ ヘッダー・フッターで情報を加える

印刷物に日付やシート名・ページ番号を自動挿入したいときはこちら

With Worksheets("売上表").PageSetup
    .CenterHeader = "&D"                       ' 日付(Date)
    .RightFooter = "Page &P of &N"             ' ページ番号
    .LeftFooter = "&A"                         ' シート名
End With
  • &D → 日付
  • &P → 現在のページ
  • &N → 総ページ数
  • &A → シート名

ヘッダー・フッターに設定すると、帳票や提出資料の“きちんと感”がアップします!

まとめ:レイアウト制御こそ「見た目の安心」をつくる!

ただ印刷できるだけじゃなく、「見てわかりやすい」「読みやすい」印刷結果をつくることで、

  • 印刷後の修正が減る
  • 上司やお客さんに出すときも安心
  • なにより自分が誇れる仕上がりに!

ここまで設定できたら、そのきれいなレイアウトのままPDF化して保存したくなりませんか?

次章では、印刷設定と組み合わせて使える ExportAsFixedFormat の基本と応用をわかりやすく解説していきます!

PDFに変換して保存する方法|ExportAsFixedFormat

印刷設定が整ったら、

「このレイアウトのままPDFにして保存したい!」

「でも…わざわざPDFプリンタを手動で選ぶのは正直めんどくさい…」 そんな気持ちになること、ありませんか?

実は、VBAでは ExportAsFixedFormat メソッドを使えば、“シートの状態をそのままPDF化”して保存する処理がたった1行で実現できるんです!

① ExportAsFixedFormatの基本構文

Worksheets("売上表").ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="C:\保存先\売上表.pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False
引数意味
TypexlTypePDF または xlTypeXPS(PDFがほとんど)
Filename出力ファイルのフルパス
Quality標準 or 最小ファイルサイズ
IncludeDocPropertiesプロパティ情報を含めるか(タイトルや作成者など)
IgnorePrintAreas印刷範囲を無視して全体出力するか(通常はFalse推奨)

② 保存フォルダ・ファイル名を変数で管理する例

Dim folderPath As String
Dim fileName As String

folderPath = "C:\PDF出力\"
fileName = "請求書_" & Format(Date, "yyyymmdd") & ".pdf"

If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath

Worksheets("請求書").ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=folderPath & fileName

このようにすれば、保存先がなければ作成→今日の日付入りファイル名でPDF保存という一連の流れが完成します。

③ 複数シートのPDF化や、全ブック一括出力も可能!

Worksheets(Array("表紙", "明細")).Select
ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="C:\PDF出力\レポート一式.pdf"

複数シートを選択してから実行すれば、1つのPDFにまとめて出力もできます!

④ よくある落とし穴とその対策

現象原因 & 対策
保存できずにエラーになる保存先フォルダが存在しない → MkDirで事前作成
ファイルが上書きされてしまう同名ファイルが存在 → 上書き確認のMsgBoxを追加
印刷範囲が反映されないIgnorePrintAreasがTrueになっている可能性あり
ファイル名に使えない文字がある / \ : * ? " < > は使えない → 変換・除去する

実務向けサンプルの流れをまとめると…

  • 保存先フォルダの存在チェック&作成
  • ファイル名の自動生成(例:日付入り)
  • ExportAsFixedFormatでPDF出力
  • 保存完了メッセージ or メール添付につなげる(次章)

この一連の流れを覚えれば、「毎日同じ帳票をPDFにする」仕事が魔法のようにラクになりますよ。

PDFにできたら、次は“送信まで自動でやってくれたら最高!”という気持ちが芽生えませんか?

次章では、PDF保存のあとにOutlookで添付→メール送信する手順や、ログ出力なども含めて、保存処理の“あとひと押し”を自動化する方法を紹介していきます!

保存後にメール添付やログ記録もできる!(応用編)

PDFへの変換ができたら、次のステップは自然とこうなります:

「…で、そのファイル、誰に送るんだっけ?」

「あれ?この処理、やったの昨日?一昨日?」

印刷や保存が終わっても、報告や記録まで手動でやるのって、ちょっともったいない。

ここでは、保存後フローをまるごと自動化できる“仕上げのひと手間”をご紹介します!

① Outlookと連携してPDFをメール添付で送信!

Sub SendMailWithAttachment()

    Dim outlookApp As Object
    Dim mailItem As Object
    Dim pdfPath As String

    pdfPath = "C:\PDF出力\請求書_20250701.pdf"

    Set outlookApp = CreateObject("Outlook.Application")
    Set mailItem = outlookApp.CreateItem(0)

    With mailItem
        .To = "client@example.com"  ' ← 宛先は必要に応じて可変に
        .Subject = "請求書のご送付(自動送信)"
        .Body = "お世話になっております。請求書をPDFにて送付いたします。"
        .Attachments.Add pdfPath
        .Send
    End With

    Set mailItem = Nothing
    Set outlookApp = Nothing

End Sub

メール送信も自動化すれば、「PDFにして保存→送信まで1クリック」が実現します!

Outlookが開かれていないと実行できない点にだけ注意してくださいね。

② 保存処理のログをワークシートに記録!

Sub WriteLogToSheet()

    Dim logSheet As Worksheet
    Dim lastRow As Long

    Set logSheet = ThisWorkbook.Sheets("ログ") ' ←「ログ」シートを作っておく!

    lastRow = logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Row + 1

    logSheet.Cells(lastRow, 1).Value = Now
    logSheet.Cells(lastRow, 2).Value = "請求書を送信しました"
    logSheet.Cells(lastRow, 3).Value = Environ("Username")

End Sub

ユーザー名(ログイン中のアカウント)や日時を記録しておけば、「誰が・いつ・何を処理したか」の履歴が見える化できます。

③ 保存も送信も終わったら、ひとことメッセージで安心を

MsgBox "PDF保存とメール送信が完了しました!おつかれさまでした。", vbInformation, "処理完了"

小さな対話感のあるメッセージを加えるだけで、ユーザーの安心感がグッとアップします。

応用のヒント:宛先やメール内容を動的に切り替える

宛先アドレスを「シートから読み込む」

件名や本文に請求日や担当者名を組み込む など、実務に合わせて柔軟に展開できるのがVBAの強み!

たとえば:

.Subject = "請求書(" & Format(Date, "yyyy年m月d日") & ")"

ここまで来ると、「自動でやってくれてすごくラク!」となる一方、

「でも…送信時にエラーが出たらどうするの?」 という不安も出てくるかもしれません。

次章では、印刷・PDF保存・メール送信でありがちなエラー例と、その回避法・対策方法を実務目線でご紹介します!

よくあるエラーとその解決法

せっかくマクロが完成して「印刷も保存も送信もできたぞ!」と思ったその瞬間──

なぜかうまくいかない… いきなりエラーが出て止まってしまった…

そんな“悲しいVBAあるある”を防ぐために、この章では「よくあるエラー」と「安心の対策方法」をわかりやすくご紹介します。

エラー①:保存先フォルダが存在しない(エラー76)

メッセージ例:

実行時エラー ’76’: パスが見つかりません

原因:

  • 指定した保存先のフォルダが存在していない場合に発生。

対策:

If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath

保存前にフォルダの存在確認&必要なら作成する処理を必ず入れておきましょう!

エラー②:ファイル名に使えない文字が含まれている(エラー5, 1004)

NG例:

fileName = "請求書:山田.pdf" '← コロン「:」でエラー

対策:記号を置き換える or 除去!

fileName = Replace(fileName, ":", "-") ' ← 全角ハイフンなどに置き換え

Windowsのファイル名で使えない文字: / \ : * ? ” < > |

エラー③:PDF出力で指定したパスが不正(エラー1004)

原因パターン:

  • フォルダの末尾に\がない
  • ファイル名と拡張子が結合できていない

対策:

' OK例
Filename:=folderPath & "\" & fileName

ヒント: PathSeparator を使うとOSに依存せず処理できます

Filename:=folderPath & Application.PathSeparator & fileName

エラー④:Outlook送信時に「オブジェクトが設定されていません」

メッセージ例:

実行時エラー ’91’: オブジェクト変数または With ブロック変数が設定されていません

原因:

  • Outlookが起動していない、または変数が正しく設定されていない。

対策:

Set outlookApp = CreateObject("Outlook.Application")
If outlookApp Is Nothing Then
    MsgBox "Outlookが起動していません", vbExclamation
    Exit Sub
End If

Outlookが起動済みかを確認する処理を入れておくと安心!

補足:エラー発生時のユーザーへの伝え方も大事!

On Error GoTo エラー処理

' (処理内容)

Exit Sub

エラー処理:
MsgBox "処理中にエラーが発生しました:" & Err.Description, vbCritical

エラーが起きたときも、丁寧なメッセージがあるだけで“落ち着いて対処できる”ようになります。

ここまでのステップで、印刷 → PDF化 → メール送信までの“自動化マクロ”がかなり実践的なレベルに育ちました!

まとめ

ここまで長い記事を読んでいただき、本当にありがとうございました!

毎日のようにExcelで帳票を出力し、印刷設定に悩み、保存ミスに泣き、送信の手間に追われていた“過去の私”に向けて書いたこのVBAマクロの記事──

あなたにとっての「なんとかしたい日常」に少しでも寄り添えていたら、とても嬉しいです。

記事のおさらい

この1本で、VBAによる印刷・保存・送信まわりをまとめて扱いました。

  • PrintOut の基礎と印刷制御のはじめの一歩
  • ページ設定・印刷範囲のコツで「見栄えよく印刷できた!」を実現
  • PDF出力を自動化して、毎日の保存作業とサヨナラ
  • メール送信&ログ記録まで組み込めば、業務の“仕上げ”も完了!
  • よくあるつまずきを防ぐ、やさしいエラー対策まとめ

VBAでここまでできるんだ!と思ってもらえたら、大成功です

この記事が、あなたの「手間を減らして気持ちに余裕を持ちたい」という願いをそっと後押しできていたなら嬉しいです。

decopon
decopon

最初はたぶん、「印刷?PDF化?なんかややこしそう…」 「こんな自動化、自分には難しいかも」そんな風に感じた方もいらっしゃるかもしれません。 でも、やってみたら意外とシンプル。大事なのは「決まりきった手間に自分の時間を取られないようにする工夫」だと思っています。

そしてなにより、ちょっとずつ「これ自動化できた!」という小さな達成が積み上がると、 “あ、自分でもこういうの作れるんだ”という自信につながっていきます!

コメント

タイトルとURLをコピーしました