PR

【保存版】ExcelをPDFに変換する方法を完全解説|複数シートの一括保存&VBA自動化

Excel
記事内に広告が含まれています。

「ExcelをPDFに変換したいけど、どの方法が正しいの?」
「複数シートを一括でPDF化できないの?」
そんな悩みをお持ちではないでしょうか。

私自身、毎週・毎月5個以上のPDFファイルを作成することがあるのですが、最初手動でやっていたときはファイル名を打ち間違えたり、作業時間はめちゃくちゃかかるし、、でとても大変でした。
しかし、今はマクロを実行することで、1クリックで作業完了することができ、作業時間の大幅短縮とヒューマンエラーをなくすことができました。

同じような悩みを持っている方もいらっしゃると思いますので、今回の記事では、そんなお悩みを解決するための方法をまとめてみました。
・「名前を付けて保存」「印刷」「エクスポート」の違い
・シートごとのPDF作成方法
・複数ファイルを自動で作成できるVBAコード

など、Excel→PDFへの変換に関して徹底解説していこうと思います。

初心者でもExcelのPDF変換を正しく使い分けることができますし、毎月のルーティン作業を効率化したいという方にも必見の内容となっています。
ぜひ本記事をチェックして、業務効率化に役立ててください。

🔍今回の記事で分かること
  • ExcelをPDFに変換する基本の方法(手動)
  • VBAを使って複数シートを一括でPDF化する方法
  • 手動と自動での作成方法を使い分けるコツ

ExcelをPDFに変換する理由

請求書や見積書、報告書などを相手に送るとき、ExcelからPDFに変換することが多いですよね。では、そもそもなぜPDFに変換する必要があるのでしょうか?

恥ずかしながら、私自身PC初心者のとき「Excelでそのまま送ればいいのでは?」と思っていたこともあります。ただExcelをそのまま送付した場合、相手のバージョンによっては表示が崩れてしまったり、数式やデータをうっかり編集できてしまうので、あまり良いやり方とは言えませんよね。

これらのファイルって、「相手に見てもらう資料」であり、「相手が編集する必要がない資料」です。つまりExcelからPDFに変換することで、この問題を解消することができるのです。

代表的なメリットは次の3つと考えています。

■レイアウトを崩さずに共有できる

Excelをそのまま送る場合、バージョンや環境によって表示が崩れてしまうことがあります。見た目が悪くなってしまい、閲覧する側にもちょっとストレスがかかってしまいますよね。
PDFにすれば、表示を崩さずに相手に送ることができます。

■基本的に編集不可なので、改ざん防止ができる

Excelをそのまま送ると、数式やデータが編集されてしまうケースがあります。
PDFは基本的に編集不可なので、閲覧のみ必要なケースにおいてはPDFに変換して送付することでデータの編集を防止することができます。

■Excelがなくても、ブラウザ等で確認できる

今の時代、スマホでデータチェックする機会も多いと思います。
ただスマホでは、Excelアプリが入っていないという人も多いのではないでしょうか。そうなった場合、ファイルを開けないということも考えられます。
PDFであれば、ブラウザ等で簡単に閲覧することができます。なので見れなくて困るということは心配なくなりますね

ExcelをPDFに手動で変換する方法

Excelから手動でPDFを作成する方法は以下3パターンあります。
・「名前をつけて保存」→「ファイルの種類」で「PDF」を選択
・「エクスポート」→「PDF/XPSの作成」を選択
・「印刷」→「Microsoft Print to PDF」を選択

大きな違いはないですが、
・細かい設定をしたい場合は、「名前をつけて保存」か、「エクスポート」
・印刷設定を反映したい場合は「印刷」

で使い分けるとよいと思います。
比較表を作ってみましたので、参考にして使い分けてみてください。

方法特徴向いている用途
名前をつけて保存細かく設定できる請求書・報告書などの正式保存
エクスポート操作が分かりやすい
(結果は「名前をつけて保存」とほぼ同じ)
初心者や操作に迷いたくないとき
印刷印刷結果をそのままPDF化できる社内掲示・紙出力イメージ重視

それぞれの手順を説明します。

パターン①:名前をつけて保存→「ファイルの種類」:PDF

1.「ファイル」タブから、「名前をつけて保存」を選択

2.「ファイルの種類」をPDFにして「保存」を選択

パターン②:エクスポート→PDF/XPSドキュメントの作成

1.「ファイル」タブ→「エクスポート」を選択し、「PDF/XPSの作成」を選択

2「ファイル名」を入力し、「発行」を選択

