見出し画像

VBA基礎3:File System Object

1.概要

 ファイル操作関連の処理を行うオブジェクトであるFile System Object(FSO)を紹介します。FSOを利用してディスク・フォルダ・ファイルの操作が可能です。

2.環境構築

 事前準備として「ツール」->「参照設定」->「Microsoft Scripting Runtime」を選択しておきます。

 参考までに環境構築無しでも「CreateObject("Scripting.FileSystemObject") '」でFSOオブジェクト作成可能です。

[IN]
Sub testFSO()

    Set wsh = CreateObject("WScript.Shell") 'Shellオブジェクト作成
    Set fso = CreateObject("Scripting.FileSystemObject") 'FSOオブジェクト作成
    
    Path_desktop = wsh.SpecialFolders("Desktop") 'DeskTopのパス取得
    filepath = Path_desktop & "\note" 'noteフォルダのパス作成
    
    Debug.Print Path_desktop
    Debug.Print filepath
    
    If fso.FolderExists(filepath) Then
        Debug.Print "noteフォルダはデスクトップにあります"
    Else
        Debug.Print "該当フォルダは存在しません"
    End If
    
End Sub

[OUT]
C:\Users\KIYO\Desktop\note
noteフォルダはデスクトップにあります

3.ファイル情報取得

3-1.ファイル情報の簡易取得

 FSOのメソッドを使用することで下記のような情報が取得できます。

Sub FSOを使用したファイル情報を取得()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject ' インスタンス化
    
    filepath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    
    '項目名を記載 ※コロンをつけて1行に記載
    Range("A7").Value = "項目名": Range("A8").Value = "ベースネーム": Range("A9").Value = "拡張子":    Range("A10").Value = "作成日": Range("A11").Value = "最終アクセス日": Range("A12").Value = "最終更新日": Range("A13").Value = "ルートドライブ名": Range("A14").Value = "親フォルダ": Range("A15").Value = "サイズ": Range("A16").Value = "タイプ"

    Range("B7").Value = "出力値"
    Range("B8").Value = fso.GetBaseName(filepath)
    Range("B9").Value = fso.GetExtensionName(filepath)
    Range("B10").Value = fso.GetFile(filepath).DateCreated
    Range("B11").Value = fso.GetFile(filepath).DateLastAccessed
    Range("B12").Value = fso.GetFile(filepath).DateLastModified
    Range("B13").Value = fso.GetFile(filepath).Drive
    Range("B14").Value = fso.GetFile(filepath).ParentFolder
    Range("B15").Value = fso.GetFile(filepath).Size
    Range("B16").Value = fso.GetFile(filepath).Type

End Sub

[OUT]
note_マクロ機能一覧
xlsm
2021/12/5 21:56
2021/12/11 11:25
2021/12/11 11:25
C:
C:\Users\KIYO\Desktop\note\05_VBA\note_マクロ機能一覧
18163
Microsoft Excel マクロ有効ワークシート

4-2.ファイル情報の詳細

 fso.GetFile(path)でファイルオブジェクトを作成したうえで、各種プロパティを使用することで詳細情報の取得が可能です。

[IN]
 Sub FSOプロパティ()
    filepath = ThisWorkbook.Path & "\" & ThisWorkbook.Name '使用しているファイルの絶対パスを取得
    
    Set fso = CreateObject("Scripting.FileSystemObject") 'オブジェクト作成
    Set File = fso.GetFile(filepath) 'オブジェクトの参照
    
    Debug.Print File.Attributes 'ファイル属性
    Debug.Print File.DateCreated 'ファイル作成日
    Debug.Print File.DateLastAccessed 'ファイルの最終アクセス日
    Debug.Print File.DateLastModified '最終更新日
    Debug.Print File.Drive 'ドライブのドライブ文字
    Debug.Print File.Name 'ファイル名
    Debug.Print File.ParentFolder '親フォルダ
    Debug.Print File.Path 'ファイルパス
    Debug.Print File.ShortName 'ファイルの短い名前(8.3形式)
    Debug.Print File.ShortPath 'ファイルの短いパス(8.3形式)
    Debug.Print File.Size 'ファイルサイズ [byte]
    Debug.Print File.Type 'ファイルの種類
    
 End Sub

[OUT]
32 
2022/07/30 15:13:39 
2022/07/30 15:15:04 
2022/07/30 15:15:04 
C:
note_FSO.xlsm
C:\Users\KIYO\Desktop\note\05_VBA・Excel\FSO
C:\Users\KIYO\Desktop\note\05_VBA・Excel\FSO\note_FSO.xlsm
NOTE_F~1.XLS
C:\Users\KIYO\Desktop\note\05_VBA~1\FSO\NOTE_F~1.XLS
 20811 
Microsoft Excel マクロ有効ワークシート

4.ファイル操作

4-1.FSOによる操作:コピー

追って修正 Call忘れがないこと ※開いているファイルの保存可

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Call fso.CopyFile("D:\Tips.txt", "D:\TipsCopy.txt", True) ' ファイル名を指定してコピー
Call fso.CopyFile("D:\Tips.txt", "D:\TipsFolder\", True)  ' 同じファイル名でコピー (D:\TipsFolder\Tips.txt)

' 後始末
Set fso = Nothing

参考資料・参考記事


あとがき

 構成も含めてどんどん追加・修正予定


この記事が気に入ったらサポートをしてみませんか?