FileSystemObject
FileSystemObjectでフォルダ内のファイル一覧を取得する方法について解説します。FSOはファイル・フォルダをオブジェクトとして扱えるのが特長で、フォルダ内のFileオブジェクトは「Folderオブジェクト.Files」で取得でき、これにForEach文が使えます。
Dir関数を使ってサブフォルダの一覧を取得する方法を解説します。これは非推奨な方法で、FileSystemObjectを使った方が簡単なことに注意してください。Dirの場合は相対パスとファイルも検索されてしまい、これをはじくコードが必要になります。
空のフォルダを一括で削除する方法を解説します。親フォルダのSubFoldersをForEachでループし、FilesとSubFoldersのCOuntが共に0である子フォルダをDeleteすることで実行できます。下層フォルダまで検索する場合は、再帰呼出を追加します。
フォルダが空かどうか判定する方法を解説します。フォルダの中にファイルがなく、かつフォルダの中にフォルダない場合に空のフォルダと判定します。Folderオブジェクトに対して、.Files.Count = 0と.SubFolders.Count = 0を判定すればOKです。
フォルダを削除する際に使用する、RmDirとFileSystemObject.DeleteFolderの違いを解説します。実はこの二つはほとんど違うもの、RmDirは空のフォルダを削除するステートメントですが、DeleteFolderは中身ごとフォルダを削除するメソッドです。
中のファイル・フォルダごとフォルダを削除する場合はFileSystemObject.DeleteFolderメソッドを使い、FSO.DeleteFolder 削除フォルダパス というコードを実行します。これは空フォルダしか削除できないRmDirで行えないため、FSO必須の処理になります。
ファイルを削除する際に使用する、KillステートメントとFileSystemObject.DeleteFileメソッドの違いを解説します。両者はほとんど同じ仕様で、引数(削除するファイルのパス)、使えるワイルドカード、エラーが発生する条件などの挙動もほぼ同じです。
FileSystemObjectにてファイルを削除する、DeleteFileメソッドの使い方を解説します。FSO.DeleteFile 削除したいファイルのパス で実行できます。Killステートメントと同様、ワイルドカード*を利用して、該当ファイルの一括削除を行うこともできます。
ファイル・フォルダ操作の便利ツール「FileSystemObject」を使うための事前準備として行う、「Microsoft Scripting Runtime の参照設定」と、「FileSystemObjectのオブジェクト変数のSet」の2つの設定について、やり方を解説していきます。
FileSystemObjectはとても便利なのですが、CreateObjectやNewを使った参照・宣言部分が面倒です。これを簡単に行う方法として、Public FSO As New FileSystemObjectとPublic変数でNewまで済まし、全プロシージャで使いまわす方法があります。
Collection/Dictionary/FileSystemObject/自作クラスを使用するとき、Dim x As X、Set x = New Xと2行で宣言する方法と、Dim x As New X と1行で宣言する方法があります。この違いはNothing時の動きと、Initializeの実行タイミングに現れます。
フォルダを部分一致で検索する方法を解説します。フォルダの検索にはFileSystemObjectを使うのがおすすめです。Dir関数はワイルドカードが使えますが、引数にvbDirectoryを指定してもファイルまで一緒に検索するためコードが煩雑になります。
ファイル名を部分一致検索する方法を解説します。単純な部分一致であればDir関数にワイルドカード(*?)を指定することで実行できます。文字数や文字種を絞った部分一致まで行いたい場合は、候補のファイルすべてをLike演算子で比較します。
フォルダが存在するか判定する、Dir関数(vbDirectory)と、FileSystemObject.FolderExistsメソッドの違いを解説します。一番の違いは返り値で、True/Falseを返すFolderExistsに対し、フォルダ名を返すDir関数は="",<>""で判定する必要があります。
ファイルが存在するか判定する、Dir関数とFileSystemObject.FileExistsメソッドの違いを解説します。まずは返り値が異なり、Dir関数は=""<>""での判定が必要になります。また、Dir関数はワイルドカード*を使用した部分一致検索が可能です。
FileSystemObjectにてファイルの存在を判定する、FileExistsメソッドについて解説します。If FSO.FileExists(判定したいファイルのパス) Thenが基本形です。返り値もBooleanとわかりやすい仕様ですが、Dir関数と違ってワイルドカードは使えません。
ファイル・フォルダを扱うFileSystemObjectについて、何が便利で、何のために使うオブジェクトなのかを解説します。FSOとはファイル管理の便利ツール集であり、「フォルダやファイルをオブジェクトとして扱うことができる」ことが特長です。
FileSystemObjectにてフォルダの存在を判定する、FolderExistsメソッドについて解説します。If FSO.FolderExists(判定したいフォルダのパス) Thenが基本形です。引数もフォルダパスひとつで、返り値もBooleanと、仕様がわかりやすいメソッドです。
MkDirステートメントやFileSystemObjectのCreateFolderメソッドは、作りたいフォルダの親フォルダがないとエラーになります。この対策は[\]でSplitしてからのForEach文がストレートですが、再帰関数を使用した方法もあるため紹介します。
FileSystemObjectにてフォルダを作成する、CreateFolderメソッドについて解説します。作りたいフォルダのパスを渡すとそのフォルダを作成してるメソッドで、通常実行する分には、MkDirステートメントとエラー含めてほとんど同じ動きをします。
フォルダを作成するときに使用する、MkDirステートメントとFileSystemObject.CreateFolderメソッドの違いを解説します。両者はほとんど同じものと思ってOKで、引数、省略時のカレントフォルダ指定、エラーの発生条件も全く同じ仕様です。
知らずに落ちると抜け出せなくなるVBAの落とし穴です。Dir関数が途中で止まる、逆に無限ループする、「プロシージャの呼び出し、または引数が不正です。」エラーを出す、あたりにお悩みの方は、この落とし穴に落ちていないかご確認ください。