VBAでフォルダ一覧を取得する方法として、FileSystemObjectのGetFolderとSubFoldersを使用することで実現できます。
FileSystemObjectは、ファイルシステムオブジェクトを操作するための標準ライブラリであり、ファイルやフォルダの作成や削除、コピー、移動などを簡単に行うことができます。
GetFolderメソッドは、指定されたフォルダオブジェクトを取得します。
SubFoldersプロパティは、フォルダ内に存在するフォルダ一覧を取得します。
ここでは、FileSystemObjectのGetFolderとSubFoldersを使ってVBAでフォルダ一覧を取得する方法について説明します。
もくじ
【サンプルソース】フォルダ一覧の取得
VBAでFileSystemObjectを使用してフォルダ一覧を取得する方法は、以下のような手順で行うことができます。
1.FileSystemObjectを作成する
CreateObject関数を使用してFileSystemObjectを作成します。
2.フォルダの一覧を取得する
FileSystemObjectのGetFolderメソッドを使用して、フォルダのオブジェクトを取得します。
3.フォルダ内のフォルダを取得する
取得したフォルダのオブジェクトのSubFoldersプロパティを使用して、フォルダ内のフォルダ一覧を取得します。
4.取得したフォルダ一覧をループ処理する
取得したフォルダ一覧をループ処理して、各フォルダの情報を取得します。
以下は、上記の手順を反映したVBAサンプルソースです。
Sub GetFolderList()
Dim fso As Object
Dim mainFolder As Object
Dim subFolder As Object
Dim folderList As String
' FileSystemObjectを作成する
Set fso = CreateObject("Scripting.FileSystemObject")
' フォルダの一覧を取得する
Set mainFolder = fso.GetFolder("D:\200_work\100_sample\AAA")
folderList = ""
' フォルダ内のフォルダを取得する
For Each subFolder In mainFolder.SubFolders
' 取得したフォルダ名を変数に格納する
folderList = folderList & subFolder.Name & vbCrLf
Next
'取得したフォルダ名一覧を表示する
MsgBox folderList
' オブジェクトを解放する
Set subFolder = Nothing
Set mainFolder = Nothing
Set fso = Nothing
End Sub
上記のサンプルソースでは、「D:\200_work\100_sample\AAA」以下のフォルダ一覧を取得し、各フォルダの名前を表示する例を示しています。
フォルダオブジェクトのプロパティを使用することで、フォルダ情報を取得することができます。
(例:Name、Path、DateCreated、DateLastModifiedなど)
必要に応じて、取得した情報を使った処理を追加してください。
注意点としては、フォルダ一覧を取得する際には、フォルダのアクセス権限を持っていることを確認してください。
アクセス権を持っていない場合、フォルダ情報を取得しようとするとエラーが発生します。
また、フォルダ内に大量のフォルダが存在する場合、処理に多くの時間が必要となります。
【サンプルソース】フォルダ情報の取得
フォルダ情報を取得する場合、フォルダオブジェクトのプロパティを利用します。
フォルダオブジェクトのプロパティは、以下のようなものがあります。
1.Name
フォルダの名前を取得します。
2.Path
フォルダのパスを取得します。
3.DateCreated
フォルダの作成日時を取得します。
4.DateLastAccessed
フォルダの最終アクセス日時を取得します。
5.DateLastModified
フォルダの最終更新日時を取得します。
6,Size
フォルダのサイズを取得します。
7.Attributes
フォルダの属性を取得します。
フォルダの属性は、読み取り専用 (ReadOnly)、隠し (Hidden)、システム (System)、アーカイブ (Archive) などがあります。
これらのプロパティを使用することで、フォルダに関する情報を取得することができます。
以下は、例としてフォルダオブジェクトのプロパティを使用して、フォルダの情報を取得するVBAサンプルソースです。
Sub GetFolderProperties()
Dim fso As Object
Dim folder As Object
' FileSystemObjectを作成する
Set fso = CreateObject("Scripting.FileSystemObject")
' フォルダのオブジェクトを取得する
Set folder = fso.GetFolder("D:\200_work\100_sample\AAA")
' フォルダのプロパティを取得して表示する
MsgBox "フォルダ名: " & folder.Name
MsgBox "フォルダパス: " & folder.Path
MsgBox "作成日時: " & folder.DateCreated
MsgBox "最終アクセス日時: " & folder.DateLastAccessed
MsgBox "最終更新日時: " & folder.DateLastModified
MsgBox "サイズ: " & folder.Size
MsgBox "属性: " & folder.Attributes
' オブジェクトを解放する
Set folder = Nothing
Set fso = Nothing
End Sub
上記のサンプルソースでは、「D:\200_work\100_sample\AAA」のフォルダオブジェクトを取得し、そのフォルダのプロパティを取得してメッセージボックスに表示する例を示しています。
フォルダの属性について
フォルダの属性は、フォルダの状態を示す値であり、以下のようなものがあります。
1:ReadOnly
フォルダが読み取り専用であることを示しています。
フォルダ内のファイルやサブフォルダを変更できない状態です。
2:Hidden
フォルダが隠しフォルダであることを示しています。
一般的には、フォルダを隠すために使用されます。
4:System
フォルダがシステムフォルダであることを示します。
システムフォルダは、OSやアプリケーションによって使用される特殊なフォルダを指します。
8:Volume
フォルダがボリュームラベルであることを示しています。
通常、ドライブのルートに存在するボリュームラベルのフォルダに対して指定されます。
16:Directory
フォルダがディレクトリであることを示しています。
通常、この属性はすべてのフォルダに対して指定されます。
32:Archive
フォルダがアーカイブされていることを示しています。
通常、ファイルが変更されると自動的に割り当てられ、バックアップツールなどで使用されます。
これらの属性は、フォルダの状態を示す値です。
複数の属性を持っている場合は、属性値を足した値になります。
例えば、ReadOnlyとHiddenの両方の属性を持っている場合、属性値は3(1+2)になります。
フォルダオブジェクトのAttributesプロパティを使用して、フォルダの属性を取得することができます。
まとめ
VBAでフォルダ一覧を取得する方法として、FileSystemObjectのGetFolderとSubFoldersを使用する方法を紹介しました。
また、GetFolderで取得したフォルダオブジェクトからフォルダ情報を取得する方法も紹介しました。
さらに、フォルダの属性について説明しました。
サンプルソースを参考に、ご自身でもフォルダ一覧を作成したり、フォルダ情報を取得してみてください。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

