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関数はあるのですが、それより前のバージョンにはありません。前のバージョンでも使いたい場合はではどうすればいいのかというと、「ユーザー定義関数」というものを使います。

 

要は今までなかった機能をコードを通してつくってしまうということです。自分は以下のページを参考にさせていただきました。

 

参考ページにあるコードを使いたいエクセルファイルのVBEで表示される標準モジュールにコピペすることで使えるようになります。

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

このやり方を知ったときは、本当に目から鱗が落ちる思いでした。今までの自分であれば、印刷したいPDFがあった場合、次のような手順をとっていました。

 

PDFが入っているフォルダを開いて右上の検索ボックスに1つ1つ検索したいPDFのファイル名をコピペしていきます。それで表示されたPDFをダブルクリックして開いて印刷するという感じでした。

 

しかし「OR関数」を使うと一度に複数のファイルを検索できます。例えば「A」というファイルと「B」というファイルを検索したい場合、検索ボックスに「A OR B」と入れるとAとBのファイルを一度に検索して表示させることができます。

 

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

コメント