0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】pdfへの出力

0
Posted at

やること

 管理シートに記載された「シート一覧」と「○」をもとに、列ごとに指定されたシートをまとめてPDF出力する。

背景

【EXCEL】シート名を一括で変更する #Excel - Qiita
 1シート1ページの仕様書類を共同で作成し、pdfで出力することがあるのですが、共通となるシートと、個別のシートを1ファイルで管理してみるというテスト運用用のまとめ。

事前確認:Qiitaでの記事

 ということで、以下の検索をしたところ、1451件ヒットした。(2026/07/25時点)
「EXCEL PDF出力」の検索結果 - Qiita
 以下の検索をしたところ、262件ヒットした。(2026/07/25時点)
「EXCEL PDF出力 VBA」の検索結果 - Qiita

この中から、適当に以下紹介。

特定シートをPDF出力

エクセルのVBAで複数の特定シートをPDF出力 #Excel - Qiita
最終更新日 2023年05月28日 投稿日 2023年05月28日

エクセルVBAでエクセル各シートをPDF出力する #ExcelVBA - Qiita
最終更新日 2021年08月03日 投稿日 2020年03月25日

エクセルVBA(マクロ)でシートを1枚のPDFに自動出力する方法 #Excel - Qiita
投稿日 2019年10月28日

Excelマクロ入門 PDFで保存するマクロを作成 #VBA - Qiita
最終更新日 2026年02月11日 投稿日 2026年02月11日

試験結果の作成~送付をExcel VBAで簡単自動化🌟 #初心者 - Qiita
最終更新日 2025年12月23日 投稿日 2025年12月22日

【VBA】Excelの繰り返し作業を全自動化する20のマクロ【バックアップ・PDF・メール】 #業務効率化 - Qiita
最終更新日 2023年05月28日 投稿日 2023年05月28日

PDFCreator

VBAとPDFCreatorによるPDF出力について #Excel - Qiita
投稿日 2018年12月02日

PDFCreatorについて

 以下の検索をしたところ、6件ヒットした。(2026/07/25時点)
「PDFCreator」の検索結果 - Qiita

この中から、残り5件を以下紹介。

jsPDF / jspdf-autotable

jsPDF + autoTable で PDF に表を描画 #Node.js - Qiita
投稿日 2025年10月29日

jsPDF で PDF ファイルを作成 #TypeScript - Qiita
投稿日 2025年10月27日

JAX‑RS(Java API for RESTful Web Services)

JAX-RSによるExcel/CSV/PDFファイルダウンロード #Java - Qiita
最終更新日 2016年07月21日 投稿日 2015年12月24日

PDFDocument を生成する Factory クラス

Factory Method パターン って何なのさ #プログラミング - Qiita
投稿日 2023年11月02日

PDF のプロパティ

R Markdown(とXeLaTeX)で日本語レポート(第2弾) #YAML - Qiita
最終更新日 2022年04月25日 投稿日 2021年08月25日

事例

image.png
 上記の「○」のあるシートを抽出してPDF化する。

シート抽出pdf化.bas
Attribute VB_Name = "シート抽出pdf化"
Option Explicit

'------------------------------------------------------------------
' 関数: ExportMarkedSheetsToPDF
' 説明:
'   管理シート「シート名変更用」に記載されたシート一覧と印(○)をもとに、
'   列ごとに指定されたシートをまとめて PDF 出力する。
'
'   A列:シート名
'   1行目:PDFファイル名
'   2行目以降:対象シートに「○」が付いている列が PDF 出力対象
'
' 引数:
'   なし
'
' 戻り値:
'   なし
'
' 使用例:
'   Call ExportMarkedSheetsToPDF()
'------------------------------------------------------------------
Sub ExportMarkedSheetsToPDF()

    Dim wsList As Worksheet          ' 管理シート(シート名一覧+印)
    Dim lastRow As Long              ' A列の最終行(シート名一覧の終端)
    Dim lastCol As Long              ' 1行目の最終列(PDFファイル名の列数)
    Dim c As Long, r As Long         ' ループ用(列・行)
    Dim fileName As String           ' PDFファイル名
    Dim saveFolder As String         ' PDF保存先フォルダ
    Dim sheetNames() As String       ' PDFにまとめるシート名の配列
    Dim countSheets As Long          ' 配列に追加したシート数

    ' 管理シートをセット
    Set wsList = Worksheets("シート名変更用")

    '-------------------------------
    ' PDF保存先フォルダ選択ダイアログ
    '-------------------------------
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "PDF保存先フォルダを選択"
        If .Show <> -1 Then Exit Sub      ' キャンセル時は終了
        saveFolder = .SelectedItems(1)
    End With

    '-------------------------------
    ' 管理シートの最終行・最終列を取得
    '-------------------------------
    lastRow = wsList.Cells(wsList.Rows.Count, "A").End(xlUp).row
    lastCol = wsList.Cells(1, wsList.Columns.Count).End(xlToLeft).Column

    Application.ScreenUpdating = False

    '-------------------------------
    ' 列ごとに PDF 出力処理
    '-------------------------------
    For c = 2 To lastCol

        ' 1行目のセルが PDFファイル名
        fileName = Trim(wsList.Cells(1, c).Value)

        If fileName <> "" Then

            countSheets = 0
            Erase sheetNames     ' 配列初期化

            '-------------------------------
            ' 「○」が付いているシート名を配列に追加
            '-------------------------------
            For r = 2 To lastRow

                If wsList.Cells(r, c).Value = "○" Then

                    ' A列のシート名が存在するか確認
                    If SheetExists(wsList.Cells(r, "A").Value) Then

                        countSheets = countSheets + 1
                        ReDim Preserve sheetNames(1 To countSheets)
                        sheetNames(countSheets) = wsList.Cells(r, "A").Value

                    End If
                End If
            Next r

            '-------------------------------
            ' PDF出力(対象シートが1つ以上ある場合)
            '-------------------------------
            If countSheets > 0 Then

                Worksheets(sheetNames).Select

                ActiveSheet.ExportAsFixedFormat _
                    Type:=xlTypePDF, _
                    fileName:=saveFolder & "\" & CleanFileName(fileName) & ".pdf", _
                    Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, _
                    IgnorePrintAreas:=False, _
                    OpenAfterPublish:=False

            End If

        End If

    Next c

    ' 管理シートに戻す
    wsList.Select

    Application.ScreenUpdating = True

    MsgBox "PDF出力が完了しました。", vbInformation

End Sub

'------------------------------------------------------------------
' 関数: SheetExists
' 説明: 指定したシート名がブック内に存在するか判定する
'------------------------------------------------------------------
Function SheetExists(sheetName As String) As Boolean
    On Error Resume Next
    SheetExists = Not Worksheets(sheetName) Is Nothing
    On Error GoTo 0
End Function

'------------------------------------------------------------------
' 関数: CleanFileName
' 説明: Windowsで使用できないファイル名文字を "_" に置換する
'------------------------------------------------------------------
Function CleanFileName(fileName As String) As String
    Dim x As Variant
    For Each x In Array("\", "/", ":", "*", "?", """", "<", ">", "|")
        fileName = Replace(fileName, x, "_")
    Next x
    CleanFileName = fileName
End Function

image.png

おまけ

【EXCEL】列の幅と高さ #VBA - Qiita
 何かあれば、ここのコメント欄辺りに追加メモする予定。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?