ファイルシステムオブジェクトによるフォルダ操作(2)

このページでは下表のプロパティについて説明します。これらはすべて フォルダオブジェクトのプロパティになります。

内容 プロパティ
フォルダ名取得・設定 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

  Setステートメント

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

  Setステートメント

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

  Setステートメント

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

  Setステートメント

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

  Setステートメント

 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

  Setステートメント

カレントフォルダ内のサブフォルダ情報をシートに表示する例

カレントフォルダ内のサブフォルダ情報(フォルダ名、最終更新日時、フォルダサイズ、読み取り専用、隠しフォルダ)をアクティブシートに一覧表示する例です。

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” だけファイル属性を”読み取り専用”かつ”隠しファイル”にしてあります。

読み取り専用かつ隠しファイル
読み取り専用かつ隠しファイル

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

sample_fs032_01実行結果
sample_fs032_01実行結果

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

【参考】DOSコマンド attrib によるフォルダ読み取り専用属性の変更方法

 
ファイルシステムオブジェクトのプロパティ・メソッド
カレントフォルダ内のファイル情報をシートに表示する

タイトルとURLをコピーしました