ファイル操作

【VBA】ファイル情報(作成日・サイズ・属性等)を取得する方法

更新日:2024/01/18

ここでは、VBAでファイルの作成日やサイズ・属性等の情報を取得する方法をお伝えします。

 

方法は二つ

VBAで作成日やサイズや属性などのファイル情報を取得する方法は二つあります。

  1. VBAの関数を使う方法
    サイズ、最終更新日、属性の3種類の情報を取得できます。
    ただし、各情報に対応した関数を呼び出す必要があります。

  2. 外部ライブラリのWindows Script Runtimeに含まれているFileSystemObjectオブジェクトGetFileメソッドを使う方法
    こちらは一回のメソッド呼び出しで、ファイル情報を全て取得できます。
    必要な情報が複数ある時は、VBA関数よりもGetFileメソッドの方が効率的です。
    (ファイル情報の呼び出しは比較的重い処理なので、できれば一回で済ませた方がよいです)

 

ファイル情報を取得するVBA関数

ファイルの情報を取得するVBA関数は次の三つです。

関数名( 引数 )戻り値の型説明
FileLen( PathName )Variant型ファイルの長さを返す(バイト)
FileDateTime( PathName )Date型最終更新日時を返す
GetAttr( PathName )Integer型ファイルまたはフォルダーの属性を返す

引数のPathNameは、ファイルのパスを文字列で指定します。

FileLen関数とFileDateTime関数は次のように使用します。

Sub fileInfoSample()
    Const fileName As String = "C:\Users\xxxx\DocumentsBook1.xlsm"
    
    Dim fileSize As Long
    fileSize = FileLen(fileName)
    
    Dim fileDate As Date
    fileDate = FileDateTime(fileName)
    
    Debug.Print "ファイルサイズ: " & fileSize & "バイト"
    Debug.Print "最終更新日時: " & fileDate
End Sub

実行するとイミディエイトウィンドウに、次のように表示されます。

ファイルサイズ: 30038バイト
最終更新日時: 2023/12/04 15:48:41

GetAttr関数は戻り値を次の表の値(VbFileAttribute列挙型)でAnd演算します。

結果が0以外の値なら、その属性を持っていることになります。

■VbFileAttribute列挙型
定数属性
vbAlias64エイリアス(Macのみ)
vbArchive32アーカイブフラグ
vbDirectory16フォルダー
vbHidden2隠し属性
vbNormal0標準ファイル
vbReadOnly1読み取り専用
vbSystem4システムファイル
vbVolume8ボリュームラベル

GetAttr関数の使用例です。

Sub attrInfoSample()
    Const fileName As String = "C:\Users\xxxx\DocumentsBook1.xlsm"
    
    Dim attr As Integer
    attr = GetAttr(fileName)
    
    Dim result As String
    
    If (attr And (vbDirectory Or vbSystem Or vbVolume Or vbAlias)) = 0 Then
        result = "標準ファイル|"
    End If
    
    If attr And vbAlias Then result = result & "エイリアス|"
    If attr And vbArchive Then result = result & "アーカイブ|"
    If attr And vbDirectory Then result = result & "フォルダー|"
    If attr And vbHidden Then result = result & "隠し属性|"
    If attr And vbReadOnly Then result = result & "読み取り専用|"
    If attr And vbSystem Then result = result & "システム|"
    If attr And vbVolume Then result = result & "エイリアス|"
    
    Debug.Print "属性は|" & result & "です"
    
End Sub

標準ファイルを表す定数 vbNormalは値が0なので、And演算を行うと必ず 0 になります。
そのため、標準ファイルかどうかをvbNormalで確認できません。

そこでフォルダやシステムファイル等でないことを確認することで、標準ファイルかどうかを確認しています。

 

GetFileメソッド

GetFileメソッドは、一回のメソッド呼び出しでファイル情報を全て取得できます
GetFileメソッドを使用するときは、まずはFileSystemObjectオブジェクトを取得します。

GetFolderメソッドを使用するには、まずはFileSystemObjectオブジェクトを取得する必要があります。

FileSystemObjectオブジェクトの取得方法は二つあります。
一つは、文字列"Scripting.FileSystemObject"をCreateObject関数に渡す方法です。

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

