不要フォルダを削除する2種類のコードの作成

vbafolderdeleteeyecatch

エクセルVBAで、不要な使わないフォルダを削除するコードの作成方法についての説明です。

VBAの機能とファイルシステムオブジェクトの機能を使う方法の2種類があります。

今回は、不要なフォルダをサクッと削除するエクセルVBAコードを紹介します。

削除の仕方は2つあります。VBA自身の機能を使うことと、FSOの機能を使うことの2つです。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBA 不要なフォルダを削除する
2種類のコードの作成方法

先回は、ファイルの自動削除コードについて説明させていただきましたが、今回は、それが入っていたフォルダを削除するコードについて説明したいと思います。

今回の例題

ファイルの削除で使った例題を利用します。

vbadirkilleyecatch 要らないファイルを自動削除するコードの作成

一連のつながりとしてご覧ください。ただし、今回はVBAコードを記述したエクセルBOOKは対象フォルダから外に出しています。

vbafolderdeletesetu001
vbafolderdeletesetu002

エクセルVBA自身の機能を使う

RmDirステートメントについて

フォルダを削除します。削除の指定をされたフォルダ内にファイルが残っているとエラーストップします。

先ず、Killステートメントですべてのファイルを削除しておく必要があります。

記述方法

RmDir folderpath

folderpath・・・削除するフォルダパス

Dir関数、KillとRmDirステートメントを使ったコード作成

サンプル

ここは先回の記事内容の復習になります。

VBA自身の機能でコード1
Option Explicit
Dim delpath As String
Sub DirKillサンプル5()

'削除するファイルのパス
delpath = ThisWorkbook.Path & "\サンプル"

'削除したいファイルが存在するか
If Dir(delpath & "\*.*") <> "" Then

'ファイルを削除する
    Kill delpath & "\*.*"

Else

'見つからない場合のメッセージ
    MsgBox "削除予定ファイルは見つかりませんでした。"
    
End If

Call folder1削除

End Sub

実行結果

vbafolderdeletesetu003

Killステートメントで、フォルダ内のファイルが削除されました。

vbafolderdeletesetu004

RmDirステートメントで、対象フォルダが削除されました。

MEMO

「VBA自身の機能でコード1」でフォルダの中のファイルを削除しましたが、

その中でプロシージャー「folder1削除」を呼び出しています。

VBA自身の機能でコード2
Sub folder1削除()

'削除したいフォルダが存在するか
If Dir(delpath, vbDirectory) <> "" Then

'フォルダを削除する
    RmDir delpath

Else

    MsgBox "削除予定フォルダは見つかりませんでした。"

End If

End Sub

ファイルシステムオブジェクトFSOを使う

「ファイルシステムオブジェクト」はコンピューターのファイル システムへのアクセスを可能にするオブジェクトです。

エクセルVBA上でも使えるようになっています。

最初に、VBAの参照設定でちょっとしたセットアップをしておきます。

vbafolderdeletesetu006

VBEの画面でツールタブから参照設定をクリックします。

vbafolderdeletesetu007

「参照可能なライブラリファイル」から「Microsoft Scripting Runtime」にチェックを入れてOKします。

今回使うメソッドは、

FileSystemObjectオブジェクトのDeleteFolderメソッドとFolderExistsメソッドになります。

 

記述方法と意味

FileSystemObject. DeleteFolder ( folderpath)

指定したフォルダを(内部にあるファイルもろ共)削除します。

 

FileSystemObject. FolderExists ( folderpath)

指定したフォルダが存在するかどうかを調べます。

サンプル

たったこれだけのコードです。

FSOのコード
Sub folder削除2()

Dim myFSO As New FileSystemObject
Dim myFld As String

myFld = ThisWorkbook.Path & "\サンプル"

'フォルダが存在するかどうかを調べる
If myFSO.FolderExists(myFld) Then

'指定したフォルダを削除する
    myFSO.DeleteFolder (myFld)

Else
    MsgBox "削除予定フォルダは見つかりませんでした。"
End If

実行結果

vbafolderdeletesetu005

不要なフォルダを削除するコードのまとめ

例題を比較していただいても明らかですが、ファイルシステムオブジェクトを利用する方が短いコードで作成することが出来ました。

ただ、ファイルシステムオブジェクトは奥が深いですので、

VBAをやり始めてこれからの方は、この項目の探求については深入りはせずに、後に回した方がいいかもしれません。

まずはVBA自身の機能の練習から行っていきましょう。

今回のテーマのような簡単なものだけに取り敢えずはとどめておきましょう。

エクセルVBAをはじめから知るために

エクセルVBAを学ぶには、土台作りから始めていかないといけません。

そんな土台となる部分については、この記事を参考にしてください。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。

Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

このサイトでよく使うVBAのコードのトピックを纏めています。

エクセルVBA最速理解で必要な知識を集めよう!

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。