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

Excel VBA ≫ 3.FSO - FSOによるファイル操作(2)-b.FSOによるファイル操作A

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

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


内容 プロパティ
ファイル名取得・設定 file.Name
ファイル属性取得・設定 file.Attributes
ファイルパス取得 file.Path
ファイルサイズ取得 file.Size
ファイルタイプ取得 file.Type
ファイル作成日時取得 file.DateCreated
ファイル最終アクセス
日時取得
file.DateLastAccessed
ファイル最終更新
日時取得
file.DateLastModified
親フォルダ取得 file.ParentFolder
ドライブ名取得 file.Drive




  • 【構文】
    file.Name
    file.Attributes
    file.Path
    file.Size
    file.Type
    file.DateCreated
    file.DateLastAccessed
    file.DateLastModified
    file.ParentFolder
    file.Drive


引数名 省略 説明
なし - -


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

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

  • まず、fso.GetFolder によりフォルダオブジェクトを取得します。 その取得したフォルダオブジェクトの Files プロパティ(folder.Files)によりファイルオブジェクトのコレクションを取得します。 繰り返し処理 For Each … Next でそれぞれのファイルオブジェクトへアクセスします。
  • ⇒ 当ページ下の 使用例 参照


使用方法解説

  • file.Name
  • ファイル名の取得および変更ができます。

    <使用例>
    Dim fso     As Object
    Dim fileObj As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fileobj = fso.GetFile("C:\Users\xxx\Desktop\test.txt")
    fileobj.Name = "test_bk.txt"  'ファイル名変更
    
    'オブジェクト変数クリア
    Set fso = Nothing
    Set fileObj = Nothing
    

  • file.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 fileObj As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fileobj = fso.GetFile("C:\Users\xxx\Desktop\test.txt")
    
    '読み取り専用(値=1)かどうかのチェックする。
    '読み取り専用でない場合は読み取り専用の属性を追加する。
    if fileobj.Attributes and 1 then
        Debug.Print "読み取り専用です。"
    Else
        .Attributes = .Attributes + 1
        Debug.Print "読み取り専用に設定しました。"
    End If
    
    'オブジェクト変数クリア
    Set fso = Nothing
    Set fileObj = Nothing
    


  • file.Path
  • ファイルのフルパスを取得します。


  • file.Size
  • ファイルのサイズをバイト単位で取得します。 キロバイト単位にするには 2^10 = 1024、メガバイト単位にするには 1024*1024 で除算します。


  • file.Type
  • ファイルのタイプを取得します。テキストドキュメントなら"Text Document"、 エクセルブック(.xlsx)なら"Microsoft Office Excel ワークシート"、 マクロ有効ブック(.xlsm)なら"Microsoft Office Excel マクロ有効ワークシート"、 ワード文書なら"Microsoft Office Word 文書"となります。


  • file.DateCreated
  • ファイルの作成日時を取得します。取得する日時の形式はパソコンの設定に依存します。 Windows7 の場合、コントロールパネルの [ 地域と言語 ] から設定を確認することができます。 取得した日時の形式と照らし合わせてみたところ、 日付(短い形式)+時刻(長い形式) となっていました。 地域と言語の設定
  • file.DateLastAccessed
  • ファイルの最終アクセス日時を取得します。日時の取得形式については前述のとおりです。


  • file.DateLastModified
  • ファイルの最終更新日時を取得します。日時の取得形式については前述のとおりです。


  • file.ParentFolder
  • ファイルが格納されているフォルダパスを取得します。

    <使用例>
    Dim fso     As Object
    Dim fileObj As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fileobj = fso.GetFile("C:\Users\xxx\Desktop\test.txt")
    Debug.Print fileobj.ParentFolder
    
    'オブジェクト変数クリア
    Set fso = Nothing
    Set fileObj = Nothing
    

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


  • file.Drive
  • ファイルが格納されているドライブ名を取得します。 ネットワーク上のフォルダに格納されている場合は、ネットワーク共有名( ¥¥[サーバー名]¥[共有フォルダ名] )を取得します。

    <使用例>
    Dim fso     As Object
    Dim fileObj As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fileobj = fso.GetFile("C:\Users\xxx\Desktop\test.txt")
    Debug.Print fileobj.Drive
    
    'オブジェクト変数クリア
    Set fso = Nothing
    Set fileObj = Nothing
    

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

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

    Sub sample_fs022_01()
        Dim fso         As Object
        Dim fileObj     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 fileObj In folderObj.Files
            myRow = myRow + 1
            With fileObj
                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 fileObj = Nothing
        Set folderObj = Nothing
    End Sub
    

    <カレントフォルダ内のファイル> カレントフォルダ内のファイル "aaa.txt" だけファイル属性を"読み取り専用"かつ"隠しファイル"にしてあります。 読み取り専用かつ隠しファイル <sample_fs022_01実行結果> sample_fs022_01実行結果

カテゴリ内ページ



Page
Top