#18_7 ファイル操作の関数
フォルダ内のファイルを削除する
さて、ファイルを操作する第一歩として、ファイルを検索して削除する処理をVBAで自動化しましょう。
フォルダ内のファイルを取得する場合には、Dir関数を使用します。これは頻出の関数なので、いかに構文を示します。
Dir(pathname, attributes)
引数pathnameは、検索するフォルダ名またはファイル名を指し、attributesは属性をしました。属性は全部で6種類あり、下記の表に示すとおりです。
定数 | 値 | 内容 |
---|---|---|
vbNormal | 0 | 標準ファイル(既定値) |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システムファイル |
vbVolume | 8 | ボリュームラベル |
vbDirectory | 16 | フォルダ |
Dir関数は、引数pathnameで指定したファイルもしくはフォルダが存在する場合にはその名前を返し、存在しない時には空の文字列「""」を返します。
例えば次のマクロは、Cドライブのルートディレクトリに「18_4.xlsx」というファイルがあるかどうか探し出し、Dir関数が「""」を返さなかったらKillステートメントで削除するという構文です。つまり、指定のファイルが存在したら削除するということです。
ちなみにKillステートメントは複数のファイルを指定するためのワイルドカード(*や?)を使用することもできるため、例えば「Kill "*.xlsx"」とすれば、すべてのxlsxファイルを削除することができます。
ファイルを複数検索する
先ほど紹介したKillステートメント同様に、Dir関数でもアスタリスクや疑問符のワイルドカード(*や?)が使用できます。指定条件を満たすファイルが複数存在するときには、最初に検索したファイル名を返します。
なので、Dir関数を用いて複数のファイルを検索する場合には、その構文は変形する必要があり、例えば以下のようになります。
このマクロを実行すると、以下の結果を得ることができます。
Dir(myPath & "*.xlsx")と指定して、拡張子xlsxのファイルをすべて検索しますが、このステートメントが返すのは最初に検索されたファイルのみです。
2回目以降の検索では、引数を省略してDir()と記述します。
これは、複数検索の処理の基本的用法なので、ぜひマスターしてください。