💡ポイント
  • ※XPSドキュメント→「XML Paper Specification」の略で、Microsoftが開発した電子文書フォーマットです。あまり普及しておらず、ビューアーが必要なため、使用するケースはほとんどないかと思います。基本的にはPDF作成だけでOKです。

パターン③:印刷→Microsoft Print to PDF

1.「ファイル」タブ→「印刷」→「Microsoft Print to PDF」を選択し、「印刷」を選択

2.ファイル名を入力し、「保存」を選択

Excelの複数シート/ブック全体を一つのPDFにするには?

■複数シートを1つのPDFにする場合

複数シートを1つのPDFにする場合は、「Ctrl」キーを押しながら対象のシートを選択するだけです。
複数シートを選択したあと、上記で紹介したPDF作成で進めると、1つのPDFにまとめることができます。

■ブック全体を1つのPDFにする場合

ブック全体を1つのPDFにする場合、シートを全選択してもいいですが、それだと面倒ですよね。
その場合は、「オプション」→「ブック全体」で簡単に選択することができます。

1.「保存ダイアログボックス」にある「オプション」を選択

2.「発行対象」の「ブック全体」にチェックをいれ、「OK」を選択

標準と最小サイズの違い

ExcelからPDFを作成するときは、「標準」か「最小サイズ」から選択できます。
・「標準」→印刷や高品質を重視
・「最小サイズ」→ファイルの軽さや共有のしやすさを重視

を目安として、使い分けするとよいと思います。

以下は「標準」と「最小サイズ」を並べてみた画像になります。表やグラフはそこまで変わりないですが、画像は明らかに画質が落ちているのが確認できます。その分、ファイル容量は減っています。

複数のPDFを手動で作成するのは大変

ExcelからPDFへの変換は、「エクスポート」や「印刷」などで簡単にできます。
しかし、実務では1つのシートだけではなく、取引先ごと、店舗ごと、社員ごとなど、それぞれPDFを作成しないといけないですよね。

例えば、次のようなケースです。
・毎月、数十社の取引先ごとに請求書をPDFで作成する
・店舗ごとに、実績報告書を一括でPDF作成する
・社員ごとに、明細書を一括でPDF作成する

残念ながら、手動ではこれを一括作成する方法がありません。
となると、1シートずつ「名前をつけて保存→PDF作成、名前をつけて保存→PDF作成、、」という作業を延々と行う必要があります。
数件ならまだしも、作成するファイルが数十個以上にもなってくると話は別です。その作業に何時間もかける必要があり、とても非効率ですよね。

また、手動で作成するもう一つのデメリットは、ヒューマンエラーが発生してしまうことです。
以下のようなミスが発生してしまう可能性があります。
・ファイル名の入力間違い
・保存先のフォルダを間違える
・変換のし忘れ

つまり、PDFに変換する量が多ければ多いほど、作業時間がかかるだけでなく、ミスも起きやすくなってしまうという状況になってしまいます。

VBAで自動的に複数のPDFを作成する方法

手動ではPDFを一括作成することができませんが、VBAを使うことにより、この問題を解決できます。

ここでは、その流れを画像とVBAコード付きで分かりやすく説明していきます。
イメージしやすいよう、仕上がり具合を動画でもアップしておりますので、ぜひチェックしてみてください。

シートごとに一括でPDFを作成する方法

では、シートごとにPDFを作成する方法を説明していきます。
今回は以下のような請求書を準備しました。A~H社8個分の請求書がシート別にあるので、これを8つのPDFで出力していきたいと思います。

なお、設定としては
・シート名をファイル名に利用する
・印刷範囲は、「シートを1ページに印刷」、ページ中央に「水平」、「垂直」ありで表示

として、PDF出力していきます。

1.Alt+F11キーで、VBA編集画面を開き、「標準モジュール」を追加

2.「標準モジュール」に以下VBAコードをコピペし、保存
※保存先のパス(★部分)は、実際のフォルダパスに打ち換えてください。

Sub シートごとにPDF出力()

    Dim ws As Worksheet
    Dim pdfPath As String
    Dim pdfFile As String
    
    '★保存先のフォルダを指定(実際に使用しているフォルダへ変更してください)
    pdfPath = "パス名"
    
    ' 指定したフォルダがなければ作成する
    If Dir(pdfPath, vbDirectory) = "" Then
        MkDir pdfPath
    End If
    
    ' 各シートごとにPDFを出力
    For Each ws In ThisWorkbook.Worksheets
        
        ' ページ設定
        With ws.PageSetup
            .Zoom = False                 ' 拡大縮小を無効化
            .FitToPagesWide = 1           ' 横1ページに収める
            .FitToPagesTall = 1           ' 縦1ページに収める
            .CenterHorizontally = True    ' 水平中央
            .CenterVertically = True      ' 垂直中央
        End With
        
        ' 保存ファイル名(シート名を利用)
        pdfFile = pdfPath & ws.Name & ".pdf"
        
        ' 1シートずつPDFに出力
        ws.ExportAsFixedFormat Type:=xlTypePDF, _
                               Filename:=pdfFile, _
                               Quality:=xlQualityStandard, _
                               IncludeDocProperties:=True, _
                               IgnorePrintAreas:=False, _
                               OpenAfterPublish:=False    
    Next ws
    
    MsgBox "全てのシートをPDFに出力しました!", vbInformation

