【Excel VBA】Folderオブジェクトを取得する(GetFolder/SubFolders/ParentFolder)

はじめに

今回は、FileSystemObjectのFolderオブジェクトを取得する方法をご紹介します。
Folderオブジェクトは、フォルダを操作するために必要なオブジェクトなので、使用する頻度は多いかと思います。
本記事では、サンプルコードを用いてコピペで使える実践的なコードもご紹介します。

この記事を読むメリット
  • Fileオブジェクトを取得する 3つのパターンが分かります。
  • 取得における注意点、エラーの回避方法についても詳しく理解できます。

前提

FileSystemObjectの参照設定が必要

Folderオブジェクトを利用するには、FileSystemObjectの参照設定が必要です。

以下の記事では、FileSystemObjectの参照設定について解説しています。

関連メソッド/プロパティ

#メソッド/プロパティ説明
1GetFolderフォルダパスを指定し、特定のFolderオブジェクトを取得する
2SubFoldersフォルダ内にある、すべてのFolderオブジェクトを取得する
3ParentFolderファイル・フォルダの親フォルダのFolderオブジェクトを取得する
Folderオブジェクト取得 – 関連メソッド/プロパティ

Folderオブジェクトの主なプロパティ

#プロパティ説明
1Attributesフォルダの属性を取得、設定する
2DateCreatedフォルダの作成日時を取得する
3DateLastAccessed最後にアクセスされた日時を取得する
4DateLastModified最後に更新された日時を取得する
5Driveフォルダが保存されているドライブ(Driveオブジェクト)を取得する
6Filesフォルダ内のすべてのファイル(Fileオブジェクト)を取得する
7IsRootFolderルートフォルダであるかを判定する
8Nameフォルダ名を取得、設定する
9ParentFolderフォルダが保存されているフォルダ(Folderオブジェクト)を取得する
10Pathフォルダパスを取得する
11Sizeフォルダ内のファイルおよびサブフォルダの合計容量を取得する
12SubFoldersフォルダ内のすべてのフォルダ(Folderオブジェクト)を取得する
Folderオブジェクトの主なプロパティ

基本情報

GetFolderメソッド

フォルダパスを指定し、特定のFolderオブジェクトを取得する場合、FileSystemObjectのGetFolderプロパティを使用します。

構文

構文

FileSystemObject.GetFolder(FolderPath)

緑色は引数です。

引数

#引数必須/任意説明
1FolderPath必須Folderオブジェクトとして取得したいフォルダパスを指定
GetFolderメソッド – 引数

FolderPathは、フォルダ名のみの指定も可能です。
フォルダ名のみ指定した場合、カレントフォルダのフォルダが対象となります。

指定したフォルダが存在しない場合、エラーが発生します。
処理実行前に、フォルダの存在チェックを実施するようにしましょう。

めい

フォルダの存在チェックについては、以下の記事で解説しています。

SubFoldersプロパティ

フォルダ内にある すべてのFolderオブジェクトを取得する場合、FolderオブジェクトのSubFoldersプロパティを使用します。

構文

FolderObject.SubFolders

取得できるフォルダは、「隠しファイル」や「システムファイル」の属性が設定されているフォルダも対象となります。

ParentFolderプロパティ

ファイル・フォルダの親フォルダのFolderオブジェクトを取得する場合、ParentFolderプロパティを使用します。

構文

FileObject.ParentFolder
FolderObject.ParentFolder

親フォルダが無い場合(ルートディレクトリ直下のフォルダやファイル等)はエラーとなりますのでご注意ください。

めい

Fileオブジェクトの取得方法については、以下の記事を参照ください。

サンプルコード

指定のフォルダ情報をセルに出力する

サンプルコード
Public Sub getFolderInfo()
    Dim fso As New FileSystemObject ' FSOインスタンス生成
    Dim myFolder As Folder          ' Folderオブジェクト

    ' Folderオブジェクトを取得
    Set myFolder = fso.GetFolder("C:\vba-hack")

    ' セルにファイル情報を書き出し
    Cells(1, 1).Value = myFolder.Name             ' フォルダ名
    Cells(1, 2).Value = myFolder.DateLastAccessed ' 更新日時
    Cells(1, 3).Value = myFolder.Size             ' フォルダサイズ
End Sub

指定のフォルダ配下のフォルダ情報をセルに出力する

サンプルコード
Public Sub getFolderInfoForSubFolder()
    Dim fso As New FileSystemObject ' FSOインスタンス生成
    Dim myTargetFolder As Folder    ' 対象Folderオブジェクト
    Dim mySubFolder As Folder       ' サブFolderオブジェクト
    Dim loopCnt As Integer          ' ループカウンタ

    ' 対象Folderオブジェクトを取得
    Set myTargetFolder = fso.GetFolder("C:\vba-hack")

    ' サブFolderオブジェクトを取得し、その分ループ
    loopCnt = 1
    For Each mySubFolder In myTargetFolder.SubFolders

        Cells(loopCnt, 1).Value = mySubFolder.Name             ' フォルダ名
        Cells(loopCnt, 2).Value = mySubFolder.DateLastAccessed ' 更新日時
        Cells(loopCnt, 3).Value = mySubFolder.Size             ' フォルダサイズ

        loopCnt = loopCnt + 1
    Next mySubFolder
End Sub

指定のフォルダの親フォルダ情報をセルに出力する

サンプルコード
Public Sub getFolderInfoForParentFolder()
    Dim fso As New FileSystemObject ' FSOインスタンス生成
    Dim myTargetFolder As Folder    ' 対象Folderオブジェクト
    Dim myParentFolder As Folder    ' 親Folderオブジェクト

    ' Folderオブジェクトを取得
    Set myTargetFolder = fso.GetFolder("C:\vba-hack\vba")

    ' 親Folderオブジェクトを取得
    Set myParentFolder = myTargetFolder.ParentFolder

    ' セルに親フォルダ情報を書き出し
    Cells(1, 1).Value = myParentFolder.Name             ' フォルダ名
    Cells(1, 2).Value = myParentFolder.DateLastAccessed ' 更新日時
    Cells(1, 3).Value = myParentFolder.Size             ' フォルダサイズ
End Sub
めい

上記の例では、「C:\vba-hack\vba」の親ディレクトリを取得しているので、「vba-hack」ディレクトリが取得できます。

指定のファイルの親フォルダ情報をセルに出力する

サンプルコード
Public Sub getFolderInfoForFileParentFolder()
    Dim fso As New FileSystemObject ' FSOインスタンス生成
    Dim myTargetFile As File        ' 対象Fileオブジェクト
    Dim myParentFolder As Folder    ' 親Folderオブジェクト

    ' Fileオブジェクトを取得
    Set myTargetFile = fso.GetFile("C:\vba-hack\vba\TestParentFolder.txt")

    ' 親Folderオブジェクトを取得
    Set myParentFolder = myTargetFile.ParentFolder

    ' セルに親フォルダ情報を書き出し
    Cells(1, 1).Value = myParentFolder.Name             ' フォルダ名
    Cells(1, 2).Value = myParentFolder.DateLastAccessed ' 更新日時
    Cells(1, 3).Value = myParentFolder.Size             ' フォルダサイズ
End Sub
りゅう

上記の例では、「C:\vba-hack\vba\TestParentFolder.txt」の親ディレクトリを取得しているので、「vba」ディレクトリが取得できます。

最後に

今回は、Folderオブジェクトを取得する方法をご紹介させて頂きました。

この記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA