アクセス上位ページ
 
最近の更新内容
(3)-a.FSOによるフォルダ操作@ ⇐ [PREV]
[NEXT] ⇒ (3)-c.FSOによるフォルダ移動

Excel VBA ≫ 3.FSO - FSOによるフォルダ操作(3)-b.FSOによるフォルダ操作A

ファイルシステムオブジェクトを使用したフォルダ操作A

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


内容 プロパティ
フォルダ名取得・設定 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.DateCreated
    folder.DateLastAccessed
    folder.DateLastModified
    folder.ParentFolder
    folder.Drive
    folder.Files
    folder.SubFolders

引数名 省略 説明
なし - -


上記のプロパティを使用するには、以下に示すいずれかの方法で事前にフォルダオブジェクトを取得しておく必要があります。

<フォルダオブジェクトを取得する主な方法2つ>
  • fso.GetFolder を使用し、フォルダのパスからフォルダオブジェクトを取得します。
  • ⇒ 『 フォルダオブジェクトの取得 』 参照

  • フォルダ内のサブフォルダを処理の対象としたい場合は、 フォルダオブジェクトの SubFolders プロパティ(folder.SubFolders)を使用します。 取得したフォルダオブジェクトのコレクションは 繰り返し処理 For Each … Next でそれぞれのフォルダオブジェクトへアクセスすることができます。
  • ⇒ 当ページ下の 使用例 参照


使用方法解説

  • 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
    

    <実行結果(イミディエイトウィンドウ)>
    C:\Users\xxx\Desktop
    


  • 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
    

    <実行結果(イミディエイトウィンドウ)>
    C:
    


  • 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
    


  • 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
    

    <カレントフォルダ内のサブフォルダ> カレントフォルダ内のファイルとサブフォルダ "aaaa" だけ事前にフォルダ属性を "読み取り専用" かつ "隠しフォルダ" にしてあります。 読み取り専用かつ隠しファイル
    管理人から一言・・・ フォルダの読み取り専用属性について
    マイクロソフトのサポート情報によると、フォルダの読み取り専用属性はフォルダのプロパティ画面から変更ができないようです。変更するにはDOSコマンド attrib を使用するか、VBAで変更するかの2択になります。DOSコマンド attrib で読み取り専用属性を付与する法は以下の外部サイトを参照してください。

    【参考】DOSコマンド attrib によるフォルダ読み取り専用属性の変更方法
  • <sample_fs032_01実行結果>
  • sample_fs032_01実行結果

カテゴリ内ページ



Page
Top