![見出し画像](https://assets.st-note.com/production/uploads/images/114544734/rectangle_large_type_2_52fb6e7809d80b290ae4c5ad9f0ed13f.png?width=1200)
PDF出力を完全自動化するマクロ【複数のページを1つのPDFファイルで出力可能】
エクセルからPDFに変換する作業を自動化したい!
こんな要望にお応えします。
本noteで紹介するPDF出力マクロを導入すれば、以下のような問題を解決できます。
印刷範囲、印刷ページ数の設定に時間がかかる
複数のページを1つのPDFデータで出力したい
PDFファイル名の入力を自動化したい
印刷範囲の設定やファイル名の入力って意外とめんどうな作業ですよね。。。
PDF化する作業を毎日毎日こなしていると、
もっと他の仕事に時間を費やしたい!もっと手間のかからない作業方法はないのだろうか?
と考えるようになり「PDF出力を完全自動化するマクロ」を開発しました。
編集したエクセルを必ずPDFで保存する!
こんな処理を毎日繰り返し行っている方には絶対にチェックしてもらいたい内容になっています。
記事の最後では「PDF出力マクロが設定されたエクセルファイル」をダウンロードすることが可能です。
すぐにでもPDF出力マクロを使ってみたい!という方は参考にしてみてください。
仕事に導入したPDF出力マクロとは
PDF出力マクロはどんなことができるのかを動画にまとめたので参考にしてみてください。
複数のページを1つのPDFデータで出力するマクロの特徴
印刷範囲の設定を自動化
変動するページ数に合わせて1つのPDFデータで出力
PDFデータ名の自動設定
PDFデータ保存先を自由に設定
いかがでしょうか。
このマクロを導入すれば写真編集作業の効率を飛躍的にアップさせることができます。
PDF出力マクロの使い方
写真表作成マクロに設定された「複数のページを1つのPDFファイルで出力するマクロ」の使い方を解説していきます。
①設定シートの一覧表に基本情報を記入
![](https://assets.st-note.com/img/1693088976678-dTwNW6UQiO.png?width=1200)
②設定シートA列の「番号」を入力
![](https://assets.st-note.com/img/1693089173730-gifLhQpyr0.png?width=1200)
設定シートに入力した基本情報や写真が自動的に表示されます。
③PDF出力したい番号を入力し「PDF出力」をダブルクリック
![](https://assets.st-note.com/img/1693089372676-CPfXQQJVdV.png?width=1200)
エクセルが保存されているフォルダ内にPDFデータが出力されます。
処理結果がこちら
![](https://assets.st-note.com/img/1693089598744-E55qPgbGBq.png?width=1200)
「写真番号1~写真番号3.pdf」というファイルが自動作成されていて、
ファイルを開いてみると、写真番号1から写真番号3までのデータ全てが1つのPDFファイルで出力されています。
使い方としては、
一覧表に基本情報を入力し、番号を選択するだけ!!
たったこれだけの操作で写真付き資料をPDFデータとして保存することができます。
このマクロの大きなメリットは、過去に作成した書類をすぐに出力できる!ということです。
エクセルファイルの名前を業務ごとに変えて保存していて、ファイル数がどんどん増えてしまう!という問題を解決することができます。
【サンプル事例】写真表作成マクロに設定されている2種類のマクロ
![](https://assets.st-note.com/img/1693138048866-wRx62ye4Z7.png?width=1200)
仕事に導入した写真表作成マクロには、
大きく分けて「写真データを自動的に貼り付けるマクロ」と「条件によって印刷範囲を自動調整しPDF出力するマクロ」
の2種類が設定されています。
単体でもめちゃくちゃエクセル業務の効率化に繋がりますが、2つ組み合わせて導入することで効果は倍増。
いろんなエクセル業務に応用される2種類のマクロをそれぞれ詳しくご紹介します。
写真を自動的に貼り付けるマクロ
写真データを貼り付けるマクロにはShapeを使用します。
Shapeで写真を貼り付けるには「写真データが保存されている場所」と「写真データのファイル名」の情報が必要です。
サンプルとして紹介している写真表作成マクロでは、
設定シートの6列目が「写真データが保存されている場所」、7列目から14列目が「写真データのファイル名」
の情報となります。
![](https://assets.st-note.com/img/1693134847382-gSsDrzifaK.png?width=1200)
写真表作成マクロのコードの中で「写真データを貼り付けるマクロ」に該当する部分がこちら
syasin = Ash.Cells(i, 6) & "\" & Ash.Cells(i, 7) & ".JPG"
Set zukei = Bsh.Shapes.AddPicture(Filename:=syasin, LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=0, Height:=0)
貼り付けた写真データの表示位置、大きさを調整する部分がこちら
With zukei
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
.LockAspectRatio = msoTrue
'''''''''''''''''''''ここの数値を変更することで写真の大きさ、配置を変更できる''''''''''''''''''''''''''
.Height = Bsh.Range(Bsh.Cells(10, 4), Bsh.Cells(22, 15)).Height
rx = (Bsh.Range(Bsh.Cells(10, 4), Bsh.Cells(22, 15)).Width - .Width) / 2
.Left = Bsh.Range(Bsh.Cells(10, 4), Bsh.Cells(22, 15)).Left + rx
.Top = Bsh.Range(Bsh.Cells(10, 4), Bsh.Cells(22, 15)).Top
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End With
指定するセル範囲を編集することで、
貼り付ける写真データの表示位置、大きさを簡単に変更することが可能
です。
今回は、「写真データが保存されている場所」と「写真データの名前」の情報からマクロを構成していますが、
「写真データが保存されている場所」のみの情報から写真データが保存されているフォルダ内全ての写真を自動的に貼り付ける!
というマクロも設定可能です。
下記の記事では、指定するフォルダ内の全ての写真データを自動的に貼り付けるマクロについて詳しくご紹介しています。
>>>フォルダ内の写真データを貼り付けるマクロの解説はこちら
写真データの貼り付け作業を自動化したい!という方は是非参考にしてみてください。
複数ページを1つのPDFファイルで出力するマクロ
複数ページを1つのPDFファイルで出力するマクロには、ExportAsFixedFormatメソッドを使用します。
基本構造
WorkSheetオブジェクト.ExportAsFixedFormat Type:=xlTypePDF, fileName:=ファイル名
「WorkSheetオブジェクト」や「ファイル名」には変数を使って定義することがほとんどです。
シートを選択 → 印刷範囲を選択 → ExportAsFixedFormatでPDF出力
というコードでPDF出力マクロを作成することができます。
サンプルの写真表作成マクロのコードの中で「複数ページを1つのPDFファイルで出力するマクロ」に該当 する部分がこちら
'「設定表」シートの145行目に写真データ情報がある場合、A4ヨコ2枚分の印刷範囲を設定
'「写真表」シートを右端にコピペする(2シート分作成し1ページ目と2ページ目の印刷範囲を分ける)
Bsh.Cells(2, 24) = i - 2
Worksheets(2).Copy after:=Sheets(Worksheets.Count)
Worksheets(Worksheets.Count).PageSetup.PrintArea = Bsh.Range(Bsh.Cells(1, 1), Bsh.Cells(38, 34)).Address
Worksheets(2).Copy after:=Sheets(Worksheets.Count)
Worksheets(Worksheets.Count).PageSetup.PrintArea = Bsh.Range(Bsh.Cells(39, 1), Bsh.Cells(76, 34)).Address
End If
Next
'配列を使ってコピペした全てのシートをアクティブにする
sheet_counts2 = Sheets.Count
ReDim sheet_container(sheet_counts1 + 1 To sheet_counts2)
For i = sheet_counts1 + 1 To sheet_counts2
sheet_container(i) = Sheets(i).Name
Next i
Sheets(sheet_container).Select
'PDF出力
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folder_path & "写真番号" & Num1 & "~ 写真番号" & Num2 & ".pdf", Quality:=xlQualityStandard, OpenAfterPublish:=False
Application.DisplayAlerts = False
'コピペしたシート削除する
Worksheets(sheet_container).Delete
Application.DisplayAlerts = True
複数のページを1つのPDFファイルで出力するには、
配列Arrayでシートを選択してExportAsFixedFormatでPDF出力する
というコードにする必要があります。
コードの流れとしては、
印刷範囲を決める → シートをコピペする → 追加したシートを配列Arrayで選択 → ExportAsFixedFormatでPDF出力 → 追加したシートの削除
と言うイメージです。
なぜコピペしたシートをPDF出力後にわざわざ削除するのか?
と疑問に感じる方が多いと思いますが1つのPDFファイルで出力するにはこの回りくどい方法しかない!と思っています。
For~NextやFor~Eachを使って、
印刷範囲を選択 → PDF出力 → 印刷範囲を選択 → PDF出力 → ・・・
このコードでも複数のページをPDF出力することは可能ですが、PDFファイルが複数作成されてしまいます。
この場合の処理結果がこちら
![](https://assets.st-note.com/img/1693135727626-Jv8fcP1baP.png?width=1200)
PDFファイルが複数出力されても問題ない!という方は、For~NextやFor~Eachを使ったマクロの方が簡単なのでおすすめです。
PDF出力マクロといっても、印刷範囲の指定やシートの指定方法によっていろんなコードの書き方があるので自分なりの方法を模索してみてください。
PDF出力マクロを業務内容に合わせてアレンジする方法
![](https://assets.st-note.com/img/1693138081435-IhUYSrhNhO.jpg?width=1200)
今回紹介した、
「複数のページを1つのPDFファイルで出力するマクロ」を業務内容に合わせてアレンジしたい!!
このように感じてくれた方がいらっしゃるのではないでしょうか。
業務内容に合わせたVBAを導入することができれば、
2時間~3時間もかかっているエクセル業務を1時間以内に処理する
ことだって可能です。
なんとしてもエクセル業務の効率をアップさせたい!と考えている方のために
業務内容に合わせてVBAをアレンジする2つの方法
を具体的にご紹介します。
それは、
「VBAのコード開発を第三者に依頼する」または「自分でVBAのコードを編集する」
という方法です。
VBA開発を依頼する
「VBAのコード開発を第三者に依頼する」は、
プログラミング開発を請け負っている会社、または個人に依頼することで
業務内容に合わせたVBAの導入ができます。
通常の業務に専念しつつエクセル業務の効率をアップできるのでめちゃくちゃおすすめの手段なのですが、
依頼先によっては費用が高い!担当者によって完成度の差が激しい
などのデメリットがあります。
勤めていた会社でよく利用していたのですが、
「これだけのVBAでこんなに請求されるの!??」
と驚かされたことも。。。
VBAのコード開発を依頼予定の方は、
依頼先の候補として「マメBlogのエクセルVBA開発サービス」
を検討してみてください。
関連記事「【マクロ開発実績】年間50件の受注達成!」では、VBAの開発実績を詳しく紹介しているので参考にしてみてください。
マメBlogが提供するVBA開発サービスの特徴がこちら
現在行っている業務内容に合わせてVBAを設定
依頼を受けてから2週間以内に納入
簡単な改修は追加費用なしで実施
「実際に使っている様式」「職場での運用方法」に合わせてVBAを設定するので、
めちゃくちゃ使いやすいと大好評。
効率をアップさせたい!でもVBAを1から勉強する時間なんてない!!
こんな方は、是非「マメBlogVBA開発サービス」の利用を検討してみてください。
⇒ ⇒ ⇒ マメBlogVBA開発サービスはこちら
自分でVBAのコードを編集する
「自分でVBAのコードを編集する」にはVBAの勉強が必要です。
プログラミングの勉強って難しそぅ!
と思われるかもしれませんがそんなことはありません。
VBAは
「ネットや参考書で情報をゲットしやすい」「エクセルを使えればすぐにでもVBAを操作できる」
という理由から初心者が挑戦しやすいプログラミングだと言われています。
例えば、
【VBA 書き方】
【VBA 転記 サンプルコード】
このようにネット検索すればいろんな情報を手に入れることができて、開発しようとしているVBAの難易度をすぐ調べることができます。
簡単なVBAであれば、
ネットや参考書で紹介されいるコードを組み合わせて業務内容に合わせたVBAに仕上げる
ことが可能です。
実現させたいVBAの難易度を確認してから、
「自分でVBA開発を進めるのか」それとも「第三者にVBA開発を依頼するのか」
を検討すると効率よくVBAを導入できます。
今後のためにVBAの知識を身に付けて業務内容に合わせたVBAを自ら設定したい!
と考える方はエクセルVBAの情報を発信しているメルマガ登録がおすすめ。
メルマガでは、以下のような情報を不定期に発信しています。
普通の会社員がVBAの知識を身に付けた方法
業務内容に合わせたVBAの開発方法
VBA開発依頼の中から「これはエクセル業務で使える!!」と個人的に感じたコードの紹介
参考書やプログラミングスクールでの授業で行うような
「変数の意味とは」「プロパティとは」
という解説は行いません。
というか、私はプログラマーではないので難しい解説はできません。
効率の悪いエクセル業務を毎日、何時間も強いられた苦しい経験から得たスキルを使って
エクセル業務の効率がアップするVBAのコードや作り方の情報
を積極的に紹介しています。
プログラミング学習は内容が難しいため途中で挫折する人が多い!
こんな不安からVBA学習をスタートさせていない方は、まずは無料で始められるメルマガでVBAの情報をお得にゲットしてみてください。
⇒ ⇒ ⇒仕事に役立つVBAの情報が手に入るメルマガの登録はこちら
PDF出力マクロが設定されたエクセルファイルのダウンロード
![](https://assets.st-note.com/img/1693138108629-SnWRmw4XmL.jpg?width=1200)
下記では、サンプルとして紹介している写真表作成マクロをダウンロードしてお使い頂くことができます。
設定されいるコードを業務内容に合わせた内容にアレンジして使いたい
サンプルのエクセルファイルに設定されている写真表の様式に合わせて仕事を進める
このような対応が可能な方は写真表作成マクロをエクセル業務の効率化に役立ててみてください。
ここから先は
この記事が気に入ったらサポートをしてみませんか?