エクセルマクロで印刷ボタンを作る方法|PDF保存・印刷しない設定も解説

エクセルマクロで印刷ボタンを作成し、設定からPDF出力までを完全解説する記事のメインビジュアル。

こんにちは、SkillStack Lab運営者のスタックです。

Excelで請求書や報告書を印刷するたびに、印刷範囲やプリンター設定を確認し、同じ操作を繰り返していませんか。

結論から言うと、フォームコントロールまたは図形へ印刷マクロを登録すれば、印刷プレビューの表示、印刷範囲の更新、PDF保存などをボタン1つで実行できます。

ただし、いきなりプリンターへ出力するコードより、最初は印刷プレビューを表示するコードの方が安全です。

この記事では、印刷ボタンの作り方、ボタン自体を紙やPDFへ出さない設定、反応しない場合の確認項目、実務向けのVBAコードまで順番に解説します。

Excelの印刷ボタンで印刷操作の時短、ミス防止、手順統一を行うメリット

掲載コードはサンプルです。元ファイルを複製し、印刷先を確認できる環境でテストしてください。会社の端末でマクロが制限されている場合は、セキュリティ設定を独断で変更せず、情報システム担当者へ確認しましょう。

この記事で分かること
  • フォームコントロールや図形で印刷ボタンを作る手順
  • 印刷プレビュー・印刷範囲・PDF保存のVBAコード
  • ボタン自体を紙やPDFへ印刷しない設定
  • ボタンが反応しない原因と安全な確認方法
目次

エクセルマクロで印刷ボタンを作る最短手順

最初に、選択中のシートではなく、指定した「請求書」シートの印刷プレビューを表示するコードを作ります。

次のコードを標準モジュールへ貼り付けてください。

Option Explicit

Sub ShowPrintPreview()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("請求書")

    ws.PrintOut Preview:=True

End Sub

自分のブックでシート名が異なる場合は、コード内の「請求書」を実際のシート名へ変更します。

Preview:=Trueにしているため、ボタンを押してもすぐには印刷されず、先にプレビュー画面が表示されます。

  1. マクロ有効ブックで保存する
    Excelファイルを「.xlsm」形式で保存します。
  2. 開発タブを表示する
    「ファイル」から「オプション」「リボンのユーザー設定」と進み、「開発」にチェックを入れます。
  3. 標準モジュールへコードを貼る
    AltF11でVBEを開き、「挿入」から「標準モジュール」を選びます。
  4. シートへボタンを置く
    フォームコントロールまたは図形を配置します。
  5. マクロを登録する
    ボタンを右クリックし、「マクロの登録」からShowPrintPreviewを選びます。
  6. テスト用プリンターで確認する
    プレビューの範囲、改ページ、用紙方向、余白を確認します。

Excel for the webではVBAマクロを作成・編集・実行できません。印刷ボタンを動かす場合は、VBAに対応したデスクトップ版Excelで開いてください。

開発タブを表示してマクロを準備する

Excelの初期状態では、マクロやフォームコントロールを扱う「開発」タブが表示されていないことがあります。

Windows版Excelでは、次の手順で表示できます。

  1. 「ファイル」をクリックする
  2. 「オプション」を開く
  3. 「リボンのユーザー設定」を選ぶ
  4. 右側の「メインタブ」にある「開発」へチェックを入れる
  5. 「OK」を押す
Excelのリボン設定で開発タブを表示する手順

一度表示すると、設定を解除したりOfficeを再インストールしたりしない限り、通常は開発タブが表示された状態になります。

マクロを保存するファイル形式は、通常の「.xlsx」ではなく「Excelマクロ有効ブック(.xlsm)」を選んでください。

参考:Microsoftサポート「開発タブを表示する」

印刷ボタンはフォームコントロールと図形のどちらを使うか

印刷マクロを実行するボタンには、主にフォームコントロール、図形、ActiveXコントロールの3種類があります。

種類特徴向いている用途
フォームコントロール設定が比較的簡単で、既存マクロを登録しやすい社内帳票や初心者向け
図形色、形、文字、アイコンを自由に設定できる分かりやすい操作画面を作りたい場合
ActiveXイベントや外観を細かく制御できるWindows環境で高度な制御が必要な場合

ActiveXコントロールはMacではサポートされません。印刷マクロを実行するだけなら、フォームコントロールまたは図形で足りることが多いため、最初からActiveXを選ぶ必要はありません。

Excelのフォームコントロールと図形ボタンの特徴を比較した図

フォームコントロールで印刷ボタンを作る

フォームコントロールは、印刷ボタンを初めて作る人が選びやすい方法です。

  1. 「開発」タブを開く
  2. 「挿入」をクリックする
  3. フォームコントロールの「ボタン」を選ぶ
  4. シート上をドラッグしてボタンを配置する
  5. 「マクロの登録」で実行するマクロを選ぶ
  6. ボタンの文字を「印刷プレビュー」などへ変更する

