「フォルダの中身をすべてエクセルシート上に出力したい。」
「指定した拡張子のファイルをすべて削除したい。」
こんな作業をエクセルVBAで行うとき、Dir関数を使うと非常に便利です。
というわけでこの記事では、Dir関数の基本的な特性を、事例を用いて詳細解説していきます。
※あくまでも基礎講座の位置づけです。
実践編は別記事にて、ご紹介させていただいています。
それでは早速やっていきます!
Dir関数の特性解説
特性①:指定したファイル名を出力
まずはじめに今回の記事の主人公であるDir関数についてご紹介しておきます。
Dir関数とは、指定したファイルやフォルダの名前を出力してくれる関数です。
例えばデスクトップ上にあるtestというフォルダの中にtest.txtというファイルがあったとしましょう。
以下のような状態ですね。
このとき、以下のようなVBAコードを実行すると・・・
aaa = Dir(“C:\Desktop\test\test.txt”)
MsgBox aaa
このようなメッセージが出力されます。
「え?なんの意味があるの?」
ってなりますよね。
正直こんな使い方はしませんので、ここは覚えておかなくてもOKです。
本題はここからです。
特性②:ファイル指定はあいまいでOK
では次にこんなコードを実行してみましょう。
aaa = Dir(“C:\Desktop\test\”)
MsgBox aaa
※先ほどと違う点は、test.txtというファイル名を指定していないというところです。
先ほどとまったく同じ結果が出力されました。
「Dir関数とは、指定したファイルやフォルダの名前を出力してくれる関数です。」
と説明しましたが、ファイルを指定する際は、適当に指定しても何かしら手当たり次第に出力してくれるのです。
これが覚えておいてほしいDir関数の特徴一つ目です。
(乱暴な説明ですが、ざっくりこんなイメージを持っておけばOKです。)
特性③:繰り返すと別ファイルを拾ってくる
次に状況を少し変えてみましょう。
次は先ほどと同じフォルダの中にtest2.txtというファイルを追加しました。
この状況で以下を実行すると・・・
aaa = Dir(“C:\Desktop\test\”)
MsgBox aaa
aaa = Dir
MsgBox aaa
まずは先ほどと同じようにtest.txtが出力されました。
(こいつが一回目のMsgBoxです。)
OKを押すと次は、test2.txtが出力されました。
このようにDIr関数は、一度使った後にもう一度なにも指定しないで使用すると、同じ条件内で先ほど拾ったファイルとは別のファイルをまた拾ってきてくれるのです。
これが、覚えておいてほしいDir関数の特徴二つ目です。
特性④:拾うものがなくなったら空を出力する
次にまったく同じ状況で以下のコードを実行してみましょう。
aaa = Dir(“C:\Desktop\test\”)
MsgBox aaa
aaa = Dir
MsgBox aaa
aaa = Dir
MsgBox aaa
現在フォルダの中には2つしかファイルがありません。
この状況で3回目のDirではなにが出力されるのか見てみましょう。
一回目(想定通り)
二回目(想定通り)
三回目(!?)
なにも出力されませんでしたね。
つまり、Dir関数は拾うものがないときは空(VBA上でいう””)を出力してきます。
これが、覚えておいてほしいDir関数の特徴三つ目です。
特性⑤:基本はファイルだけ(フォルダは無視)
もう少し変えてみましょう。
次は先ほどの状況から追加でひとつフォルダを作っておきましょう。
さて、ここで問題です。
この状況で以下のコードを実行するとどうなるでしょうか?
aaa = Dir(“C:\Desktop\test\”)
MsgBox aaa
aaa = Dir
MsgBox aaa
aaa = Dir
MsgBox aaa
Dirが三回あるからフォルダのTESTも出力されるような気がしますが、この場合は先ほどと同じく、
一回目がtest.txt
二回目がtest2.txt
三回目が空
で出力されます。
なぜか?
Dir関数は特に何も指定をしていない場合は、ファイルだけを出力してきます。
特性⑥:フォルダ取得もできるけど要注意
ではどうすればフォルダも出力してくれるのか?
フォルダも一緒に出力したい場合は最初のDirの指定を以下のように記述します。
aaa = Dir(“C:\Desktop\test\”,vbDirectory)
これでフォルダも一緒に拾ってくれるようになります。
要はvbDirectoryを付けることで、フォルダもとってきてね~という指示に変わるわけです。
簡単ですね。
しかしながら注意点が二つあります。
◆通常は見えていないフォルダも拾ってしまう。
◆フォルダだけ指定しているわけではなく、ファイルも一緒に拾われる
この注意点を説明するために以下のコードを実行してみましょう。
(状況は先ほどと同じでファイルが二つ、フォルダが一つある状態です。)
aaa = Dir(“C:\Desktop\test\”)
MsgBox aaa
aaa = Dir
MsgBox aaa
aaa = Dir
MsgBox aaa
aaa = Dir
MsgBox aaa
aaa = Dir
MsgBox aaa
一回目
二回目
こいつら( . & .. )が先ほど言った注意点一つ目です。
こいつらは、【.】が今いるフォルダ、【..】ひとつ上の階層のフォルダを意味しています。
通常、フォルダを開いて中身をみてもこんなものはないと思いますが、PC上のすべてのフォルダに実はこいつらは隠されているのです。
※Dir関数は使い方によっては非常に便利なんですが、こうゆう面倒なやつを処理する必要があります。まぁその辺は次回の実践編でご紹介しましょう。
三回目
四回目
五回目
三回目以降は狙い通り、指定したフォルダ内に入っているデータを順番にとりだしてくれていますね。
「フォルダだけ取り出したい場合はどうすればいいの?」
こんな疑問が当然わいてくるとおもいますが、残念ながらDir関数をシンプルに使っただけでは、フォルダだけを取り出すことはできません。
すこし工夫をする必要があります。
とはいえ、そこを説明し始めると基礎講座の域を超えてしまいそうなので、ここも次回の実践編でご紹介します。
おわりに
というわけで今回はDir関数の基本的な特性を詳細解説していきました。
すこし複雑ですが、使いこなすことができれば業務効率を格段にあげることができる関数です。
今回はあくまで基礎講座編ですので、実践編もぜひご覧ください。
このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント