連載
» 2017年03月22日 05時00分 UPDATE

VBA/マクロ便利Tips:Excelでファイルやフォルダを作成、削除するには

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォルダを作成するCreateFolder、テキストファイルを作成するCreateTextFile、ファイルを削除するDeleteFile、フォルダを削除するDeleteFolderメソッドなどについて。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 10 64bit+Anniversary Update、Excel 2016


 TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObject、ファイルをコピーするCopyFile、フォルダをコピーするCopyFolderメソッドなどを紹介したが、今回は、任意のフォルダを作成して、そのフォルダ内にテキストファイルを作成、削除する方法を解説する。

 なお今回は、「K:\ExcelVBA_Sample」というフォルダや、そのフォルダの中に「ExcelVBASample.txt」というテキストファイルを作成するが、読者の環境に合わせて、パスやファイル名は適宜変更してほしい。

フォルダとテキストファイルの作成

 まずは、フォルダとテキストファイルを作成する処理からだ。

フォルダを作成するCreateFolderメソッド

 任意のフォルダを作成するには、CreateFolderメソッドを使用する。書式は下記のようになる。

フォルダを作成するCreateFolderメソッドの書式

{fso}.CreateFolder {foldername}


 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {foldername}も必須だ。作成するフォルダを表す文字列式を指定する。

※指定したフォルダが既に存在していた場合は、エラーが発生する。

テキストファイルを作成するCreateTextFileメソッド

 次にテキストファイルの作成方法だ。テキストファイルを作成するには、CreateTextFileメソッドを使用する。書式は下記のようになる。

テキストファイルを作成するCreateTextFileメソッドの書式

{fso}.CreateTextFile {filename},{overwrite}


 {fso}は必須だ。FileSystemObjectのオブジェクト名を指定する。

 {filename}も必須だ。作成するファイルの名前を文字列式で指定する。

 {overwrite}は任意だ。既存ファイルの場合に上書きするかどうかを示すブール値を指定する。上書きする場合はTrueを、上書きしない場合はFalseを指定する。規定値はFalseだ。

フォルダとファイルを作成するサンプル

 VBEを起動して、いつものように「挿入」メニューから「標準モジュール」を選択して、Module1を作成する。新規にModuleを作成した場合は「Microsoft Scripting Runtimeの参照設定」を行うことを忘れないでほしい。

 リスト1のコードを記述する。

Sub MakingFolder_TextFile()
  Dim fso As New Scripting.FileSystemObject
  fso.CreateFolder ("K:\ExcelVBA_Sample")
  Dim myFile As Object
  Set myFile = fso.CreateTextFile("K:\ExcelVBA_Sample\ExcelVBASample.txt", True)
  With myFile
    .WriteLine ("これはExcelVBAでFileSystemObjectを使った")
    .WriteLine ("テキストファイルの作成サンプルです。")
  End With
  Set myFile = Nothing
  Set fso = Nothing
