業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォルダを作成するCreateFolder、テキストファイルを作成するCreateTextFile、ファイルを削除するDeleteFile、フォルダを削除するDeleteFolderメソッドなどについて。
TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObject、ファイルをコピーするCopyFile、フォルダをコピーするCopyFolderメソッドなどを紹介したが、今回は、任意のフォルダを作成して、そのフォルダ内にテキストファイルを作成、削除する方法を解説する。
なお今回は、「K:\ExcelVBA_Sample」というフォルダや、そのフォルダの中に「ExcelVBASample.txt」というテキストファイルを作成するが、読者の環境に合わせて、パスやファイル名は適宜変更してほしい。
まずは、フォルダとテキストファイルを作成する処理からだ。
任意のフォルダを作成するには、CreateFolderメソッドを使用する。書式は下記のようになる。
{fso}.CreateFolder {foldername}
{fso}は必須だ。FileSystemObjectオブジェクトの名前を指定する。
{foldername}も必須だ。作成するフォルダを表す文字列式を指定する。
※指定したフォルダが既に存在していた場合は、エラーが発生する。
次にテキストファイルの作成方法だ。テキストファイルを作成するには、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
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」が作成され、内容が書き込まれている。
次はファイル削除とフォルダ削除について見ていこう。
ファイルを削除するには、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
Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。
DeleteFileメソッドで、指定したテキストファイルを削除する(3行目)。
最後に、オブジェクトの変数をNothingでクリアしておく(4行目)。
次は、フォルダの削除だ。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
Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。
文字列型の変数deleteFolderを宣言する(3行目)。
変数deleteFolderに削除するフォルダ名をフルパス付きで格納する(4行目)。
DeleteFolderメソッドで、変数deleteFolderに格納されているフォルダを削除する。その際、引数にTrueを指定して、読み取り専用のフィルダも削除可能にしておく(5行目)。
最後に、オブジェクトの変数をNothingでクリアしておく(6行目)。
以上で、今回の解説は終わりだ。ほとんど難しい箇所はないと思う。
参照設定をしておけば、自動メンバーも表示されるので、それらしきメソッドに見当をつけてプログラムを書くこともできる。こういった処理は数行のコードで実現できるので、大変にお手軽ではないだろうか。前回も書いていたように、こういった場合も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 © ITmedia, Inc. All Rights Reserved.