Excel VBA 空のフォルダを一括削除するマクロ

Excel マクロ、VBA

スポンサーリンク

はじめに

Windowsのエクスプローラでは、気付いたら、空のフォルダが幾つも残っていることがある。

フォルダの中にフォルダがマトリョーシカ式に入っているが、ファイルは何も無くて空のフォルダばかりになってるなんてことも、たまにある。

今回は、そういう空のフォルダを一括削除するExcelマクロを作成してみた。

サブフォルダまで探っていって、ファイルが1個も存在しないフォルダを削除していくものだ。

ソースコード

それではソースコード。
メイン処理の「deleteEmptyFolders」というやつを、個人用マクロブックにでも入れて使えば良いかと思う。

個人用マクロブックとかについては、ここを展開。

オリジナルのマクロをリボンに追加する方法はこちら

個人用マクロブックについては、こちらこちらで述べています。

 

解説等

今回のマクロは、実はかなり難しい項目をところどころ含む。
その難しい箇所だけを、簡単に触れていく。

再帰処理

「fncDeleteFolders 」という処理ファンクションでは、その中でもう一回「fncDeleteFolders 」と自分自身を呼び出す再帰処理というやつをやっている。

要は、サブフォルダが連なっていても無限に探っていくためのもので、これは別の記事でもちょっと扱っている。

Excel VBA フォルダ構造をコピーするマクロ 個人用マクロブックに組み込めるよ

Dir

Dir」というやつは、ファイルやフォルダの存在状態を調べるやつで、これは割と重要なやつなので、また別の記事でも扱う。

Dirの返り値が
「.」なら自フォルダ
「..」なら1つ上のフォルダ
を示すなんていうのは、Dirをよく使う人でも中々お目にかかることは無いんじゃないだろうか。

Excel VBA Dir関数(1)基本仕様

Excel VBA Dir関数(2)ファイル・フォルダを複数検索する

GetAttrとビット演算・・・

If (GetAttr(NewPath) And vbDirectory) = vbDirectory Then

などというコードがあるが、ここで使っているAndは、正確に言うとビット演算というやつで、かなり難しい。

VBAをやってる人でもそうは使うことがないだろうし、ガチ勢の人でもない限り厳密にこの処理の意味を考える必要はないかと思う。

次回の記事でちょっと説明を書いてみた。
正しく理解してる人からツッコミを入れられないように書けたか、自信はとても無い。

要はGetAttrというやつが属性(attribute)を取得するやつで、その結果としてフォルダvbDirectoryであるという属性を返してもらいたいわけだ。

でもそのフォルダvbDirectoryに、隠しファイルとかの追加属性が付いてたり付いてなかったりするのだけど、どっちにせよフォルダvbDirectoryって属性なんだよと一括りにして結果を取得したいからこんな書き方をしてるという感じだ。

Excel VBA GetAttr関数とビット演算

その他

他には、配列の要素を再定義する
ReDim Preserve
とかを珍しく使用しているが、これについては↓の記事で少し触れている。

Excel VBA 配列について(4)要素数が不定の配列

フォルダを削除するのには
RmDir
というやつを使っている。これがファイルの削除なら、物騒だが
Kill
で削除できる。

スポンサーリンク