【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データで保存することができます。
サンプルコード
複数シートを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」「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を設定する手順がこちら
- どのような処理をしたいのか具体的なイメージを持つ
- VBAを書いてみる
- ネットや参考書を使って問題点を解決していく
今回紹介した「複数シートを1つのPDFデータで保存するVBA作成」の場合は以下の流れで作業を進めました。
- 複数シートを1つのPDFデータで保存したい
- 配列を使えば実現可能では?
- PDF保存したいシートだけを選択して配列に格納するにはどうすればいいの?
- For~Nextと配列を組み合わせてPDF保存するシートだけをアクティブにして配列に格納しよう
このような流れで一つ一つ疑問を解決して業務内容に合わせたVBAに仕上げていきました。
作業をしてみて感じたことが、
「For~Next」と「配列」を組み合わせて設定する方法が難しすぎる!参考書やネットで調べても求めている情報が全然見つからない!
です。
作業中のシートだけをPDF保存するならExportAsFixedFormatメソッドを設定するだけですが、
複数あるシートからPDF保存したいシートだけを選択して1つのPDFデータで保存する
となると簡単ではありません。
関連記事「PDF出力を完全自動化するマクロ」では、
「複数シートを1つのPDFデータで保存するVBA」に加えて「写真を貼り付けるVBA」が組み合わされているVBAをダウンロード
することができます。
役立つVBAが数多く設定されているので、自分でVBAを設定したい!と考えている方は是非参考にしてみてください。
VBA開発依頼をする方法
当ブログが行っているVBA開発代行サービスの依頼方法は、
現状このようなエクセル作業をしていて自動化したい!
と伝えるだけ。
エクセル業務の効率がアップするようなVBAの提案、開発を行っています。
>>>マメBlogのVBA開発依頼の詳細はこちら
関連記事「年間50件達成!!マクロ開発実績について」ではマメBlogが行ってきたVBA開発の実績が詳しく紹介されています。
どんなVBA開発を行っているのか、費用はどれくらいかかるのか、などVBA開発依頼サービスに興味のある方は是非チェックしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません