目次

目的

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

VBA で同様の操作を行う場合、FSO(File System Object)も便利だと思います。「VBA FSO」などのキーワードで検索すると目的の情報を得られると思います。

目次まで戻る

フォルダ作成

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

目次まで戻る

フォルダ削除

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

目次まで戻る

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

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

  1. まずは削除対象のファイル、フォルダを作成します。
    Sub フォルダ作成後txtファイル3個作成()
    'フォルダ作成
    MkDir "C:¥Users¥xxx¥デスクトップ¥folder1"
    'txt ファイル作成
    Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt" For Output As #1
    Close #1 'Reset で一括で閉じる事も可能なようです。
    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
    End Sub
    1. Open
      • パソコン内部でファイルを開く事ができます。ファイルの入出力を VBA から行う事ができます。開かれたファイルは画面に表示されません。
      • 「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 関数で取得可能なようです。
    2. Close
      Open で開いたファイルを閉じる事ができます。「Close #ファイル番号」の書式になっています。
    3. 実行結果は以下のようになりました。
      「folder1」の中に「file1.txt」「file2.txt」「file3.txt」が作成されている。
      「folder1」の中に「file1.txt」「file2.txt」「file3.txt」が作成されている。
  2. RmDir で削除しようとしてみます。
    Sub エラー_ファイルが入っている状態でフォルダ削除()
    RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
    End Sub
    1. 実行するとエラーが発生しました。ファイルが入っているとエラーが発生するようです。
      実行時エラー'75' パス名が無効です。
      実行時エラー'75' パス名が無効です。
  3. フォルダの中のファイルを削除してみます。
    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
      「Kill ファイルパス」の書式になっています。
      *(アスタリスク 複数の文字の代わり)、?(クエスチョンマーク 何かの 1 文字の代わり)のワイルドカードを使用できるようです。
    2. 実行結果は以下のようになりました。

      「処理しています ...」となってしまっていますがファイルが削除されています。
      「処理しています ...」となってしまっていますがファイルが削除されています。
    3. F5 キーを押してフォルダの画面を更新すると「このフォルダーは空です。」の表示に変わりました。
      このフォルダーは空です。
      このフォルダーは空です。
  4. ファイルの削除が完了したのでフォルダを削除してみます。
    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」の「1」はファイル番号。
  • 「fileattr( ファイル番号 , 戻り値のタイプ )」の書式でファイル番号「1」の現在のファイルモードを取得。
  • 戻り値のタイプ = 1 で現在のファイルモードを返すように指定にしている。
2 = Output(シーケンシャル出力モード )で開いている。
2 = Output(シーケンシャル出力モード )で開いている。
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

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

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