End Sub

これで設定は完了です。
実際にマクロを実行してみると、ちゃんとシート名どおりにPDFファイルが作成できています。

セル入力値を使い、PDFファイルに名前を付ける方法

先ほど紹介したマクロで、無事にPDFへ出力することができました。
しかし、取引先への請求書を作るなど、「定期的」なものであればで「〇〇年〇月」とファイル名に書いておくと管理しやすいですよね。ただ毎回シート名に追加するわけにもいかないし、VBAを毎回編集するのはちょっとハードル高い。。

というときは、セルに入力した値を利用することをおすすめします。
今回は、同じファイルのセルに「○○年○月」と入力しておき、PDF作成時の名前に追加反映していく方法を紹介します。

先ほどと同じ手順で、「標準モジュール」に以下VBAコードをコピペします。
※★部分(シート名、セル番地、保存先のパス名)は、実際のものに打ち換えてください。

Sub シートごとにPDF出力_セルの値をファイル名に追加反映()

    Dim ws As Worksheet
    Dim pdfPath As String
    Dim pdfFile As String
    Dim saveFolder As String
    Dim periodText As String
    
    '★年月を入力しているシートとセルを指定(実際のシート、セルに変更してください)
    periodText = ThisWorkbook.Sheets("シート名").Range("C3").Value
    
    '★保存先のフォルダを指定(実際に使用しているフォルダへ変更してください)
    saveFolder = "パス名"
    
    ' 指定したフォルダがなければ作成する
    If Dir(saveFolder, vbDirectory) = "" Then
        MkDir saveFolder
    End If
    
    ' 全シートをループし、「請求書」が含まれるシートのみを出力対象にする
    For Each ws In ThisWorkbook.Sheets
        If InStr(ws.Name, "請求書") > 0 Then
            
            ' ページ設定
            With ws.PageSetup
                .Zoom = False                ' 拡大縮小を無効化
                .FitToPagesWide = 1          ' 横1ページに収める
                .FitToPagesTall = 1          ' 縦1ページに収める
                .CenterHorizontally = True   ' 水平中央
                .CenterVertically = True     ' 垂直中央
            End With
            
            ' PDFファイルを作成(例:請求書_A社_2025年8月.pdf)
            pdfFile = saveFolder & ws.Name & "_" & periodText & ".pdf"
            
            ' 1シートずつPDFに出力
            ws.ExportAsFixedFormat Type:=xlTypePDF, _
                               Filename:=pdfFile, _
                               Quality:=xlQualityStandard, _
                               IncludeDocProperties:=True, _
                               IgnorePrintAreas:=False, _
                               OpenAfterPublish:=False
        End If
    Next ws
    
    MsgBox "請求書PDFの出力が完了しました!", vbInformation

End Sub

これで設定は完了です。
実際にマクロを実行してみると、ちゃんとPDFファイルに「2025年8月」と表示されました。

必要ない余白部分は非表示にしてしまう

明細書などのフォーマットでは、ある程度余裕を持った明細分の枠が表示されていると思います。
ただ取引先によって使用している枠数が異なったりするので、空白の枠部分を非表示にしたいというときもあると思います。

そのような場合は、VBAで「空白行を非表示」にすることも可能です。もし空白が気になるという場合はぜひ参考にしてみてください。

今回は、明細部分が空欄の場合、行を非表示にするVBAコードを追加していきます。ロジックとしては、B列(日付部分)が空白の場合は行を非表示にするという内容で組み立てます。

先ほどと同じ手順で、「標準モジュール」に以下VBAコードをコピペします。
※★部分(シート名、セル番地、保存先のパス名)は、実際のものに打ち換えてください。

