【VBA】複数シートを1つのPDFデータで保存する方法~サンプルコードを掲載~

 

複数シートを1つのPDFデータで保存したい!

 

このような要望をVBAを使って解決します。

 

この記事では

複数のシートを1つのPDFデータで保存するVBAの作り方、コードの解説

を紹介しています。

 

このVBAは以下のような問題を抱えている方におすすめ

  • エクセルデータをPDF形式で保存することが多い
  • シートをどんどん増やして編集作業をしている
  • PDFデータをメールに添付することが多い

 

PDF出力する業務の効率をアップさせたい!という方は是非参考にしてみてください。

 

広告

【VBA】複数シートを1つのPDFで保存するVBA

複数シートを1つのPDFで保存するマクロはどういう処理をするのか

を図を使ってご紹介していきます。

 

1.いつも通りエクセルデータの編集をする

 

2.PDF出力したいシート番号を「X3セル」と「Z3セル」に入力

 

 

3.「PDF出力ボタン」をクリック

 

4.フォルダ内のPDFデータが保存される

 

使い方は

PDF出力したシート番号を入力して「PDF出力ボタン」をクリック

たったこれだけ。

 

一瞬で複数のシートを1つのPDFデータで保存することができます。

 

Left Caption

ガッツポーズの人

シート数が10個だろうが100個だろうが関係ありません。

 

サンプルコード

複数シートを1つのPDFで保存するVBAに設定されているコードがこちら

Sub PDF保存()
    Dim folder_path As String
    folder_path = ThisWorkbook.Path & "\"
    Dim Num1, Num2 As Long
    Dim sheet_counts2 As Long
    Dim sheet_container() As Variant
    'X3セル、Z3セルに記入された数字を変数に格納
    Num1 = ActiveSheet.Cells(3, 24)
    Num2 = ActiveSheet.Cells(3, 26)
    sheet_counts1 = Worksheets.Count
                '配列を使ってコピペした全てのシートをアクティブにする
                ReDim sheet_container(Num1 To Num2)
                For i = Num1 To Num2
                sheet_container(i) = Sheets(i).Name
                Next i
            Sheets(sheet_container).Select
            'PDF出力
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & "写真番号" & ActiveSheet.Cells(3, 24) & "~ 写真番号" & ActiveSheet.Cells(3, 26) & ".pdf", Quality:=xlQualityStandard, OpenAfterPublish:=False
End Sub

 

12行目から16行目までが

複数のシートを選択(アクティブ)するVBA

です。

配列とFor~Nextを使って指定する写真番号を変数Sheet_containerに格納しています。

 

18行目は

「保存する場所」「データ名」を指定してPDF出力するVBA

です。

 

VBAの導入方法

1.様式を設定

 

2.標準Moduleを作成

 

3.Module1にコードを作成

 

入力するコードは上記で紹介しているサンプルコードをコピペしてください。

 

4.実行ボタンを作成

 

5.ボタンにPDF出力VBAを登録

 

以上の手順でVBAの導入は完了です。

 

注意点は、

様式設定でシート番号を入力するセル場所を間違えないこと

 

X3セルとZ3セルに入力された数値を取得するVBAが設定されているので、

違った場所にページ番号を入力してしまうとマクロが正常に動作しません

 

PDF保存するVBAの基本

 

PDF保存VBAはExportAsFixedFormatメソッドを利用します。

 

構文がこちら

object.ExportAsFixedFormat(Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExClassPtr)

 

複雑な処理は必要ない!という場合は、

「object」「Type」「FileName」の3つの要素だけ

を設定するだけでもOKです。

 

3つの要素をどのように設定すればいいのかというと、

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & “PDFデータ"

と記入した場合、各要素は以下のよう意味になります。

 

object・・・対象となるブックやシートを指定

 

→ActiveSheet

操作中のシートを対象とする

Type・・・保存形式を設定

 

→xlTypePDF

拡張子がPDF形式のファイルを作成する

FileName・・・保存先とファイル名を入力

 

→ThisWorkbook.Path & “\"& “PDFデータ"

マクロを設定したブックと同じ場所に「PDFデータ」というファイル名で出力される

 

難しく感じるポイントは「FileName」をどう定義するのかないでしょうか。

ファイル名にマクロ実行時の日付、時間を含めることでファイル名の被りによるエラーの発生を防ぐことができるのでおすすめです。

 

業務内容に合わせてPDF保存するVBAを導入するには

業務内容に合わせたVBAを設定するには、

自分でVBAを設定する方法VBA開発依頼をする方法

の2つがあります。

 

自分でVBAを設定する方法

自分でVBAを設定する手順がこちら

  1. どのような処理をしたいのか具体的なイメージを持つ
  2. VBAを書いてみる
  3. ネットや参考書を使って問題点を解決していく

 

Left Caption

ガッツポーズの人

私はこの方法でいくつもの効率化マクロを開発

今回紹介した「複数シートを1つのPDFデータで保存するVBA作成」の場合は以下の流れで作業を進めました。

  1. 複数シートを1つのPDFデータで保存したい
  2. 配列を使えば実現可能では?
  3. PDF保存したいシートだけを選択して配列に格納するにはどうすればいいの?
  4. For~Nextと配列を組み合わせてPDF保存するシートだけをアクティブにして配列に格納しよう

 

このような流れで一つ一つ疑問を解決して業務内容に合わせたVBAに仕上げていきました。

 

作業をしてみて感じたことが、

「For~Next」と「配列」を組み合わせて設定する方法が難しすぎる!参考書やネットで調べても求めている情報が全然見つからない!

です。

 

作業中のシートだけをPDF保存するならExportAsFixedFormatメソッドを設定するだけですが、

複数あるシートからPDF保存したいシートだけを選択して1つのPDFデータで保存する

となると簡単ではありません。

 

Left Caption

ガッツポーズの人

めちゃくちゃ苦労しました。。。が、出来上がったときの達成感がハンパない!!

 

関連記事「PDF出力を完全自動化するマクロ」では、

「複数シートを1つのPDFデータで保存するVBA」に加えて「写真を貼り付けるVBA」が組み合わされているVBAをダウンロード

することができます。

 

役立つVBAが数多く設定されているので、自分でVBAを設定したい!と考えている方は是非参考にしてみてください。

 

 

VBA開発依頼をする方法

当ブログが行っているVBA開発代行サービスの依頼方法は、

現状このようなエクセル作業をしていて自動化したい!

と伝えるだけ。

 

エクセル業務の効率がアップするようなVBAの提案、開発を行っています。

>>>マメBlogのVBA開発依頼の詳細はこちら

 

関連記事「年間50件達成!!マクロ開発実績について」ではマメBlogが行ってきたVBA開発の実績が詳しく紹介されています。

 

どんなVBA開発を行っているのか、費用はどれくらいかかるのか、などVBA開発依頼サービスに興味のある方は是非チェックしてみてください。