End Sub
リスト1 任意のフォルダを作ってテキストファイルを作成するコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 CreateFolderメソッドで「K:\ExcelVBA_Sample」というフォルダを新規に作成する。フォルダの後ろには¥は付けないので注意してほしい(3行目)。Object型の変数myFileを作成する(4行目)。

 CreateTextFileメソッドで「K:\ExcelVBA_Sample\ExcelVBASample.txt」というテキストファイルを作成する。「K:\ExcelVBA_Sample\」フォルダは先に作成しておいたフォルダだ。引数にTrueを指定して、同名テキストファイルがあった場合は上書きするように指定した(5行目)。

 WriteLineメソッドで作成したテキストファイルに書き込みを行う。WriteLineを何個も書いていくと、その間は改行されて表示される(7〜8行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(10〜11行目)。

実行結果

 実行すると図1のように「K:\ExcelVBA_Sample\ExcelVBASample.txt」が作成され、内容が書き込まれている。

図1 指定したフォルダが作成され、指定したテキストファイルが作成されて、内容が書き込まれている

ファイルとフォルダの削除

 次はファイル削除とフォルダ削除について見ていこう。

ファイルを削除するDeleteFileメソッド

 ファイルを削除するには、DeleteFileメソッドを使用する。

ファイルを削除するDeleteFileメソッドの書式

{fso}.DeleteFile {filespec},{force}


 {fso}は必須だ。FileSystemObject オブジェクトの名前を指定する。

 {filespec}は必須だ。削除するファイルの名前を指定する。パスの最後の要素内ではワイルドカード文字も使用が可能だ。

 {force}は任意だ。Trueを指定すると、読み取り専用の属性を持つファイルも削除される。Falseを指定すると、読み取り専用ファイルは削除されない(既定値)。

※名前の一致するファイルが見つからなかった場合は、エラーが発生する。

 リスト2のコードを記述する。あらかじめ、「K:\ExcelVBA_TextFiles\DeleteFile.txt」を作成しておく(図2)。

Sub DeleteFile()
  Dim fso As New Scripting.FileSystemObject
  fso.DeleteFile ("K:\ExcelVBA_TextFiles\DeleteFile.txt")
  Set fso=Nothing
End Sub
リスト2 ファイルを削除するコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 DeleteFileメソッドで、指定したテキストファイルを削除する(3行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(4行目)。

図2 DeleteFileメソッドで削除される「K:\ExcelVBA_TextFiles\DeleteFile.txt」

フォルダを削除するDeleteFolderメソッド

 次は、フォルダの削除だ。DeleteFolderメソッドを使用する。

フォルダを削除するDeleteFolderメソッドの書式

{fso}.DeleteFolder {folderspec},{force}


 {fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。

 {folderspec}は必須だ。削除するフォルダの名前を指定する。パスの最後の要素内ではワイルドカード文字を使用できる。

 {force}は任意だ。Trueを指定すると、読み取り専用の属性を持つフォルダも削除される。Falseを指定すると、読み取り専用フォルダは削除されない(既定値)。

※名前の一致するフォルダが見つからなかった場合は、エラーが発生する。

 リスト3のコードを記述する。あらかじめ、「K:\ExcelVBA_TextFiles\ExcelVBA_DeleteFolder」というフォルダを作成しておく(図3)。

Sub DeleteFolder()
  Dim fso As New Scripting.FileSystemObject
  Dim deleteFolder As String   
  deleteFolder = "K:\ExcelVBA_TextFiles\ExcelVBA_DeleteFolder"
  fso.DeleteFolder deleteFolder, True
  Set fso=Nothing
End Sub
リスト3 フォルダを削除するコード

 Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。

 文字列型の変数deleteFolderを宣言する(3行目)。

 変数deleteFolderに削除するフォルダ名をフルパス付きで格納する(4行目)。

 DeleteFolderメソッドで、変数deleteFolderに格納されているフォルダを削除する。その際、引数にTrueを指定して、読み取り専用のフィルダも削除可能にしておく(5行目)。

 最後に、オブジェクトの変数をNothingでクリアしておく(6行目)。

図3 DeleteFolderで削除される「K:\ExcelVBA_TextFiles\ExcelVBA_DeleteFolder」

次回は、ドライブやファイル、フォルダが存在するかを確認する

 以上で、今回の解説は終わりだ。ほとんど難しい箇所はないと思う。

 参照設定をしておけば、自動メンバーも表示されるので、それらしきメソッドに見当をつけてプログラムを書くこともできる。こういった処理は数行のコードで実現できるので、大変にお手軽ではないだろうか。前回も書いていたように、こういった場合もUIを作成しておくと便利だ。各自が思い思いのUIを作成して試してみてほしい。

 次回は「ドライブやファイル、フォルダが存在するかを確認する」方法を紹介するので、お楽しみに。

著者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms - Windows Platform Development (Oct 2014-Sep 2015)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。