VBA GetFolder & GetFile(ファイルとフォルダのプロパティを取得する)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 30, 2022

このチュートリアルでは、FileSystemObjectのGetFolderおよびGetFileメソッドの使用方法を説明します。

VBAのFileSystemObjectでフォルダとファイルのプロパティを取得する

GetFolder メソッドは、指定されたパスのフォルダに対応する Folder オブジェクトを返し、そのプロパティにアクセスすることができます。GetFile メソッドは、指定されたファイルに対して同じことを行います。

VBAのリファレンスを設定する

まず、FileSystemObjectを使用する場合、VBスクリプトランタイムライブラリへの参照設定を行う必要があります。Visual Basic Editorを開き(ALT+F11)、ドロップダウン メニューからツール > 参照設定を選択して、「Microsoft Scripting Runtime」のチェックボックスにチェックを入れてください。

vba references window 参照設定

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メソッドで説明したのと同じ方法でアクセスすることが可能です。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples