【Excel VBA】FileSystemObjectを使いこなす! 第四回目 オブジェクトのプロパティを確認する

VBAでの操作

こんにちは、blueです。

前回はFileSystemObject(FSO)内のオブジェクトを実際に取得してみました。

前回の記事はこちら

今回は取得したオブジェクトに対するプロパティを確認します。

FSOが使えるようになるとファイルの名前変更やコピー、移動などエクスプローラー上で行う操作はすべて可能になります。

難しそうに見えるかもしれませんがおおよその手順は決まっています。

大事な個所を絞って説明していきますのですべて読んでいただければきっと使えるようになります。

Excel内でのVBA操作から一歩踏み出て外の機能が使えるようになっていきましょう。

スポンサーリンク

FSOを使用する手順

FSOを使用してファイル(フォルダ)を操作する手順は以下のようになります。

なおここでいうファイルやフォルダの操作はファイルを開くとか保存するとかなどExcel内で操作できる内容ではなく、ファイルにアクセスして操作する手順になります。

  1. 対象となるファイルあるいはフォルダパスを取得する
  2. 対象のファイル、フォルダパスに対するオブジェクトを取得する
  3. オブジェクトに対してメソッドやプロパティを使用する

今回は3のオブジェクトのプロパティについて説明します。

Folderオブジェクトのプロパティ

フォルダオブジェクトのプロパティとしては以下のようなものがあります。

プロパティオブジェクト説明
Attributesフォルダの属性
DateCreatedフォルダが作成された日時
DateLastAccessedフォルダが最後にアクセスされた日時
DateLastModifiedフォルダが最後に修正された日時
Driveフォルダのドライブのオブジェクト
Filesフォルダのファイルズコレクション
Nameフォルダの名前
ParentFolderフォルダの親フォルダのオブジェクト
Pathフォルダのフルパス
Sizeフォルダのサイズ
SubFoldersフォルダのサブフォルダのコレクション

ただこれだけだとわかりにくいので実際のエクスプローラーの画面で説明します。

以下の「子フォルダ1」に対する情報を取得することとします。

クリックすると拡大します

以下は「子フォルダ1」のプロパティとFolderオブジェクトのプロパティの関係になります。

クリックすると拡大します

また以下はエクスプローラーで確認できる「子フォルダ1」と上下階層の関係になります。こちらはオブジェクト取得になります。

クリックすると拡大します

このように日々操作しているフォルダに関する情報が上下階層含めて取得できるようになります。


実際のコードは以下になります。

(長いですが今回追加したコードはDebug.Print以下のみです。

前回取得したオブジェクトに対してプロパティをセットしてイミディエイトウィンドウに表示させています)

Private Sub FolderProperty()
    
    Dim FSO As Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    
    Dim FD As FileDialog
    Dim FolderName As String
    
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    
    If FD.Show = True Then
        FolderName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    Set FSO = New Scripting.FileSystemObject
    Set objFolder = FSO.getFolder(FolderName)
    
    Debug.Print "Attributes:" & objFolder.Attributes
    Debug.Print "DateCreated:" & objFolder.DateCreated
    Debug.Print "DateLastAccessed:" & objFolder.DateLastAccessed
    Debug.Print "DateLastModified:" & objFolder.DateLastModified
    Debug.Print "Drive.Path:" & objFolder.Drive.Path
    Debug.Print "Files.Count: " & objFolder.Files.Count
    Debug.Print "Name:" & objFolder.Name
    Debug.Print "ParentFolder.Path" & objFolder.ParentFolder
    Debug.Print "Path:" & objFolder.Path
    Debug.Print "Size:" & objFolder.Size
    Debug.Print "SubFolders.Count:" & objFolder.SubFolders.Count
    Debug.Print "Type:" & objFolder.Type
    
End Sub

ちなみにDebug.Printの表示結果は以下です

クリックすると拡大します

先ほどのobjFolderに対する情報が取れていることがわかります。

