フォルダ作成 MkDir、フォルダ削除 RmDir、ファイル削除 Kill。

執筆者:

カテゴリ:

目的

  • パソコン内にフォルダを作成する。削除する。
  • ファイルを削除する。

VBA で同様の操作を行う場合、FSO(File System Object ファイルシステムオブジェクト)も便利だと思います。「VBA FSO」などのキーワードで検索すると目的の情報を得られると思います。

フォルダ作成

  1. デスクトップにフォルダを作成してみます。
    Sub mkdirステートメント()
    MkDir "C:¥Users¥xxx¥デスクトップ¥folder1"
    End Sub
    1. 実行結果は以下のようになりました。
Windows のエクスプローラーでパソコンのデスクトップを表示した画面。「folder1」が作成されている。
Windows のエクスプローラーでパソコンのデスクトップを表示した画面。「folder1」が作成されている。
  • MkDir “C:¥~”
    「MkDir “フォルダパス”」の書式になっています。
    MkDir ステートメントは、VBA.FileSystem のメンバのようです。
  • VBA.FileSystem の配下に MkDir が入っている。
    VBA.FileSystem の配下に MkDir が入っている。
  • xxx
    「xxx」はユーザー毎に異なるので伏せ字にしています。
  • 上記マクロを再度実行するとエラーが発生しました。同名フォルダはエラーになるようです。
  • 実行時エラー'75' パス名が無効です。
    実行時エラー’75’ パス名が無効です。

    フォルダ削除

    1. 上記で作成したフォルダを削除してみます。
      Sub RmDirステートメント()
      RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
      End Sub
      1. 実行結果は以下のようになりました。
    「folder1」が削除されている。
    「folder1」が削除されている。
  • RmDir “C:¥~”
    「RmDir “フォルダパス”」の書式になっています。
  • 上記マクロを再度実行するとエラーが発生しました。存在しないフォルダの場合エラーが発生するようです。
  • 実行時エラー'76' パスが見つかりません。
    実行時エラー’76’ パスが見つかりません。

    ファイルが入っているフォルダを削除

    ファイルが入っているフォルダを RmDir で削除しようとしてみます。

    1. まずは削除対象のフォルダ、ファイルを作成します。
      Sub フォルダ作成後txtファイル3個作成()
      'フォルダ作成
      MkDir "C:¥Users¥xxx¥デスクトップ¥folder1"
      'txt ファイル 3 個作成
      Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt" For Output As #1
      Close #1
      Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file2.txt" For Output As #2
      Close #2
      Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file3.txt" For Output As #3
      Close #3 'Reset で一括で閉じる事も可能なようです。
      End Sub
      1. 実行結果は以下のようになりました。
    「folder1」の中に「file1.txt」「file2.txt」「file3.txt」が作成されている。
    「folder1」の中に「file1.txt」「file2.txt」「file3.txt」が作成されている。
  • Open
    • パソコン内部でファイルを開く事ができます。パソコン内部で開かれるので画面に表示されません。
    • 「Open “ファイルパス” For ファイルを開くモード As #ファイル番号」の書式になっています。
    • ファイルの拡張子は txt に限らず html , log などのファイルも作成できます。
    • ファイルを開くモードの一覧は下記 URL に記載がありました。
      FileAttr 関数 (Visual Basic for Applications) | Microsoft Learn
      https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/fileattr-function
    • 「Output」は上書きモードで開く指定のようです。「Append」だと追記モードになります。「Input」は読み取りモードになるようです。
    • 複数のファイルを開いた時に重複しないように空いているファイル番号を指定して Open するようです。
    • 空いていファイル番号は FreeFile 関数で取得可能なようです。
  • Close
    Open で開いたファイルを閉じる事ができます。「Close #ファイル番号」の書式になっています。
  • RmDir で削除しようとしてみます。
    Sub エラー_ファイルが入っている状態でフォルダ削除()
    RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
    End Sub
    1. 実行するとエラーが発生しました。ファイルが入っているとエラーが発生するようです。
  • 実行時エラー'75' パス名が無効です。
    実行時エラー’75’ パス名が無効です。
  • フォルダの中のファイルを削除してみます。
    Sub ファイル削除()
    Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt"
    Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file2.txt"
    Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file3.txt"
    End Sub
    1. 実行結果は以下のようになりました。
  • 「処理しています ...」となってしまっていますがファイルが削除されています。
    「処理しています …」となってしまっていますがファイルが削除されています。
  • Kill “C:¥~”
    「Kill “ファイルパス”」の書式になっています。
    ファイルパスにワイルドカードを使用できるようです。アスタリスク「*」で複数の文字、クエスチョンマーク「?」で何かの 1 文字が入る事を表現できます。「*.txt」「file?.txt」など。
  • F5 キーを押してフォルダの画面を更新すると「このフォルダーは空です。」の表示に変わりました。
  • このフォルダーは空です。
    このフォルダーは空です。
  • ファイルの削除が完了したので、再度、フォルダの削除を試みます。
    Sub RmDirステートメント()
    RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
    End Sub
    1. 実行結果は以下のようになりました。
  • 「folder1」が削除されている。
    「folder1」が削除されている。

    マクロストック

    Sub Open後_FileAttr関数のテスト()
    Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt" For Output As #1
    Debug.Print fileattr(1, 1)
    Close #1
    End Sub
    1. 実行結果は以下のようになりました。
    2 = Output(シーケンシャル出力モード )で開いている。
    2 = Output(シーケンシャル出力モード )で開いている。
  • #1
    ファイル番号です。
  • fileattr
    1. 「Open “ファイルパス” For ファイルを開くモード As #ファイル番号」の書式でファイルを開いていますが、この時の「ファイルを開くモード」を取得できます。上記では「Output」モードでファイルを開いているので「Output」の定数「2」が取得できました。
    2. 「fileattr( ファイル番号 , 戻り値のタイプ )」の書式になっています。第二引数の「戻り値のタイプ」に「1」を指定すると、Open で開いた時のファイルモードが返ってくるようです。
    Sub Openしないで_FileAttr関数のテスト()
    Debug.Print fileattr(1, 1)
    End Sub
    実行時エラー '52' ファイル名または番号が不正です。
    実行時エラー ’52’ ファイル名または番号が不正です。
    Sub resetステートメントのテスト()
    Debug.Print "次のファイル番号="; FreeFile
    Open "C:¥Users¥xxx¥デスクトップ¥folder1¥1.txt" For Output As #1
    Debug.Print "次のファイル番号="; FreeFile
    Open "C:¥Users¥xxx¥デスクトップ¥folder1¥2.txt" For Output As #2
    Debug.Print "次のファイル番号="; FreeFile
    Open "C:¥Users¥xxx¥デスクトップ¥folder1¥3.txt" For Output As #3
    Debug.Print "次のファイル番号="; FreeFile
    Reset 'ファイルを閉じる
    Debug.Print "リセット後のファイル番号="; FreeFile
    End Sub
    リセット後は「1」に戻っている。
    リセット後は「1」に戻っている。

    テスト環境

    • Windows 10(64 ビット)
    • Microsoft Office Excel 2003

    以上、閲覧ありがとうございました。