このページでは下表のプロパティについて説明します。これらはすべて フォルダオブジェクトのプロパティになります。
内容 | プロパティ |
---|---|
フォルダ名取得・設定 | folder.Name |
フォルダ属性取得・設定 | folder.Attributes |
フォルダパス取得 | folder.Path |
フォルダサイズ取得 | folder.Size |
フォルダタイプ取得 | folder.Type |
フォルダ作成日時取得 | folder.DateCreated |
フォルダ最終アクセス日時取得 | folder.DateLastAccessed |
フォルダ最終更新日時取得 | folder.DateLastModified |
親フォルダ取得 | folder.ParentFolder |
ドライブ名取得 | folder.Drive |
フォルダ内のファイル取得 | folder.Files |
フォルダ内のサブフォルダ取得 | folder.SubFolders |
使用方法
folder.Name folder.Attributes folder.Path folder.Size folder.Type folder.DateCreatedfolder.DateLastAccessedfolder.DateLastModified folder.ParentFolderfolder.Drive folder.Filesfolder.SubFolders
上記のプロパティを使用するには、以下に示すいずれかの方法で事前にフォルダオブジェクトを取得しておく必要があります。
- fso.GetFolder を使用し、フォルダのパスからフォルダオブジェクトを取得します。 ⇒ 『フォルダオブジェクトの取得 』 参照
- フォルダ内のサブフォルダを処理の対象としたい場合は、 フォルダオブジェクトの SubFolders プロパティ(folder.SubFolders)を使用します。 取得したフォルダオブジェクトのコレクションはループ処理などでそれぞれのフォルダオブジェクトへアクセスすることができます。 ⇒ 当ページ下の使用例『カレントフォルダ内のサブフォルダ情報をシートに表示する例』参照
各プロパティの説明
folder.Name
フォルダ名の取得および変更ができます。
Dim fso As Object
Dim folderObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
folderObj.Name = "bbb" 'aaa ⇒ bbb へフォルダ名変更
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
folder.Attributes
フォルダ属性を取得します。一部の属性(下表の『設定可否』に”○”がついている属性)については値の変更も可能です。
定数 | 値 | 説明 | 設定可否 |
---|---|---|---|
Normal | 0 | 標準フォルダ(既定値) | – |
ReadOnly | 1 | 読み取り専用フォルダ | ○ |
Hidden | 2 | 隠しフォルダ | ○ |
System | 4 | システム フォルダ ※Windowsのみ |
○ |
Volume | 8 | ボリューム ラベル ※Windowsのみ |
× |
Directory | 16 | フォルダ | × |
Archive | 32 | バックアップ後の変更有無 ※Windowsのみ |
○ |
Alias | 64 | エイリアス フォルダ ※Macintoshのみ |
× |
Compressed | 128 | 圧縮フォルダ | × |
Dim fso As Object
Dim folderObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
'隠しフォルダ(値=2)かどうかのチェックする。
'隠しフォルダでない場合は隠しフォルダの属性を追加する。
if fileobj.Attributes and 2 then
Debug.Print "隠しフォルダです。"
Else
.Attributes = .Attributes + 2
Debug.Print "隠しフォルダに設定しました。"
End If
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
folder.Path
フォルダのフルパスを取得します。
folder.Size
フォルダのサイズをバイト単位で取得します。キロバイト単位にするには 2^10 = 1024、メガバイト単位にするには 1024*1024 で除算します。
folder.Type
フォルダの場合は一律”ファイル フォルダー”となります。
folder.DateCreated
フォルダの作成日時を取得します。取得する日時の形式はパソコンの設定に依存します。Windows7 の場合、コントロールパネルの [ 地域と言語 ] から設定を確認することができます。取得した日時の形式と照らし合わせてみたところ、 日付(短い形式)+時刻(長い形式) となっていました。