なおこの中のFilesやSubFoldersといったプロパティは今後FSOを扱う上で非常に強力なものですので覚えておいてください。

Fileオブジェクトのプロパティ

ファイルオブジェクトのプロパティとしては以下のようなものがあります

プロパティオブジェクト説明
Attributesファイルの属性
DateCreatedファイルが作成された日時
DateLastAccessedファイルが最後にアクセスされた日時
DateLastModifiedファイルが最後に修正された日時
Driveファイルのドライブのオブジェクト
Nameファイルの名前
ParentFolderファイルの親フォルダのオブジェクト
Pathフォルダのフルパス
Sizeフォルダのサイズ

こちらも エクスプローラーの画面で説明すると以下になります。

以下の「子ファイル1.xlsx」に対する情報を取得することとします。

クリックすると拡大します

以下は「子ファイル1.xlsx」のプロパティとFileオブジェクトのプロパティの関係になります。

クリックすると拡大します

以下はエクスプローラーで確認できる「子ファイル1.xlsx」と上階層の関係になります。こちらはオブジェクト取得になります。

クリックすると拡大します

フォルダオブジェクトとの違いはSubFoldersやFilesのような下の階層がない事くらいです。

同様に実際のコードは以下になります。

Private Sub FileProperty()
    
    Dim FSO As Scripting.FileSystemObject
    Dim objFile As Scripting.File
    
    Dim FD As FileDialog
    Dim FileName As String
    
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    
    If FD.Show = True Then
        FileName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    Set FSO = New Scripting.FileSystemObject
    Set objFile = FSO.getFile(FileName)
    
    Debug.Print "Attributes:" & objFile.Attributes
    Debug.Print "DateCreated:" & objFile.DateCreated
    Debug.Print "DateLastAccessed:" & objFile.DateLastAccessed
    Debug.Print "DateLastModified:" & objFile.DateLastModified
    Debug.Print "Drive.Path:" & objFile.Drive.Path
    Debug.Print "Name:" & objFile.Name
    Debug.Print "ParentFolder.Path" & objFile.ParentFolder.Path
    Debug.Print "Path:" & objFile.Path
    Debug.Print "Size:" & objFile.Size
    Debug.Print "Type:" & objFile.Type
    
End Sub

同様にDebug.Printの表示結果は以下になります。

クリックすると拡大します

同様にファイルの情報を取得することができました。

Foldersコレクションのプロパティ

前回と今回で取得したオブジェクトは単一のFileやFolderになりますが今後はFolderやFileの集まりであるFoldersコレクションやFilesコレクションを扱っていくことになります。

その為ここで説明しておきます。

Foldersコレクションのプロパティは以下になります。

プロパティオブジェクト説明
CountFoldersコレクションに含まれるフォルダの数
ItemFoldersコレクションに含まれる一つ一つのフォルダのオブジェクト
なお引数に使用できるのはKey=フォルダ名でインデックス番号は使えない

数は少ないですが多くのフォルダを扱う際にはコレクションとともに使用します。

Filesコレクションのプロパティ

同様にFilesコレクションのプロパティは以下になります。

プロパティオブジェクト説明
CountFilesコレクションに含まれるファイルの数
ItemFilesコレクションに含まれる一つ一つのファイルのオブジェクト
なお引数に使用できるのはKey=ファイル名でインデックス番号は使えない

Foldersコレクションと同様に多くのファイルを扱う際にはコレクションとともに使用します。

参考)
フォルダやファイルにあるAttributes(属性)プロパティの値については以下のDocsを参考ください。

値は足し合わせで決定されるので合わなければ他の定数が含まれていないか確認ください。

まとめ

今回はFSOで取得したオブジェクトに関するプロパティについて説明しました。

FSOを宣言、使用するだけでこれだけ多くのプロパティ=情報を扱うことができるようになります。

ぜひ自分のファイル、フォルダで試してみてもらえると幸いです。

次回はアクションに関するメソッドについて説明します。

コメント

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