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

f:id:yshgs_elec:20201021231733j:plain

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

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

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

⇒削除

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

 

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

 

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

 

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

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

 

スポンサーリンク

はじめに

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

 

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

複数のフォルダが入っているフォルダ

 

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

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

各フォルダの中身を確認した結果

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

 

ここからは、

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

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

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

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

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

 

この流れを実行していくうえで、必要な情報をわありやすいように一覧化しておきたいので、まずは以下のようなエクセルシートを作成していきましょう。

f:id:yshgs_elec:20210204214815j:plain

というわけでここからは上のエクセルシートを効率的に作成する方法を解説していきます。

 

具体的には

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

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

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

これらをすべて自動でやってくれるようにしておきます。

 

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

 

スポンサーリンク

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

指定フォルダ内のフォルダパスを一括取得する手順

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

 

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

www.higashisalary.com

 

スポンサーリンク

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

フルパスからその中に入っているファイル名を一括取得する方法

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

 

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

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

www.higashisalary.com

 

スポンサーリンク

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

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

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

 

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

削除したいファイルだけを残し、それ以外はクリアしている様子

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

 

スポンサーリンク

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

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

 

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

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

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

 

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

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だけがキレイに削除されていますね。

サンプルコードを実行した結果

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

スポンサーリンク

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

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

 

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

 

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

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

情報一覧シートにワイルドカードを使用している例

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

 

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

 

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

 

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

スポンサーリンク

おわりに

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

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

 

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

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

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

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

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

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

 

最後に・・・

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

↓ 応援ボタン

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

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

それではまた!!

コメント

  1. Kaori より:

    今回初めてVBAを触っています。
    すごく簡単にできる方法を示して頂いて、本当に助かりました。
    そこで、教えてください。
    このやり方で削除できるのは、ファイルのみかと思うのですが、
    フォルダも削除するコードを示して頂けないでしょうか?
    お忙しいとは思いますが、どうか宜しくお願い致します。

  2. Kaori より:

    再び申し訳ございません。
    削除したいフォルダは、“検索フォルダ”の中の
    “内部フォルダ”の中の
    “削除するファイル名”に書き込まれたフォルダです。
    このページでは、“削除するファイル名”に書かれたファイルが削除されると思うのですが、
    フォルダも削除したいのです。
    どうぞ宜しくお願い致します。

  3. Kaori より:

    何度も申し訳ございません。
    全て削除したいのではなく、一部のファイル(zip)とフォルダ(ファイルであれば全て削除されて構いません)を
    削除したいと思っております。
    大変お世話になります。
    よろしくお願い致します。

    • ヒガシ ヒガシ より:

      ご質問ありがとうございます。
      フォルダを削除する場合は
      Kill **** というところを
      RmDir **** に変更すれば可能です。

      なのでKillなんとかとか書いてあるところを
      If Dir(folder_name & “\” & del_file_name, vbNormal) <> “” Then
      Kill folder_name & “\” & del_file_name
      Else
      RmDir folder_name & “\” & del_file_name
      End If
      こんな感じにすればできると思います。

      ※動作確認はしていませんので不具合があれば教えてください。

      • Kaori より:

        お返事大変ありがとうございます。
        すぐに返信できず申し訳ございません。
        色々試してみたのですが、
        “ RmDir folder_name & “\” & del_file_name”
        を追加すると「パスが無効です。」と出てしまいます。

        追加しなければ、フォルダ以外のファイルが問題なく削除されました。
        もしもお時間ありましたら、原因を教えて頂けますと大変嬉しいです。
        どうぞよろしくお願いいたします。

        現状↓
        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
            RmDir folder_name & “\” & del_file_name
        End If
        j = j + 1
        Loop
        i = i + 1
        Loop
        End Sub

        • ヒガシ ヒガシ より:

          すみません、コメント欄にプログラムを書くと文字化けしてたみたいです。
          とりあえずdir関数を使ってファイルならkill、そうじゃないならrmdirで削除すればいけるはずです。

          • Kaori より:

            お忙しい中お返事ありがとうございました。
            承知いたしました!

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