hedgejanuary以前のぐちゃぐちゃなエクセルファイルを整えた話のおまけ。【Excel】他人から渡された使いにくいファイルたちとの付き合い方:その2https://adzukigenmai.com/2018/06/14/junk-in-excel-2/前回、ゴミのようなエクセルを渡される可能性が高い状況について書いた。属人化を促...当該業務には、最終的にデータが出来上がったら、その一部は対象となる社員へ通知書を出す、というフローがある。例にし、うちの会社に存在したバカバカしい作業とその解決策について説明したい。this:Relatedエクセルで作ったレター(帳票)を一枚一枚印刷やPDF出力するのって面倒くさい発行する通知書が数枚なら諦められるのだけれど、1事務所につき数十枚あり、しかも今の会社のプリンタはカードなどでの制御の設定なし。いちいち印刷し、取りに行って、とウロウロするのが非常に面倒くさい。いって、レターの内容が内容なので、同僚にも頼めない。いう作業のことを言っているのか。実際には、こんな書類をエクセルでは作っていないのだけど、あくまで作業内容の説明として、以下見てほしい。データシートと印刷用シートがあり、データシートのレコード数分、レターを発行する。インデックス番号を入力すると、レターの内容が変更される。一枚一枚印刷しなくてはいけない、ということ。インデックス番号の入力、印刷、インデックス番号の更新、印刷の繰り返し、もしくは、インデックス番号の入力、PDF出力、ファイル保存、インデックス番号の更新、PDF出力、ファイル保存の繰り返し。相手にとってはこの上なく迷惑な話だが、せめて愚痴を聞いてもらってスッキリしよう、とエクセルファイルの整理をしていたときに、「この通知書の印刷って非生産的すぎません?印刷しない事務所分についてはPDFで送らなくちゃいけないし・・・」と、手伝ってくれていた地域本社の社員に言ってみた。すると「僕も同じ作業をするけど、やっぱり面倒くさいって感じるからマクロを組んでるよ。内心「やったー」と飛び跳ねたいのを必死に抑えながら、「じゃあ、このファイルにもそのマクロ機能付けてくださいませんか?」とお願いしてみた。確かに少しは楽になるけどもそうして、送られてきたファイルには、インデックス番号入力の下に次の番号が表示される場所が付け足されていた(最後には意味がなくなるのだけど)。いう仕組みなんだろう、とワクワクしながら、インストラクションのメールを読んで、ちょっとだけがっかり。レターが印刷されます」だって1。結局、いちいち印刷しなくちゃいけない現実。私の期待は下回ったけれど、考え方は勉強になった。次のインデックス番号のセルを置くことで、マクロでも対応できるんだという発見。a'下に表示された数値をコピー。Sub【VBA】帳票を一気にPDF化して、後から必要なファイルだけ印刷するがベストでは?せっかく作ってもらったのに、改善要求なんてできるわけもなく、仕方がないので(!)、VBエディタを開けて、自分でちまちま書いてみることにした。ゴールは、レターごとの印刷やPDF化の作業の効率化。PDFの一括印刷の機能2を使えば、複数ファイルの印刷は簡単なので、「レターをPDF化して、ファイル名を付けて保存」をすれば解決できそうである。私の解答そうして出来上がったのが下のコード。去年・今年と使ったが、数十個のファイルがあっという間に出来上がるのは、手前味噌ながら便利。今回の例では、そこまで必要ではなかったのだけど、一気にすべてのレコード分を実行するのではなく、オフィス単位の方がいい場合もあるので、オフィス単位でPDF化するようにしている。別途、VLOOKUPの相対検索を使って、各オフィスの一番最初のインデックス番号の表を作り、Index欄の横に置く。作ったマクロは、ボタンに登録。表を参照しながら、インデックス番号を入力後、ボタンを押下。(了)注意点マクロの記録で対応するにしろ、VBAで対応するにしろ、レターの印刷設定を最初に行っておくのがいい。印刷設定のコードを書くことも可能だが、レコードによって変化するものでもないので、コード外で設定した方がラク。参考データコードで、セルの参照などをしているので、以下ワークシートのスクリーンショット。【Databaseシート】テーブル化し、【dFootballers】というテーブル名を付けている。【Letterシート】ワールドカップ中なので、日本代表のリストで作成。a】とかの方がいいじゃないか、とかは言わない。ここでは、些末なことだから。保存したPDFを複数選択→右クリック→【印刷】を選択。一回に選択できるのは10ファイルまで。