アクセス上位ページ
 
最近の更新内容
(3)-d.FSOによるフォルダコピー ⇐ [PREV]
[NEXT] ⇒ (4).FSOによるドライブ操作

Excel VBA ≫ 3.FSO - FSOによるフォルダ操作(3)-e.FSOによるフォルダ削除

ファイルシステムオブジェクトによるフォルダ削除

このページでは下表のフォルダ削除メソッドについて説明します。 このメソッドを実行すると、削除対象フォルダ内のファイルおよびサブフォルダはすべて削除されます。

    内容 メソッド
    フォルダ削除 fso.DeleteFolder(※1)
    folder.Delete


    ※1 ・・・ ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
    <使用可能なワイルドカード>
      * (アスタリスク):任意の数(0以上)の文字を表します。
      ? (クエスチョン):任意の1文字を表します。


    <使い分けの判断基準>
  • 複数のフォルダを削除する場合
  • fso.DeleteFolder を使用します。削除対象のフォルダ群を上記ワイルドカードで表現する必要があります。 ワイルドカードで表現できない場合は folder.Delete でフォルダを1つずつ削除するしかありません。 (⇒ フォルダ内のファイルを1つずつ削除する例

  • 1つのフォルダを削除する場合
  • 上記メソッドのどちらを使用しても機能的には同じになりますので、そのときの処理内容により判断します。 通常、処理の途中でフォルダオブジェクトを取得済みであれば folder.Delete、 フォルダオブジェクトを取得していないのであれば fso.DeleteFolder を使用します。




fso.DeleteFolder

引数に削除対象のフォルダパスを指定してフォルダの削除を行います。 フォルダが読み取り専用の場合でも削除してよければ、引数 Force に True を指定します。

  • 【構文】
    fso.DeleteFolder FolderSpec [, Force]

引数名 省略 説明
FolderSpec × 削除するフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 フォルダパスは絶対パス、相対パスともに指定可能です。
Force 読み取り専用のフォルダを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。
引数 FolderSpec に指定したフォルダが存在しない場合、エラーが発生します。
削除対象フォルダ内のファイルを編集中のときにフォルダ削除を行うとエラーが発生します。On Error ステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

  • 1つのフォルダを削除する
  • 引数 FolderSpec に削除対象のフォルダパスを指定します。
    以下の例では aaa フォルダを削除します。
    Sub test_fs035_01()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim strPath     As String   '削除対象フォルダ
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        '削除対象フォルダ
        strPath = "C:\Users\xxx\Desktop\aaa"
    
        'フォルダの削除(読み取り専用の場合も削除)
        fso.DeleteFolder strPath, True
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    


  • 複数のフォルダを1命令で削除する
  • 引数 FolderSpecワイルドカードを使用して削除したいフォルダ群を表現します。
    以下の例では、Desktop フォルダ内の test から始まるすべてのフォルダを削除します。
    Sub sample_fs035_02()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim strPath     As String   '削除対象フォルダ
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        '削除対象フォルダ
        strPath = "C:\Users\xxx\Desktop\test*"
    
        'フォルダの削除(読み取り専用の場合も削除)
        fso.DeleteFolder strPath, True
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    
    ⇒ サンプルマクロ集 へ

folder.Delete

フォルダオブジェクト内に削除対象のフォルダパス情報を持っているので、引数に指定するのはオプションの Force のみです。 その他の使用方法は fso.DeleteFolder に同じです。

  • 【構文】
    folder.Delete [Force]

引数名 省略 説明
Force 読み取り専用のフォルダを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。
削除対象フォルダ内のファイルを編集中のときにフォルダ削除を行うとエラーが発生します。On Error ステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。
  • 1つのフォルダを削除する
  • 以下の例では aaa フォルダを削除します。
    Sub test_fs035_03()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim folderObj   As Object   'フォルダオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'ファイルオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
    
        'フォルダの削除(読み取り専用の場合も削除)
        folderObj.Delete True
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
    End Sub
    


  • フォルダ内のサブフォルダを1つずつ削除する
  • 指定されたフォルダ内に存在するサブフォルダのうち、Like 演算子を使用して、 あるファイル名パターンにマッチするものだけを削除する例です。
    以下の例では、フォルダ名が "2013年##月"( # は任意の数字) のパターンにマッチするフォルダを削除します。
    Sub sample_fs035_04()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim folderObj   As Object   'フォルダオブジェクト
        Dim sfolderObj  As Object   'サブフォルダオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'フォルダオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\Data")
    
        For Each sfolderObj In folderObj.SubFolders
            'フォルダ名判定
            If sfolderObj.Name Like "2013年##月" Then
                'フォルダの削除(読み取り専用の場合も削除)
                sfolderObj.Delete True
            End If
        Next
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
        Set sfolderObj = Nothing
    End Sub
    

    <実行前 - Data フォルダの内容> 実行前のDataフォルダの内容 <sample_fs035_04 実行後 - Data フォルダの内容> sample_fs035_04実行後のDataフォルダの内容

管理人から一言・・・ フォルダの読み取り専用属性について
マイクロソフトのサポート情報によると、フォルダの読み取り専用属性はフォルダのプロパティ画面から変更ができないようです。変更するにはDOSコマンド attrib を使用するか、VBAで変更するかの2択になります。DOSコマンド attrib で読み取り専用属性を付与する法は以下の外部サイトを参照してください。

【参考】DOSコマンド attrib によるフォルダ読み取り専用属性の変更方法
カテゴリ内ページ



Page
Top