ボタンを配置した直後に「マクロの登録」画面が開かなかった場合は、ボタンを右クリックして「マクロの登録」を選びます。

図形を印刷ボタンとして使う

色やアイコンを使って操作を分かりやすくしたい場合は、四角形などの図形へマクロを登録します。

  1. 「挿入」タブから「図形」を選ぶ
  2. 角丸四角形などをシートへ配置する
  3. 図形に「印刷」「PDF保存」などの文字を入力する
  4. 図形を右クリックする
  5. 「マクロの登録」を選ぶ
  6. 実行するマクロを指定する

印刷、PDF保存、印刷範囲更新など、処理ごとに色やボタン名を分けると、利用者が操作を判断しやすくなります。

参考:Microsoftサポート「フォームまたはコントロールボタンへマクロを割り当てる」

印刷ボタン自体を紙やPDFへ印刷しない設定

シート上に配置したボタンは、設定によっては帳票と一緒に印刷されます。

請求書や報告書へ「印刷ボタン」が出ないように、ボタンの印刷設定を解除しておきましょう。

  1. ボタンまたは図形を右クリックする
  2. 「コントロールの書式設定」または「図形の書式設定」を開く
  3. 「プロパティ」を選ぶ
  4. 「オブジェクトを印刷する」のチェックを外す
  5. 印刷プレビューでボタンが消えているか確認する
Excelのオブジェクトを印刷する設定を解除する画面
ボタンの種類主な設定箇所設定内容
フォームコントロールコントロールの書式設定オブジェクトを印刷するを解除
図形図形の書式設定オブジェクトを印刷するを解除
ActiveXプロパティPrintObjectFalseにする

図形名を固定している場合は、VBAから印刷対象外に設定することもできます。

Sub SetPrintButtonNotToPrint()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("請求書")

    ws.Shapes("印刷ボタン").PrintObject = False

End Sub

コードを使う場合は、「請求書」と「印刷ボタン」を実際のシート名・図形名へ変更してください。

印刷ボタンが反応しないときの確認項目

ボタンを押しても何も起きない場合は、コードを書き直す前に、保存形式やマクロの登録状態を確認します。

症状・原因確認すること
ファイルが.xlsx形式.xlsm形式で保存し直す
マクロが登録されていないボタンを右クリックし「マクロの登録」を確認する
マクロが一覧に出ない引数のないPublic Subを標準モジュールへ置く
ActiveXが動かない「デザインモード」が解除されているか確認する
Excel for the webを使用中デスクトップ版Excelで開く
セキュリティ警告が表示されるファイルの出所と社内ポリシーを確認する
実行時エラーが出るコード内のシート名、図形名、保存先を確認する

ボタンへ登録しやすいマクロは、次のような形式です。

Public Sub ShowPrintPreview()

    ' ここへ処理を書く

End Sub

引数が必要なマクロや、シートモジュール内の一部のプロシージャは、「マクロの登録」の一覧へそのまま表示されないことがあります。

VBAの変数、標準モジュール、エラー確認から学びたい方は、UdemyのVBAおすすめ講座を初心者・実務・生成AI活用で比較した記事も参考にしてください。

マクロのブロックを解除する前に確認すること

インターネットやメールから取得したOfficeファイルでは、VBAマクロが既定でブロックされる場合があります。

マクロはマルウェアやランサムウェアに悪用される可能性があるため、警告が表示されたからといって、すぐに解除してはいけません。

解除を検討する前の確認
  • 作成者と入手経路を確認できるか
  • 自分または社内担当者がコード内容を確認したか
  • 電子署名や社内の配布ルールがあるか
  • 会社のセキュリティポリシーで許可されているか
  • 本番データではなくコピーで確認できるか

出所と内容を確認したローカルファイルで、組織のポリシーにも反しない場合は、Windowsのファイルプロパティに「ブロックの解除」が表示されることがあります。

  1. Excelを閉じる
  2. エクスプローラーで対象ファイルを右クリックする
  3. 「プロパティ」を開く
  4. 「全般」タブのセキュリティ欄を確認する
  5. 許可されたファイルであることを確認したうえで「ブロックの解除」を選ぶ
Windowsのファイルプロパティでマクロファイルのブロック状態を確認する手順

不特定多数のファイルを置くフォルダーや、広範囲の共有フォルダーを安易に「信頼できる場所」へ登録しないでください。信頼できる場所はマクロの安全性確認を省略する可能性があるため、会社では管理者による範囲設定や電子署名を優先します。

参考:Microsoft Learn「インターネットからのマクロはOfficeで既定でブロックされる」

印刷プレビューを表示するVBAコード

