CONCAT関数と検索ボックスを利用してPDFを一括印刷するVBAとマクロ

前回は以下の過去記事から、ボタンひとつでPDFを印刷できるマクロとVBAができ

ないか試行錯誤したことについて書きました。

残念ながら自分の勉強不足のせいで上手く動作しなかったのですが、その理由は、

PDFが開く読み込み時間を待てずにエクセルからPDFへSendkeysメソッドで指示を

送ってしまうからではないか、と考えました。

現実の業務では今でも結構多めのPDF印刷の指示があったりするので、何とかして

この作業を自動化できないかと考えていろいろと試行錯誤をした結果、別の方法で

印刷できる方法を見つけました。今回はその方法について書いていってみます。

指定のPDFを一括印刷するための3つのアイデア

自分の理想としては、仕事で日々使っている表の中にあるPDFファイル名から印刷

したいいくつかをコピーして、別シートの指定の場所に貼り付けて、それでマクロ

のボタンを押すとコピペしたファイル名のPDFを自動で印刷できるようにしたいと

考えていました。

そのためにインターネットでPDFを一括で印刷できる良い方法はないかとあれこれ

調べていたら、いくつか良い方法を見つけました。それは以下の3つになります。

  • CONCAT関数
  • フォルダの検索ボックスはOR関数を使うと一度に複数検索できる
  • 検索ボックスで表示した複数のPDFは右クリックメニューから一度に印刷できる

上から順番に説明していきます。

CONCAT関数

CONCAT関数とはエクセル2016のバージョンから導入された関数です。これがどう

いう関数かというと、指定の範囲内の文字列をつなげられる関数です。

通常違うセルにある文字列をつなげる場合、文字列内に「&」を使うか、もしくは

CONCATENATE関数を使うのではないでしょうか。

例えばエクセルでA1セルに「A」、B1セルに「B」とあって、C1セルにA1セルとB1

セルの文字列をつなげて表示したかったとします。

「&」を使う場合、C1セルに「=A1&B1」と入れることで文字列をつなげて表示さ

せることができます。

CONCATENATE関数を使う場合は、引数にひとつひとつ「A1」「B1」と入れてや

らなければいけません。

今のは1つの例で2つのセル間の文字列しか出しませんでしたが、これが10とか20、

さらに50とか100個のセル間の文字列をつなげる場合、膨大な手間がかかります。

こういった問題を解決してくれるのがCONCAT関数です。例えばA1セルからA100

セルまで何らかの文字列が入っていて、それを全部つなげたいとします。

CONCATENATE関数などを使う場合であればA1セルからA100セルまで100個のセ

ルをいちいち引数に設定しなければいけません。要は100回の手間が必要というこ

とです。

CONCAT関数ならA1セルからA100セルまでを「範囲選択」するだけで文字列をつ

なげられます。A1セルを選択してA100セルまでドラッグすればいいだけなので、

2回の手間で済みます。

ちなみにエクセル2016にはCONCAT関数はあるのですが、それより前のバージョン

にはありません。前のバージョンでも使いたい場合はではどうすればいいのかとい

うと、「ユーザー定義関数」というものを使います。

要は今までなかった機能をコードを通してつくってしまうということです。自分は

以下のページを参考にさせていただきました。

concat関数の使い方とExcel2013以前の古いエクセルで使う方法

参考ページにあるコードを使いたいエクセルファイルのVBEで表示される標準モジ

ュールにコピペすることで使えるようになります。

OR関数でフォルダの検索ボックスを利用すると一度に複数のファイルを検索できる

このやり方を知ったときは、本当に目から鱗が落ちる思いでした。今までの自分で

あれば、印刷したいPDFがあった場合、次のような手順をとっていました。

PDFが入っているフォルダを開いて右上の検索ボックスに1つ1つ検索したいPDF

のファイル名をコピペしていきます。それで表示されたPDFをダブルクリックして

開いて印刷するという感じでした。

しかし「OR関数」を使うと一度に複数のファイルを検索できます。例えば「A」

というファイルと「B」というファイルを検索したい場合、検索ボックスに

「A OR B」と入れるとAとBのファイルを一度に検索して表示させることができ

ます。

ここでのポイントは以下の1つ。「OR」は大文字じゃないと反応してくれません。

小文字の「or」ではダメということです。