【VBA】複数フォルダ内の指定ファイルを一括削除する方法!

f:id:yshgs_elec:20201021231733j:plain

いらなくなったデータを整理する際に、

■ダブルクリックでフォルダをひとつずつ開く

■Ctrl や Shift とマウスをつかってファイルを選択

⇒削除

という面倒な作業を大量のフォルダに対してひたすら行っている人は多いのではないでしょうか?

 

この記事では、そんな面倒な作業から解放してくれる、複数のフォルダに入っている大量のファイルを、一括削除するエクセルマクロをご紹介していきます。

 

ファイル名を指定してから削除する方法から、拡張子だけを指定して削除する方法まで、詳細に説明していきます。

 

ぜひ最後までご覧ください。

それではさっそくやっていきます!

スポンサーリンク

はじめに

まずはじめに、この記事でご紹介する内容をざっと紹介します。

 

今回は以下の画像に示しているように、あるフォルダの中に複数のフォルダが入っています。

f:id:yshgs_elec:20210204214750j:plain

さらにこれらの各フォルダの中には以下の画像ように複数のファイルが保存されている状態です。

※folder02までしか表示していませんが、folder05まで、すべてのフォルダに同じファイル名のファイルが保存されています。

f:id:yshgs_elec:20210204214803j:plain

ここまでが処理を実行する前段階での状況説明でした。

 

ここからは、

①ベースとなるフォルダの中に入っているフォルダの情報を取得

②①で取得したフォルダの中に入っているファイルの情報を取得

③②で取得したファイルの中から削除したいファイルを選択

④③で選択したファイルを一括削除

という一連の流れを実行していきたいと思います。

 

最終的には以下のようなエクセルファイルが出来上がります。

f:id:yshgs_elec:20210204214815j:plain

■削除したいファイルが入っているフォルダのフルパスを、A4セル以降に自動取得

■それらのフォルダに入っているファイル名をF4セル以降に自動取得

■F4セル以降に記載されているファイルを一括削除

これらをすべて自動でやってくれます。

一度作っておくと非常に便利ですので、ぜひあなたも一緒にエクセルを開いてやってみましょう。

 

というわけでここからは具体的な作業手順に移っていきます。

スポンサーリンク

ベースフォルダ内を一括探索できるようにする

f:id:yshgs_elec:20210204214829j:plain

まずは上の画像のようにA2セルに記入されているベースフォルダの中にある、内部フォルダのフルパスを一括取得できるようにします。

 

この方法は以前私のブログで全く同じことを紹介していますので、以下の記事を参考にしてください。

www.higashisalary.com

スポンサーリンク

フォルダ内部のファイルを一括取得できるようにする

f:id:yshgs_elec:20210204214843j:plain

次は先ほど取得した各フォルダの中に入っているファイル名を自動で一括取得できるようにしていきます。

 

こちらも私のブログで以前全く同じことを紹介していますので、以下の記事を参考にしてください。

【ファイルだけを一括取得するコード】という見出しをご覧ください。

www.higashisalary.com

スポンサーリンク

削除したいファイルだけを残す

次は先ほど取得したファイルの中から削除したいものだけを残していきます。

今回は取得したファイルの中から、file001.txtとfile002.txtだけを削除していきたいとおもいます。

 

そのため、エクセルシート上は以下の画像のようにfile001.txtとfile002.txtだけを記載し、その他は削除しておきましょう。

f:id:yshgs_elec:20210204214858j:plain

※ここに記載されているファイルは強制的に削除されてしまいます。のちほど紹介する削除マクロを実行する前に必ず本当に削除して良いものなのかどうかは確認しておきましょう。誤って大切なファイルを削除してしまっても私は一切責任は負いません。

スポンサーリンク

記載しているファイル名のファイルを削除する

非常に長くなりましたが、事前準備はここまでです。

 

いよいよファイルの自動削除マクロを実行していきます。

とはいえ、まずはコード記述する必要がありますので、以下のコードを記述しましょう。

※このコードは私と全く同じようにエクセルシートを作っている人用です。

セルの位置を変更されている方は適宜コードを修正してください。

Sub Delete_file()
    Dim folder_name As String
    Dim del_file_name As String
    Dim i As Integer
    Dim j As Integer
    i = 0
    Do Until Cells(4 + i, 1) = ""
        folder_name = Cells(4 + i, 1)
        j = 0
        Do Until Cells(4 + i, 6 + j) = ""
            del_file_name = Cells(4 + i, 6 + j)
            'ファイル削除の実行
            If Dir(folder_name & "\" & del_file_name) <> "" Then
            Kill folder_name & "\" & del_file_name
            Else
            End If
            j = j + 1
        Loop
        i = i + 1
    Loop
End Sub

ワンポイント解説:VBAでファイルを削除する方法

⇒Kill ファイルのフルパス

コードが記述できた方は早速実行してみましょう!

 

以下が実行結果です。

最初はfile001,002,003,004と存在していましたが、以下の画像のとおり、エクセルシートに記述していた001,002だけがキレイに削除されていますね。

f:id:yshgs_elec:20210204214915j:plain

※ここでは掲載していませんが、folder03,04,05も同様に削除されています。

スポンサーリンク

拡張子を指定して一括削除する

このエクセルシートはこんな使い方もできます。

 

先ほどはファイル名を一つ一つ指定してから削除したわけですが、以下のようにワイルドカードを使用することによって、該当するファイルを一括削除することもできます。

 

今回は.txtの拡張子を一括削除してみましょう。

その場合は、エクセルシートを以下のように記述します。

f:id:yshgs_elec:20210204214928j:plain

この状態で、先ほど紹介した、ファイル削除マクロを実行すれば、拡張子が.txtのものだけをすべて削除してくれます。

 

わざわざファイル名を取得したり、選択したりする必要もないので便利ですよね。

ここを*.jpg, *.pngなどと入力しておけば、思たい画像なんかを一括削除してくれます。

ぜひこの使い方も覚えておきましょう!

スポンサーリンク

おわりに

というわけで今回は。複数のフォルダ内にあるファイルを一括削除する方法をご紹介しました。

データ整理の際はこういったものを作っておくと非常に便利ですので、ぜひ時間をとって作成してみてください。

 

このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。

■業務の生産性を上げたい。

■早く帰って子供と遊びたい。

こんな人はぜひ他の記事も読んでみてください。

また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。

私にわかる範囲であればご協力いたしますので。(もちろん無料です。)

最後に・・・

この記事が役に立ったという方はぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

Twitterもやっていますので、興味があれば覗いてみてください。

それではまた!!

コメント

タイトルとURLをコピーしました