目次
目的
- パソコン内にフォルダを作成する。削除する。
- ファイルを削除する。
VBA で同様の操作を行う場合、FSO(File System Object ファイルシステムオブジェクト)も便利だと思います。「VBA FSO」などのキーワードで検索すると目的の情報を得られると思います。
フォルダ作成
- デスクトップにフォルダを作成してみます。
Sub mkdirステートメント()
MkDir "C:¥Users¥xxx¥デスクトップ¥folder1"
End Sub- 実行結果は以下のようになりました。
- MkDir "C:¥~"
「MkDir "フォルダパス"」の書式になっています。
MkDir ステートメントは、VBA.FileSystem のメンバのようです。
- xxx
「xxx」はユーザー毎に異なるので伏せ字にしています。 - 上記マクロを再度実行するとエラーが発生しました。同名フォルダはエラーになるようです。
- 実行結果は以下のようになりました。
フォルダ削除
- 上記で作成したフォルダを削除してみます。
Sub RmDirステートメント()
RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
End Sub- 実行結果は以下のようになりました。
- RmDir "C:¥~"
「RmDir "フォルダパス"」の書式になっています。 - 上記マクロを再度実行するとエラーが発生しました。存在しないフォルダの場合エラーが発生するようです。
- 実行結果は以下のようになりました。
ファイルが入っているフォルダを削除
ファイルが入っているフォルダを RmDir で削除しようとしてみます。
- まずは削除対象のフォルダ、ファイルを作成します。
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- 実行結果は以下のようになりました。
- 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- 実行するとエラーが発生しました。ファイルが入っているとエラーが発生するようです。
- 実行するとエラーが発生しました。ファイルが入っているとエラーが発生するようです。
- フォルダの中のファイルを削除してみます。
Sub ファイル削除()
Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt"
Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file2.txt"
Kill "C:¥Users¥xxx¥デスクトップ¥folder1¥file3.txt"
End Sub- 実行結果は以下のようになりました。
- Kill "C:¥~"
「Kill "ファイルパス"」の書式になっています。
ファイルパスにワイルドカードを使用できるようです。アスタリスク「*」で複数の文字、クエスチョンマーク「?」で何かの 1 文字が入る事を表現できます。「*.txt」「file?.txt」など。 - F5 キーを押してフォルダの画面を更新すると「このフォルダーは空です。」の表示に変わりました。
- 実行結果は以下のようになりました。
- ファイルの削除が完了したので、再度、フォルダの削除を試みます。
Sub RmDirステートメント()
RmDir "C:¥Users¥xxx¥デスクトップ¥folder1"
End Sub- 実行結果は以下のようになりました。
- 実行結果は以下のようになりました。
マクロストック
Sub Open後_FileAttr関数のテスト()
Open "C:¥Users¥xxx¥デスクトップ¥folder1¥file1.txt" For Output As #1
Debug.Print fileattr(1, 1)
Close #1
End Sub
- 実行結果は以下のようになりました。
- #1
ファイル番号です。 - fileattr
- 「Open "ファイルパス" For ファイルを開くモード As #ファイル番号」の書式でファイルを開いていますが、この時の「ファイルを開くモード」を取得できます。上記では「Output」モードでファイルを開いているので「Output」の定数「2」が取得できました。
- 「fileattr( ファイル番号 , 戻り値のタイプ )」の書式になっています。第二引数の「戻り値のタイプ」に「1」を指定すると、Open で開いた時のファイルモードが返ってくるようです。
Sub Openしないで_FileAttr関数のテスト()
Debug.Print fileattr(1, 1)
End Sub
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
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。