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

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

内容 プロパティ
ファイル名取得・設定 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.DateCreatedfile.DateLastAccessed
file.DateLastModified
file.ParentFolder
file.Drive

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

  • fso.GetFile を使用し、ファイルのパスからファイルオブジェクトを取得します。
    ⇒ 『 ファイルオブジェクトの取得 』 参照
  • fso.GetFolder によりフォルダオブジェクトを取得します。 その取得したフォルダオブジェクトの Files プロパティ(folder.Files)によりファイルオブジェクトのコレクションを取得し、ループ処理などでそれぞれのファイルオブジェクトへアクセスします。
    ⇒ 当ページ下の使用例『ファイル情報を表示する例』参照

各プロパティの説明

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

  Setステートメント

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
    fileobj.Attributes = fileobj.Attributes + 1
    Debug.Print "読み取り専用に設定しました。"
End If

'オブジェクト変数クリア
Set fso = Nothing
Set fileObj = Nothing

  Setステートメント

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

  Setステートメント

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

  Setステートメント

ファイル情報を表示する例

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

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

 fso.GetFolder For Each…Next  Withステートメント Setステートメント
 ワークシート内の使用済み領域(UsedRange)

下図がカレントフォルダの状態です。カレントフォルダにはテキストファイル、ワードファイル、エクセルファイルの3つがあります。

カレントフォルダ内のファイル
カレントフォルダ内のファイル

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

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

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

sample_fs022_01実行結果
sample_fs022_01実行結果

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

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