VBA GetFolder & GetFile(ファイルとフォルダのプロパティを取得する)
In this Article
このチュートリアルでは、FileSystemObjectのGetFolderおよびGetFileメソッドの使用方法を説明します。
VBAのFileSystemObjectでフォルダとファイルのプロパティを取得する
GetFolder メソッドは、指定されたパスのフォルダに対応する Folder オブジェクトを返し、そのプロパティにアクセスすることができます。GetFile メソッドは、指定されたファイルに対して同じことを行います。
VBAのリファレンスを設定する
まず、FileSystemObjectを使用する場合、VBスクリプトランタイムライブラリへの参照設定を行う必要があります。Visual Basic Editorを開き(ALT+F11)、ドロップダウン メニューからツール > 参照設定を選択して、「Microsoft Scripting Runtime」のチェックボックスにチェックを入れてください。
FileSystemObject
次に、FileSystemObjectを作成します。
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
これで、GetFolder と他のFileSystemObject メソッドにアクセスできるようになりました。
GetFolderメソッドの使用方法
まずアクセスしたいフォルダを指定します。
Set fld = FSO.GetFolder("C:\Src")
コピーは次のようにします。
fld.Copy "C:\NewFolder\"
移動はこうです。
fld.Move "C:\NewFolder\"
削除はこうです。
fld.Delete
新しいテキストファイルを作成する場合は、次のようにします。
fld.CreateTextFile "NewTextFile.txt"
このメソッドを使用すると、フォルダの属性(fld.Attributes)、作成日時(fld.DateCreated)、最終アクセス(fld.DateLastAccessed)、最終修正(fld.DateLastModified)、ドライブ文字(fld.Drive)、名前と短縮名(fld.Name, fld.ShortName)といったプロパティにアクセスすることになります。名前、fld.ShortName)、パスとショートパス(fld.Path、fld.ShortPath)、サイズ(fld.Size)、タイプ(fld.Type)、親フォルダ(fld.ParentFolder)、ルートフォルダかどうか(fld.IsRootFolder)、ファイル(fld.Files)またはサブフォルダ(fld.SubFolders)に対してループ処理やカウントなどが可能です。
これをプロシージャにまとめると、次のようになります。
Sub FSOGetFolder()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fld = FSO.GetFolder("C:\Src")
Debug.Print fld.DateCreated
Debug.Print fld.Drive
Debug.Print fld.Name
Debug.Print fld.ParentFolder
Debug.Print fld.Path
Debug.Print fld.ShortPath
Debug.Print fld.Size
Debug.Print fld.Files.Count
Debug.Print fld.Type
For Each fold In fld.SubFolders
Debug.Print fold.Name
Next fold
For Each fil In fld.Files
Debug.Print fil.Name
Next fil
End Sub
Debug.Printコマンドの結果をVBAのイミディエイトウィンドウで見るには、Ctrl+Gキーを押しましょう。
GetParentFolderNameメソッド
上記の方法とは別に、次のコードを使用して、フォルダの親フォルダ名にアクセスすることもできます。
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
ParentFold= FSO.GetParentFolderName("C:\ParentTest\Test\")
ParentFoldはこの場合、”C:\ParentTest\”になります。
このメソッドでは、パスの解決や指定したパスが存在するかどうかの確認は行いませんのでご注意ください。
GetSpecialFolder メソッド
GetSpecialFolderメソッドは、引数に0、1、2を渡すことで、それぞれWindowsフォルダパス(Windows OSがインストールするファイルがある)、システムフォルダパス(ライブラリ、フォント、デバイスドライバーがある)、一時フォルダパス(一時ファイルを格納するためのフォルダ)を取得することができます。
Sub FSOGetSpecialFolder()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Debug.Print FSO.GetSpecialFolder(0) '予想される結果: "C:\Windows\System32"
End Sub
GetFileメソッド
GetFileメソッドは、GetFolderメソッドとほぼ同様の方法で使用することができます。まずはアクセスしたいファイルを指定します。
Set fil = FSO.GetFile("C:\Src︓Test.xlsx")
そして、コピーは次のようにします。
fil.Copy "C:\Dst\"
移動はこうです。
fil.Move "C:\Dst\"
削除はこうです。
fil.Delete
また、TextStreamオブジェクトとして開くには次のようにします。
fil.OpenAsTextStream
ファイルの属性、作成日時、最終アクセス日時、最終更新日時、ドライブの文字、名前と短い名前、パスと短いパス、サイズ、タイプ、親フォルダなどのプロパティは、GetFolderメソッドで説明したのと同じ方法でアクセスすることが可能です。