Sub シートごとにPDF出力_セルの値をファイル名に追加反映_空白部分は非表示()

    Dim ws As Worksheet
    Dim pdfPath As String
    Dim pdfFile As String
    Dim saveFolder As String
    Dim periodText As String
    Dim rng As Range, r As Range
    
    '★年月を入力しているシートとセルを指定(実際のシート、セルに変更してください)
    periodText = ThisWorkbook.Sheets("シート名").Range("C2").Value
    
    '★保存先のフォルダを指定(実際に使用しているフォルダへ変更してください)
    saveFolder = "パス名"
    
    ' フォルダが存在しなければ作成
    If Dir(saveFolder, vbDirectory) = "" Then
        MkDir saveFolder
    End If
    
    ' 全シートをループ
    For Each ws In ThisWorkbook.Sheets
        If InStr(ws.Name, "請求書") > 0 Then
            
            '明細エリアの空白行を非表示
            Set rng = ws.Range("B22:B41")
            For Each r In rng.Rows
                If Application.WorksheetFunction.CountA(r) = 0 Then
                    r.EntireRow.Hidden = True
                End If
            Next r
            
            'ページ設定
            With ws.PageSetup
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = 1
                .CenterHorizontally = True
                .CenterVertically = True
            End With
            
            ' PDFファイルを作成(例:請求書_A社_2025年8月.pdf)
            pdfFile = saveFolder & ws.Name & "_" & periodText & ".pdf"
            
            ' 1シートずつPDFに出力
            ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFile, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
            
            'PDF出力後に非表示を解除
            rng.EntireRow.Hidden = False
            
        End If
    Next ws
    
    MsgBox "請求書PDFの出力が完了しました!", vbInformation

End Sub

これで設定は完了です。
実際にマクロを実行してみると、ちゃんと空白行が非表示になっていることが確認できます。

手動と自動はどう使い分けるべき?

でも実際1ファイルとか、PDFにするファイルか少なければ、手動作成で問題ないと思います。
そのため、PDFを手動作成するか、自動作成するかは、状況に応じて選択することが効率的だと思います。

その目安として、
・「少量・不定期」で作成するファイルであれば手動
・「大量・定期的」で作成するファイルであれば自動

で対応するのが良いと考えます。

手動・自動の比較表を比較してみました。ご自身の業務と照らし合わせて、どちらで対応するのがよいか参考にしてみてください。

項目    
利用シーン単発の資料など定期的な資料、多数の取引先・人ごとの資料など
手軽さExcel標準機能で誰でもできるVBAの設定などややハードル高め
柔軟性・レイアウトを都度調整できる
・毎回設定が必要な場合も
・一度設定すれば毎回安定して出力可能
・レイアウト調整時はVBAの設定の見直しが必要な場合も
スピード1-2ファイルくらいであれば問題なし大量のシートでも、一括処理で速く作成できる
エラー防止手作業のため、ヒューマンエラーが発生しやすい
(範囲選択ミス/保存場所の誤りなど)
・自動化のため、ヒューマンエラーを防げる
・シートの内容を変更した場合、エラーが発生する可能性がある

まとめ:自動化で業務効率を大幅に改善

ExcelからPDFファイルを作成する機会は多いと思います。手動・自動かどうかは状況によって使い分けるべきだと思いますが、「大量」・「定期的」であれば、VBAで自動作成することをおすすめします。

VBAで自動化することで、作業時間を圧倒的に早めることができ、何より作業ミスを防止することもできます。活用しない手はないと思います。

今回の記事を参考にして、ぜひ業務に取り入れてみてください。きっと業務が大幅に効率化され、一目置かれる存在にになると思います。ともに業務効率化の道を歩んで行きましょう。

この記事が役に立ったと思った場合、ブックマークやシェアしてもらえると嬉しいです。また、質問やこんな方法を紹介してほしい!などありましたら、お気軽にコメントしてください。

最後まで読んでいただき、ありがとうございました。

ろじゃー

仕事・子育てに奮闘中の社会人です。
仕事でも日常生活でも、ちょっとでも便利になることが紹介できるブログを書いています!
 
仕事柄、PC操作やエクセル、VBAなどは得意です!
Excel歴は10年以上の事務職。
関数やVBAを活用して、資料作成やデータ分析をはじめとした様々な業務の効率化・自動化に取り組んできました。
 
このブログでは、実際の業務で使える効率化テクニックを発信しています。
「わからない」や「困った」など問題を抱える方や、もっと効率化したいと思っている方に、少しでも役立てれば幸いです!

ご質問・ご相談など、お気軽にご連絡ください。

ろじゃーをフォローする
ご質問・ご相談はこちらへ!
 ろじゃー|日々、ちょっとずつ良くなることを目指すブロガー
Excel歴10年以上。VBAや関数、業務効率化などを発信中。
📩 お問い合わせはこちら
Excel
シェアする
ろじゃーをフォローする

コメント

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