folder.DateLastAccessed
フォルダの最終アクセス日時を取得します。日時の取得形式については前述のとおりです。
folder.DateLastModified
フォルダの最終更新日時を取得します。日時の取得形式については前述のとおりです。
folder.ParentFolder
親フォルダのパスを取得します。
Dim fso As Object
Dim folderObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
Debug.Print folderObj.ParentFolder
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
folder.Drive
フォルダが格納されているドライブ名を取得します。ネットワーク上のフォルダに格納されている場合は、ネットワーク共有名( ¥¥[サーバー名]¥[共有フォルダ名] )を取得します。
Dim fso As Object
Dim folderObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
Debug.Print folderObj.Drive
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
folder.Files
フォルダ内のファイルコレクションを取得します。
次のサンプルは、フォルダオブジェクトからファイルコレクションを取得する例です。
Dim fso As Object
Dim folderObj As Object
Dim filesObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
Set filesObj = folderObj.Files
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
Set filesObj = Nothing
Files プロパティ使用例 => カレントフォルダ内のファイル情報をシートに表示する
folder.SubFolders
フォルダ内のサブフォルダコレクションを取得します。
次のサンプルは、フォルダオブジェクトからサブフォルダコレクションを取得する例です。
Dim fso As Object
Dim folderObj As Object
Dim subfoldersObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")
Set subfoldersObj = folderObj.SubFolders
'オブジェクト変数クリア
Set fso = Nothing
Set folderObj = Nothing
Set subfoldersObj = Nothing
カレントフォルダ内のサブフォルダ情報をシートに表示する例
カレントフォルダ内のサブフォルダ情報(フォルダ名、最終更新日時、フォルダサイズ、読み取り専用、隠しフォルダ)をアクティブシートに一覧表示する例です。
Sub sample_fs032_01()
Dim fso As Object
Dim subFolderObj As Object
Dim folderObj As Object
Dim myFolder As String
Dim myRow As Long
Set fso = CreateObject("Scripting.FileSystemObject")
myFolder = "." '"." はカレントフォルダを意味します。
'フォルダオブジェクトの取得
Set folderObj = fso.GetFolder(myFolder)
'ヘッダーの編集
myRow = 1
Cells(myRow, 1).Value = "フォルダ名"
Cells(myRow, 2).Value = "最終更新日時"
Cells(myRow, 3).Value = "サイズ(Byte)"
Cells(myRow, 4).Value = "読み取り専用"
Cells(myRow, 5).Value = "隠しファイル"
For Each subFolderObj In folderObj.SubFolders
myRow = myRow + 1
With subFolderObj
Cells(myRow, 1).Value = .Name
'自動的に書式が変更されるのを防ぐため、先頭に"'"を付与
Cells(myRow, 2).Value = "'" & .DateLastModified
Cells(myRow, 3).Value = .Size
'読み取り専用属性チェック
If .Attributes And 1 Then
Cells(myRow, 4).Value = "○"
Else
Cells(myRow, 4).Value = "×"
End If
'隠しファイル属性チェック
If .Attributes And 2 Then
Cells(myRow, 5).Value = "○"
Else
Cells(myRow, 5).Value = "×"
End If
End With
Next
'使用済みセル範囲のセル幅を自動調整
ActiveSheet.UsedRange.Columns.AutoFit
'オブジェクト変数のクリア
Set fso = Nothing
Set subFolderObj = Nothing
Set folderObj = Nothing
End Sub
fso.GetFolder
For Each…Next
Withステートメント
Setステートメント
ワークシート内の使用済み領域(UsedRange)
下図がカレントフォルダの状態です。カレントフォルダにはサブフォルダが3つがあります。

“aaaa” だけファイル属性を”読み取り専用”かつ”隠しファイル”にしてあります。

上記のサンプルマクロを実行するとアクティブシートにサブフォルダの情報が表示されます。

フォルダの読み取り専用属性について
マイクロソフトのサポート情報によると、フォルダの読み取り専用属性はフォルダのプロパティ画面から変更ができないようです。変更するにはDOSコマンド attrib を使用するか、VBAで変更するかの2択になります。DOSコマンド attrib で読み取り専用属性を付与する法は以下の外部サイトを参照してください。
【参考】DOSコマンド attrib によるフォルダ読み取り専用属性の変更方法