直接印刷するコードは、プリンターや印刷範囲の設定を間違えた場合、そのまま紙が出力されます。

最初はPreview:=Trueを指定し、プレビューで確認してから印刷する運用にしましょう。

Sub ShowPrintPreview()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("請求書")

    ws.PrintOut _
        Copies:=1, _
        Preview:=True, _
        Collate:=True

End Sub
VBAのPrintOutメソッドで印刷プレビューを表示するコード

十分にテストした後、直接印刷する必要がある場合はPreview:=Falseへ変更できます。

ただし、プリンター名、片面・両面、カラー設定などは端末やプリンタードライバーにも左右されるため、利用者が確認できるプレビューを残す方が安全です。

データ件数に合わせて印刷範囲を自動調整する

明細行が毎月増減する帳票では、固定された印刷範囲のままだと、データが途中で切れたり、空白ページが増えたりすることがあります。

次のコードは、A列を基準に最終行を取得し、A1からF列の最終行までを印刷範囲に設定します。

Excel VBAで最終行を取得して印刷範囲を更新する仕組み
Sub SetPrintAreaAndPreview()

    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("請求書")

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    If lastRow < 2 Then
        MsgBox "印刷する明細データがありません。", vbExclamation
        Exit Sub
    End If

    ws.PageSetup.PrintArea = ws.Range("A1:F" & lastRow).Address

    ws.PrintOut Preview:=True

End Sub
  • 最終行を判定する列がA列でよいか確認する
  • 印刷対象の最終列がF列でよいか確認する
  • 表の上部にタイトルや宛先が含まれているか確認する
  • 改ページと印刷タイトルの設定を確認する
  • 空白に見える数式が最終行判定へ影響しないか確認する

A列に空白が入り得る場合は、必ず値が入る管理番号列などを最終行判定に使ってください。

帳票をPDF保存するVBAコード

ExcelのExportAsFixedFormatメソッドを使うと、指定したシートをPDF形式で保存できます。

次のコードは、Excelファイルと同じ場所へ「PDF」フォルダーを作り、A1の顧客名と現在日時を使ったファイル名で保存します。

Sub ExportInvoiceToPDF()

    Dim ws As Worksheet
    Dim outputFolder As String
    Dim outputFile As String
    Dim customerName As String

    Set ws = ThisWorkbook.Worksheets("請求書")

    If Len(ThisWorkbook.Path) = 0 Then
        MsgBox "先にExcelファイルを保存してください。", vbExclamation
        Exit Sub
    End If

    customerName = Trim$(CStr(ws.Range("A1").Value))

    If Len(customerName) = 0 Then
        MsgBox "A1に顧客名を入力してください。", vbExclamation
        Exit Sub
    End If

    outputFolder = ThisWorkbook.Path _
        & Application.PathSeparator _
        & "PDF"

    If Dir(outputFolder, vbDirectory) = vbNullString Then
        MkDir outputFolder
    End If

    outputFile = outputFolder _
        & Application.PathSeparator _
        & CreateSafeFileName(customerName) _
        & "_請求書_" _
        & Format(Now, "yyyymmdd_hhnnss") _
        & ".pdf"

    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=outputFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

    MsgBox "PDFを保存しました。" & vbCrLf & outputFile, vbInformation

End Sub

