この記事では、「ExcelVBAでファイル処理を実行してみよう」で紹介した「リネームマクロ」の作成方法を連載形式で紹介しています。リネームマクロとは、複数のファイルの名前を一括で変更するマクロプログラム。実務で活用できる実用的なマクロです。連載の第1回目となるこの記事では、変更元のファイル名一覧を作成する部分を作成します。また、この記事をとおして、Dir関数の活用ポイントやDo...Loopステートメントの使い方などを実践的に学習できます。


リネームマクロのブックを準備しよう

初回ですので、新規ブックを作成して、「Sheet1」シートに下図のような内容を作成しておきましょう。なお、ファイル名一覧は7行目から入力される点がポイントとなりますので覚えておいてください。
新規ブックを作成してワークシートを作成

新規ブックを作成してワークシートを作成



Dir関数を活用してファイル名一覧を作成する

この記事では、コピー元のファイル名一覧を作成する部分を完成させます。
この記事で作成する機能

この記事で作成する機能



ファイル名一覧を作成するには、ファイルの名前を取得する必要があります。様々な方法が考えられますが、ここではDir関数を使用しましょう。Dir関数は、引数に指定したファイルパスのファイルを検索し、見つかったらファイル名を返します。このDir関数が返すファイル名を利用して、ファイル名一覧を作成しようというわけです。
Dir関数を活用してファイル名を取得

Dir関数を活用してファイル名を取得



ファイル名一覧を作成するには、複数のファイルを次々と検索する必要があります。この処理をDir関数で実現するには、3つのポイントがあります。


ポイント1 ワイルドカードを使用してDir関数の引数を指定する

Dir関数の引数に検索したいファイル名を記述してしまうと、ファイルをひとつしか検索できません。そこで利用したいのが、1つめのポイントとなる「ワイルドカード」という特殊な記号。ワイルドカードとは、どのような文字にもマッチさせることができる記号のことで、「任意の文字列(文字数も任意)」を表す「*(アスタリスク)」なら、「佐*」と記述するだけで、「佐」から始まる文字列をすべて検索できます。
ワイルドカード

任意の文字を表すワイルドカード「*」



このワイルドカードを使用すれば、複数のファイルを検索することができます。たとえば、Cドライブ内の「管理データ」フォルダにあるエクセルのファイルだけをすべて検索したい場合は、「C:?管理データ?*.xls」と記述します。ファイル名の部分でワイルドカードを使用していますね。エクセルのファイルに限らず、すべてのファイルを検索したい場合は、「C:?管理データ?*.*」と記述します。ファイル名だけでなく、拡張子にもワイルドカードを使用しているため、様々な拡張子のファイルを検索できる、というわけです。
ワイルドカードの記述例

ワイルドカードの記述例



ポイント2 2つめ以降のファイルを検索するDir関数の書き方

第2のポイントは、Dir関数の引数の書き方です。1つめのファイルを検索するときは、ワイルドカードを使用したファイルパスを記述しますが、2つめ以降のファイルを検索するときは、Dir関数の引数の記述を省略して「Dir()」と記述します。こうすることで、「1つめのファイル検索のときと同じファイルパス」で検索を続ける命令になるため、同じファイルパスで複数のファイルを次々と検索することができるのです。
2つめ以降のファイルを検索するときは、Dir関数の引数の記述を省略

2つめ以降のファイルを検索するときは、Dir関数の引数の記述を省略



ポイント3 検索を終了するタイミング

第3のポイントは、いつまでファイル検索を続けるか、という問題です。Dir関数を使用する場合、フォルダの中にファイルがいくつあるのか事前にわかりません。したがって、いつ検索を終了するのか、マクロの中で判断する必要があるわけです。ここで活用するのが、Dir関数の『ファイルが存在しないときに「""(空文字)」を返す』という性質。Dir関数が「""」を返したらファイル検索を終了する、ということにします。
Dir関数が「""」を返すまでファイル検索を実行する

Dir関数が「""」を返すまでファイル検索を実行する



作成するマクロのイメージを整理してみよう

Dir関数のポイントが確認できたところで、実際のマクロの流れをイメージしてみましょう。Dir関数でファイルを検索し、Dir関数が返すファイル名をファイル名一覧のセルに入力していくわけですから、マクロの流れは次のようになります。Dir関数で検索したあと、ファイルが見つかったかどうかを確認し、なかったらマクロを終了する点をしっかり押さえておいてください。
作成するマクロのイメージ

作成するマクロのイメージ



このようにして、ファイルの数だけファイル検索を繰り返すわけですが、先にも触れたとおり、事前にファイルの数を把握することができませんし、同じ命令を何度も書くのはナンセンスです。そこで、活用したいのがDo...Loopステートメントです。

Do...Loopステートメントについて解説します。次ページへどうぞ!