Excelでファイルやフォルダを作成、削除するには:VBA/マクロ便利Tips
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォルダを作成するCreateFolder、テキストファイルを作成するCreateTextFile、ファイルを削除するDeleteFile、フォルダを削除するDeleteFolderメソッドなどについて。
TIPS「FileSystemObjectを使うための準備――ファイル/フォルダをコピーするには」では、ファイルシステムへアクセスするメソッドなどを提供するFileSystemObject、ファイルをコピーするCopyFile、フォルダをコピーするCopyFolderメソッドなどを紹介したが、今回は、任意のフォルダを作成して、そのフォルダ内にテキストファイルを作成、削除する方法を解説する。
- フォルダを作成するCreateFolderメソッド
- テキストファイルを作成するCreateTextFileメソッド
- ファイルを削除するDeleteFileメソッド
- フォルダを削除するDeleteFolderメソッド
なお今回は、「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
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メソッド
ファイルを削除するには、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
Scripting.FileSystemObjectのインスタンスを作成し、変数fsoで参照する(2行目)。
DeleteFileメソッドで、指定したテキストファイルを削除する(3行目)。
最後に、オブジェクトの変数をNothingでクリアしておく(4行目)。
フォルダを削除する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
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.
関連記事
- どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。 - スクショをExcelに張り付けるのに役立つ4つのテクニック
システム開発におけるソフトウェアテスト(結合テスト〜システムテスト)において重要視されるエビデンス(作業記録)。前後編の2回にわたって、エビデンスとしてスクリーンショットをキャプチャし、テスト仕様書や納品書に張り付けていく作業を自動化するためのVBA/マクロのテクニックを紹介する。後編は、画像ファイルをシートに張り付け、Excel 2013のメニューからスクショを直に張り付け、画像を縮小し、指定した時間にマクロを実行する方法を解説。 - [Esc]キーによるExcel VBAの実行中断を防止する
ExcelではVBA(Visual Basic for Applications)によってさまざまな処理を自動的に実行できる。しかし、VBAの実行中にユーザーが[Esc]キーあるいは[Ctrl]+[Break]キーを押すと、自動処理が止まってしまう。止めたくない場合は、Application.EnableCancelKeyプロパティの設定を変更する。 - Windows TIPSディレクトリ > プラットフォーム別 > Office > Excel