もう一つはVBエディタのメニュー:ツールから参照設定画面を開いて『Microsoft Scriptiong Runtime』を参照設定してから次のコードを実行する方法です。

Dim fso As New Scripting.FileSystemObject

参照設定をおこなうと、コード入力時にメソッド名候補が表示されます。
入力ミスを防げるので便利です。

構文と戻り値

GetFileメソッドの構文は、次のようになっています。

FileSystemObjectオブジェクト.GetFile( FilePath )

FilePathは、情報を確認するファイルのパスです。
ファイル名のみなら、カレントフォルダーを指定したことになります。

戻り値は、Fileオブジェクトです。

使用例

GetFileメソッドの使用例です。

Sub getFileSample()
    Const fileName As String = "C:\Users\xxxx\Book1.xlsm"
    Dim fso As New Scripting.FileSystemObject
    Dim fileInfo As file
    
    Set fileInfo = fso.GetFile(fileName)
    
    With fileInfo
        Debug.Print "ファイル名: " & .name
        Debug.Print "作成日時: " & .DateCreated
        Debug.Print "最終更新日時: " & .DateLastModified
        Debug.Print "サイズ: " & .Size
    End With
End Sub

次のような情報が、イミディエイトウィンドウに表示されます。

ファイル名: Book1.xlsm
作成日時: 2023/11/06 16:42:56
最終更新日時: 2023/12/05 16:56:30
サイズ: 33892

 

Fileオブジェクト

FileオブジェクトはFileの作成日時や属性などの情報を持つオブジェクトです。
また名前変更や移動などを行うメソッドを持っています。

FileオブジェクトはGetFileメソッドで取得します。

プロパティ

Fileオブジェクトは、次のプロパティを持っています。

プロパティ名データ型内容
AttributesFileAttribute列挙型ファイルの属性35
(ReadOnly or Hidden
or Archive)
DateCreatedDate型作成された日時2019/03/14 21:37:59
DateLastAccessedDate型最終アクセス日時2023/12/01 17:53:19
DateLastModifiedDate型最終変更日時2023/07/14 17:45:35
DriveDriveオブジェクトドライブ情報---
NameString型ファイル名"Book1.xlsm"
ParentFolderFolderオブジェクト親フォルダー---
PathString型ファイルのパス"C:\Users\xxxx\Documents\Book1.xlsm"
ShortNameString型短い名前(8.3形式)"BOOK1~1.XLS"
ShortPathString型短いパス(8.3形式)"C:\Users\xxxx\DOCUME~1\BOOK1~1.XLS"
SizeVariant型ファイルのサイズ23456
TypeString型ファイルのタイプ"Microsoft Excel マクロ有効ワークシート"

Attributesプロパティは、次のFileAttribute列挙型をOr演算した値です。
前出のVbFileAttributeとは内容が異なりますが、使い方は同じです。

■FileAttribute列挙型
定数内容
Alias1024リンクまたはショートカット
Archive32アーカイブフラグ
Compressed2048圧縮ファイル
Directory16フォルダー
Hidden2隠しファイル
Normal0標準ファイル
ReadOnly1読み取り専用ファイル
System4システムファイル
Volume8ボリュームラベル

Typeプロパティは、関連付けられているアプリによって内容が変化します。
例えばhtmlファイルは、既定のアプリを変更すると次のように値が変化します。

Firefox: "Firefox HTML Document"
Chrome: "Chrome HTML Document"
Edge: "Microsoft Edge HTML Document"

メソッド

Fileオブジェクトのメソッドは、Fileオブジェクトが情報を保持しているファイルに対して処理をおこないます。
次のメソッドがあります。

メソッド名内容再利用
Copyファイルをコピーする
Deleteファイルを削除する×
Moveファイルを移動する×
OpenAsTextStreamファイルを開いて
TextStream オブジェクト
を返す

再利用は、メソッド実行後に他のメソッドを使用できるかどうかを表しています。
メソッド実行後にFileオブジェクトの情報は更新されません。
従って削除や移動を行うと、各メソッドが対象とするファイルが存在しないことになり、メソッドは失敗します。

更新日:2024/01/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。