こんにちは、事務系社員のichi3270です。
Wordの差込印刷機能、とても便利ですよね。
私も色々な仕事で活用しまくってます。
でも、たまに諸々の事情で、Excelだけで差し込みしたいことってありませんか?
・・・ということで、Excelで差し込んだPDF帳票を一括出力する方法を考えてみました。
成果物はこんな感じ。
この記事では、このような、PDFに差し込みして一括出力するマクロの作り方を解説します。
帳票をつくる
まずは、差し込み先となる帳票をExcelで作りました。(お試しなので適当ですみません・・・)
シート名は 帳票 とします。
やっぱこういう日本的な帳票はExcelが作りやすいよね~
台帳をつくる
次に、帳票に差し込むためのデータを作ります。
この記事を参考に作ってみる場合は、A列は「管理番号」、B列は「一括印刷フラグ」の列にする必要があります。それ以外の列は、お好きにしていただいてOKです。
また、シート名は 台帳 とします。
この後の工程で、B列のセルに「Y」っていれると一括印刷されるようにする予定~
帳票と台帳をVLOOKUP関数でリンクさせる
次は、台帳のデータを帳票に差し込みできるようにしていきます。
A1・A2セルは、管理番号を入力する欄にします。
ここへ入力した管理番号をもとに、台帳シートのデータを取得して差し込みします。(ここでは、VLOOKUP関数を使用しました)
VLOOKUP関数は基本中の基本かつ、超重要な関数!
わからない人はネットで調べて来てね~(投げやり)
ここまでだけの作業でも、結構便利だよね~。
フォルダ作成 & ファイルをxlsm形式で保存
ここまでできたら、ファイルを保存しましょう。
まずは、「Excel差込印刷」というフォルダを作ります。
そして、そのフォルダ内に「PDF」という名前でフォルダを作ります。
その後、先ほどまでのExcelファイルを、名前をつけて保存で保存します(ファイル名はなんでもいいです)。
ファイルの種類はExcel マクロ有効ブック (*.xlsm)を選択してください。
次の工程でつくるマクロは、PDFフォルダにファイルを出力するマクロだよ~
マクロを作成する
次に、マクロを作っていきます。
・・・といっても、下記の手順どおりにやればOKです。
開発タブが表示されない人は下記の記事を参照~(外部サイト)
Option Explicit Sub 一括PDF出力() ' 変数宣言 Dim ws帳票 As Worksheet: Set ws帳票 = Worksheets("帳票") Dim ws台帳 As Worksheet: Set ws台帳 = Worksheets("台帳") Dim 台帳最終行 As Long: 台帳最終行 = ws台帳.Range("A1").CurrentRegion.Rows.Count Dim i As Long ' 一括出力対象データ数の確認 Dim 出力データ数 As Long: 出力データ数 = 0 For i = 2 To 台帳最終行 If ws台帳.Cells(i, 2).Value = "Y" Then 出力データ数 = 出力データ数 + 1 End If Next ' ユーザーに処理続行の確認 If 出力データ数 > 0 Then Dim rc rc = MsgBox(出力データ数 & "件のデータをPDF出力します。よろしいですか?", vbYesNo) If rc = vbNo Then MsgBox ("処理を中断しました。") Exit Sub End If Else ' 対象データなしの場合は処理終了 MsgBox ("出力対象のデータがありません。") Exit Sub End If ' PDF出力処理 Dim 管理番号 As Long For i = 2 To 台帳最終行 If ws台帳.Cells(i, 2).Value = "Y" Then 管理番号 = ws台帳.Cells(i, 1).Value ws帳票.Cells(2, 1).Value = 管理番号 ws帳票.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=ThisWorkbook.Path & "\PDF\" & 管理番号 & ".pdf" End If Next ' 完了メッセージの表示 MsgBox (ThisWorkbook.Path & "\PDF" & " にPDFファイルを出力しました。") End Sub
一括出力ボタンをつくる
最後に、一括出力用のボタンを追加します。
これも、下図のとおり作業すればOKです。
これでボタンが追加できました。
あとは、最初の見本動画のとおり、使ってみるだけです。
解説は以上です~。
最後まで見て頂いてありがとうございました~!
コメント
とても参考になりました。
ありがとうございます。
一つお聞きしたいのですが
出力されるpdfファイルを1つにまとめることは出来るのでしょうか?
コメントありがとうございます。
すみませんが、今の私の知識ではできなそうです・・・。
お手数ですが、出力後に、フリーソフト等で1つのPDFファイルに合体させてください。
とても参考になり、ありがとうございます。
PDF変換後、ファイル名が
1pdf 3pdf …ではなく、支払先名 C9セルの
株式会社 Cメンテナンス pdf と変換できないでしょうか?
上記のコードを、下記に変更すればOKかと思います。
※"G"の部分は、「台帳」シートの中から、ファイル名にしたい列のアルファベットにします。
こんにちは。
教えてください。
これは人づつPDF形式に変換して、保存していますが、エクセル形式のまま同じように保存したいです。
コードをどのように変更したら良いでしょうか
こんにちは。
再度コメントしますが、ぜひ教えてください。
これは一つずつPDF形式に変換して、保存していますが、エクセル形式のまま同じように保存したいです。
コードをどのように変更したら良いでしょうか
ichi3270さん、こんにちは。素敵な情報ありがとうございます。
今やろうとしている業務が劇的に省力化されるので、当ページを参考に書類への差込を
作ってみました。
最後の「PDF一括出力」ボタンを押すと、
実行時エラー’9’
インデックスが有効範囲にありません。
となり、デバックボタンを押すと、
‘ 変数宣言
Dim ws帳票 As Worksheet: Set ws帳票 = Worksheets(“帳票”)
Dim ws台帳 As Worksheet: Set ws台帳 = Worksheets(“台帳”) の
: Set ws台帳 = Worksheets(“台帳”)➡この部分が黄色の網掛けになっています。
マクロは、まったくの初心者レベルでネットで調べても良くわかりません。
これだけの情報で、何かわかることあるでしょうか?
データを入力する方のシートの名前は 台帳 になっていますでしょうか?
もし違うシート名になってしまいっていると、「インデックスが有効範囲にありません。」が発生すると思います。(シート名にスペースが入っていたりしてもダメです)
帳票と台帳を同じブックにしたところ、うまくいきました!
ありがとうございました。100枚を超えるエクセル書類を一気に印刷し配布することができました。感謝感激です。
今後出てくる業務にも応用出来そうですので、活用したいと思います。
本当にありがとうございました!
リスト75名なのですが1番目の人だけが75PDF化されてしまいます。
どうすれば1から75番目までPDF化できますか?
A列に管理番号はあります。
実行時エラー’1004’
ドキュメントが保存できませんでいた。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。
となり、デバックボタンを押すと、
ws帳票.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & “\PDF\” & 管理番号 & “.pdf”
の部分が黄色の網掛けになっています。
何が原因でエラーとなっているのでしょうか。ご教示の程よろしくお願いいたします。