【PDF出力マクロ】Excelで作成・集計したデータを
範囲指定してPDF出力する方法(全コード掲載)

Excel / VBA

こんにちは、てつおです。今回は以前の記事で作成した見積をPDF出力するマクロを作りたいと思います。どんな場面でもこのマクロをご利用いただくことは可能ですが、今回はわかりやすい例ということで結婚式での見積を想定したケーススタディとなります。 想定としては、結婚式場が見積をExcelで作成し、お客さんへその見積もりを渡す際にPDFで渡す必要があるためExcelから範囲を指定してPDF出力できるようなマクロを作って参りたいと思います。 ちなみに余談ですが、私も本業で見積やPurchase Orderを作成する際にこのマクロを使って事務の方にExcelをお渡しして利用いただいたりもしています。では、早速PDF出力のマクロを見ていきましょう!!

目次

  1. PDF出力するデータ(今回はデータ入力された見積シート)を事前に準備

  2. マクロをコピー&ペーストし、マクロの微修正

  3. (おまけ)マクロ実行ボタンを作成し、誰でもPDF出力できるようにする

1.PDF出力するデータを事前に準備

まずは、PDF出力するものを準備しておきます。今回私は、以前の記事内で作成した結婚式場の見積もりを使っていきたいと思います。

参考:【最新】Excelマクロでテーブルを操作して見積を作成|コピーして利用可能なVBAコード掲載

イメージとしては以下のような見積がExcelでできている状態を仮定します。

これで、下準備は完了です。皆さんも、PDF出力したいものをご準備ください。

2.マクロをコピー&ペーストし、マクロの微修正

では、いよいよマクロを作っていきましょう!いきなりですが、以下のマクロをコピペしちゃってください。

Sub PDF出力()

    Dim ws As Worksheet
    Dim savePath As String
    Dim saveName As String
    Dim saveFullName As String
    Dim customerName As String
    Dim salesName As String

    ' 対象のワークシートを指定(ここではアクティブなワークシート)
    Set ws = ActiveSheet

    ' デフォルトの保存先をExcelファイルが保存されている場所に設定
    savePath = ThisWorkbook.Path
    
    'ファイル名に日付、顧客名、担当者名が入るように設定
    customerName = Worksheets("見積シート").Range("C3").Value 'お客様名
    salesName = Worksheets("見積シート").Range("C39").Value 'シート入力者名
    saveName = Format(Date, "yyyymmdd") & "_" & customerName & "_" & salesName 'PDFファイル名を指定

    ' ファイル保存先の選択
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "PDFファイルとして保存"
        .FilterIndex = 2
        .InitialFileName = savePath & "\" & saveName & ".pdf" ' 拡張子を含むファイル名を指定
        If .Show = -1 Then
            ' ファイルが選択された場合
            saveFullName = .SelectedItems(1)
        Else
            ' キャンセルされた場合
            Exit Sub
        End If
    End With

    ' ファイル名から拡張子が .pdf でない場合は追加する
    If Right(saveFullName, 4) <> ".pdf" Then
        saveFullName = saveFullName & ".pdf"
    End If

    ' PDF保存設定
    With ws.PageSetup
        .Zoom = False       '倍率をクリア
        .FitToPagesWide = 1 '横方向に1ページに収める
        .FitToPagesTall = 1 '縦方向に1ページに収める
        .Orientation = xlPortrait '縦向き印刷
        '.PaperSize = xlPaperA4 'A4で出力
        .PrintArea = "A1:I39" '印刷範囲の指定
    End With

    ' PDF出力
    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=saveFullName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    ' PDF出力完了メッセージ
    MsgBox "PDFファイルが以下の場所に保存されました: " & vbCrLf & saveFullName
    


End Sub

コピペが完了したら、あとは「’ファイル名に日付、顧客名、担当者名が入るように設定」の部分だけ皆さんのExcelに合わせた状態に編集してみてください!
私の場合、保存するファイル名に日付、顧客名、担当者名が入るように設定してみました。

3.(おまけ)マクロ実行ボタンを作成し、誰でもPDF出力できるようにする

では最後に、マクロを誰でもボタン1クリックで実行できるようにしておきましょう!まず初めに、適当な図形を使ってボタンの形状を作成してみてください。私は以下のような感じで作ってみました。

続いて、作成した図形の上で右クリックをして、「マクロの登録」をクリックします。

最後に、先ほど作成したマクロを選択して、OKをクリックすれば完成です。

これで、ボタンを押すと先ほどのマクロを実行することが出来るようになります。Excelに慣れてない方にマクロを使ってもらう際、私は必ずボタンを作って操作ミスの内容なちょっとした工夫をしています。一人で利用する分には不要かもしれないですが、もしほかの方にマクロを使ってもらうのであれば是非ボタンまで作成してみてください。

以上