【簡単】VBAでPDFを保存する3つの方法【サンプルコードあり】
「VBAでPDFファイル作りたいんだけど、どう作んの?」

はい、これは秒です、秒。

さて、さっそくVBAでPDFのつくりかた3つを紹介しつつ解説していきましょう。

VBAでPDFを保存できる3つの方法とは?

  1. 選択したシートごとに1つずつPDFを作成する方法
  2. すべてのシートを1つのPDFにする方法
  3. 選択したシートを1つのPDFにする方法

はい、今回紹介するのはこの3つですね。

順に説明していきます。

選択したシートごとに1つずつPDFを作成する方法

Sub makePDFFile(sheets_name_array As Variant, output_folder_name As String)
    
    Dim main_folder_path As String
    main_folder_path = ThisWorkbook.Path & "\" & output_folder_name & "\"
    
    If Dir(main_folder_path, vbDirectory) = "" Then MkDir main_folder_path
    
    Dim base_sheet As Worksheet
            
    For Each base_sheet In Worksheets(sheets_name_array)
        base_sheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=main_folder_path & base_sheet.Name & ".pdf", _
            Quality:=xlQualityStandard
    Next base_sheet

End Sub

まずは、VBAで選択したシートをあらかじめ設定。
シートごとに1つずつPDFにしていく方法ですね。

処理の流れはつぎのような感じ。

  1. 保存するフォルダまでのフルパスを設定する
  2. もしフォルダがなければ作成する
  3. シートごとに作成したPDFをそのフォルダのなかに保存する

使いかた: シートごとに1つずつPDFにしていく方法

  1. PDFにしたいシート名を配列に設定する
    Dim print_sheets as Variant
    print_sheets = Array("Sheet_1", "Sheet_2", "Sheet_3")
  2. PDFを保存したいフォルダ名を設定する(存在しなくてもOK)
    Dim folder_name as String
    folder_name = "PDF_folder"
  3. Callして設定した「シート名」「フォルダ名」をいれる
    Call makePDFFile(print_sheets, folder_name)

すべてのシートを1つのPDFにする方法

Sub makePDFFileAll(output_file_name As String, output_folder_name As String)
    
    Dim main_folder_path As String
    main_folder_path = ThisWorkbook.Path & "\" & output_folder_name & "\"
    
    If Dir(main_folder_path, vbDirectory) = "" Then MkDir main_folder_path
    
    ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=main_folder_path & output_file_name & ".pdf", _
        Quality:=xlQualityStandard

End Sub

つぎは、すべてのシートを1つのPDFに保存する方法ですね。

処理の流れはつぎのような感じ。

  1. 保存するフォルダまでのフルパスを設定する
  2. もしフォルダがなければ作成する
  3. 1つにまとめたPDFをそのフォルダのなかに保存する

使いかた: すべてのシートを1つのPDFに保存する方法

  1. 保存するPDFファイルの名前を設定する
    Dim PDF_file_name as String
    PDF_file_name = "PDF_sample"
    
  2. 保存するPDFのフォルダ名を設定する
    Dim folder_name as String
    folder_name = "PDF_folder"
    
  3. Callして「ファイルの名前」「フォルダ名」をいれる
    Call makePDFFileAll(PDF_file_name, folder_name)

選択したシートを1つのPDFにする方法

Sub makePDFWrapSheets(sheet_name_array As Variant, _
    output_file_name As String, output_folder_name As String)

    Dim main_folder_path As String
    main_folder_path = ThisWorkbook.Path & "\" & output_folder_name & "\"
    
    If Dir(main_folder_path, vbDirectory) = "" Then MkDir main_folder_path
    
    Worksheets(sheet_name_array).Select
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=main_folder_path & output_file_name & ".pdf", _
        Quality:=xlQualityStandard

End Sub

さて最後は、選択したシートを1つのPDFに保存する方法です。

処理の流れはつぎのような感じ。

  1. 保存するフォルダまでのフルパスを設定する
  2. もしフォルダがなければ作成する
  3. 複数のシートを選択して1つにまとめる
  4. 1つにまとめたPDFをそのフォルダのなかに保存する

使いかた: 選択したシートを1つのPDFに保存する方法

  1. PDFにしたいシート名を配列に設定する
    Dim print_sheets as Variant
    print_sheets = Array("Sheet_1", "Sheet_2", "Sheet_3")
    
  2. 保存するPDFファイルの名前を設定する
    Dim PDF_file_name as String
    PDF_file_name = "PDF_sample"
    
  3. 保存するPDFのフォルダ名を設定する
    Dim folder_name as String
    folder_name = "PDF_folder"
    
  4. Callして「シート名」「ファイルの名前」「フォルダ名」をいれる
    Call makePDFWrapSheets(print_sheets, PDF_file_name, folder_name)

まとめ: いろんなシートをPDFに保存していこう

  1. 選択したシートごとに1つずつPDFを作成する方法
  2. すべてのシートを1つのPDFにする方法
  3. 選択したシートを1つのPDFにする方法

はい、この3つの方法でPDFの保存は完ぺき。

使えるところけっこう多いんで、覚えておくと効率化が進むかもしれませんね。

関連【VBA】業務効率化に便利なツール【まとめ】