Private Function CreateSafeFileName(ByVal sourceName As String) As String

    Dim invalidCharacters As Variant
    Dim targetCharacter As Variant

    invalidCharacters = Array("\", "/", ":", "*", "?", """", "<", ">", "|")

    For Each targetCharacter In invalidCharacters
        sourceName = Replace(sourceName, CStr(targetCharacter), "_")
    Next targetCharacter

    CreateSafeFileName = Trim$(sourceName)

End Function

同じ標準モジュールに複数のコードをまとめる場合、Option Explicitはモジュールの先頭に1回だけ記載してください。

  • A1が本当に顧客名のセルか確認する
  • 印刷範囲が正しく設定されているか確認する
  • PDFの宛名、金額、ページ数を目視する
  • 保存先フォルダーのアクセス権限を確認する
  • 個人情報を含むPDFの共有方法を確認する

参考:Microsoft Learn「Worksheet.ExportAsFixedFormatメソッド」

PDF作成だけでなく、請求書の発行、送付、入金確認、仕訳まで含めて改善したい方は、中小企業向け経理自動化ソフトの選び方も確認してください。

複数シートをまとめて印刷プレビューする

表紙と明細など複数のシートをセットで印刷する場合は、シートを手動でグループ化せず、対象シートを配列で指定できます。

Sub PreviewMultipleSheets()

    Dim targetSheets As Variant

    targetSheets = Array("表紙", "明細")

    ThisWorkbook.Worksheets(targetSheets).PrintOut _
        Copies:=1, _
        Preview:=True, _
        Collate:=True

End Sub

「表紙」と「明細」は、実際のシート名へ変更してください。

この方法なら、シートを選択状態にしたまま残しにくく、複数シートをグループ化した状態で誤って編集するリスクを抑えられます。

Excel VBAでPDF保存と複数シート印刷を実行する方法

両面印刷やホチキス留めなどの仕上げ設定は、プリンター本体やドライバーによって動作が異なります。重要な帳票では、コードだけに依存せず、実際の出力結果を確認してください。

印刷マクロを使い続けるか別の方法へ移行するか

Excel内の帳票を印刷・PDF保存する程度なら、VBAは現在も使いやすい選択肢です。

一方、請求書の発行からメール送付、承認、入金状況、再発行履歴まで管理する場合は、印刷ボタンを増やすだけでは運用が複雑になります。

業務の状態候補判断理由
個人が既存帳票を印刷するVBAExcel内の細かな操作をまとめやすい
同じPDFを定期的に作るVBA・Power Automate保存後の処理範囲で判断する
複数人で請求書を発行する専用SaaS権限・承認・履歴を管理しやすい
複数のCSVを毎月集計するPower Query読み込みと整形手順を再利用しやすい
外部データやAPIも処理するPythonなどExcel外まで処理を広げやすい

元情シス・管理部門長としての判断

印刷ボタンを作る目的は、単にクリック数を減らすことではありません。

印刷範囲、ファイル名、保存先、確認手順を標準化し、利用者による結果のばらつきを減らすことが重要です。

ただし、作成者以外がコードを直せず、停止すると請求や顧客対応へ影響する状態になったら、VBAを追加する前に保守体制や代替手段を検討してください。

既存マクロの保守や属人化に悩んでいる方は、VBAを続ける業務と別の方法へ移行する業務の判断基準も参考にしてください。

エクセルのマクロ印刷ボタンに関するよくある質問

印刷ボタンを紙やPDFに表示させないことはできますか?

できます。フォームコントロールや図形の書式設定で「オブジェクトを印刷する」を解除します。ActiveXの場合はPrintObjectFalseに設定します。

フォームコントロールと図形はどちらがおすすめですか?

設定を簡単にしたい場合はフォームコントロール、色やアイコンを使って操作を分かりやすくしたい場合は図形が向いています。

印刷マクロを実行するだけなら、どちらでも大きな問題はありません。

Mac版Excelでも印刷ボタンを使えますか?

フォームコントロールや図形へ割り当てたVBAは、対応するデスクトップ版Excelで利用できます。

ただし、ActiveXコントロールはMacではサポートされません。また、ファイルパスやプリンター設定はWindowsと異なる場合があります。

Excel for the webで印刷ボタンは動きますか?

Excel for the webではVBAマクロを作成・編集・実行できないため、VBAを割り当てた印刷ボタンは動きません。

デスクトップ版Excelで開くか、ブラウザー上での自動化が必要な場合はOffice ScriptsやPower Automateを検討してください。

ボタンを押してもマクロ一覧が表示されないのはなぜですか?

マクロが標準モジュールにない、Private Subになっている、引数が必要、ファイルが.xlsx形式であるなどの原因が考えられます。

標準モジュールへ、引数のないPublic Subとして作成されているか確認してください。

PDF保存時にボタンも出力される場合はどうしますか?

図形またはコントロールの「オブジェクトを印刷する」が有効になっている可能性があります。

設定を解除した後に印刷プレビューを開き、ボタンが表示されないことを確認してからPDFを作成してください。

まとめ|印刷ボタンはプレビューと確認手順まで設計する

Excelの印刷ボタン作成からVBAによる業務標準化までの流れ

Excelの印刷ボタンは、フォームコントロールまたは図形へVBAマクロを登録することで作成できます。

  • 最初は直接印刷せず、印刷プレビューを表示する
  • 対象シートをThisWorkbook.Worksheetsで明示する
  • ボタンの「オブジェクトを印刷する」を解除する
  • 印刷範囲と最終行の判定列を確認する
  • PDFの保存先・ファイル名・内容を確認する
  • マクロは.xlsm形式で保存する
  • 重要業務では保守担当者と代替手段も決める

ワンクリックにすることだけでなく、誰が実行しても確認すべき項目が抜けない仕組みにすることが大切です。

印刷やPDF保存以外の業務も自動化したい場合は、VBAだけに決めず、Power Query、Power Automate、Python、SaaSまで含めて選びましょう。

\ 業務に合うExcel自動化を選ぶ /

ExcelやVBAの画面、利用可能な機能、セキュリティ設定は、OS、Excelのバージョン、組織の管理ポリシーによって異なる場合があります。

参考:Microsoft Learn「Worksheet.PrintOutメソッド」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次