【VBA】ファイル情報(作成日・サイズ・属性等)を取得する方法
更新日:2024/01/18
ここでは、VBAでファイルの作成日やサイズ・属性等の情報を取得する方法をお伝えします。
方法は二つ
VBAで作成日やサイズや属性などのファイル情報を取得する方法は二つあります。
- VBAの関数を使う方法。
サイズ、最終更新日、属性の3種類の情報を取得できます。
ただし、各情報に対応した関数を呼び出す必要があります。 - 外部ライブラリの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以外の値なら、その属性を持っていることになります。
定数 | 値 | 属性 |
---|---|---|
vbAlias | 64 | エイリアス(Macのみ) |
vbArchive | 32 | アーカイブフラグ |
vbDirectory | 16 | フォルダー |
vbHidden | 2 | 隠し属性 |
vbNormal | 0 | 標準ファイル |
vbReadOnly | 1 | 読み取り専用 |
vbSystem | 4 | システムファイル |
vbVolume | 8 | ボリュームラベル |
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オブジェクトを取得します。
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オブジェクトは、次のプロパティを持っています。
プロパティ名 | データ型 | 内容 | 例 |
---|---|---|---|
Attributes | FileAttribute列挙型 | ファイルの属性 | 35 (ReadOnly or Hidden or Archive) |
DateCreated | Date型 | 作成された日時 | 2019/03/14 21:37:59 |
DateLastAccessed | Date型 | 最終アクセス日時 | 2023/12/01 17:53:19 |
DateLastModified | Date型 | 最終変更日時 | 2023/07/14 17:45:35 |
Drive | Driveオブジェクト | ドライブ情報 | --- |
Name | String型 | ファイル名 | "Book1.xlsm" |
ParentFolder | Folderオブジェクト | 親フォルダー | --- |
Path | String型 | ファイルのパス | "C:\Users\xxxx\Documents\Book1.xlsm" |
ShortName | String型 | 短い名前(8.3形式) | "BOOK1~1.XLS" |
ShortPath | String型 | 短いパス(8.3形式) | "C:\Users\xxxx\DOCUME~1\BOOK1~1.XLS" |
Size | Variant型 | ファイルのサイズ | 23456 |
Type | String型 | ファイルのタイプ | "Microsoft Excel マクロ有効ワークシート" |
Attributesプロパティは、次のFileAttribute列挙型をOr演算した値です。
前出のVbFileAttributeとは内容が異なりますが、使い方は同じです。
定数 | 値 | 内容 |
---|---|---|
Alias | 1024 | リンクまたはショートカット |
Archive | 32 | アーカイブフラグ |
Compressed | 2048 | 圧縮ファイル |
Directory | 16 | フォルダー |
Hidden | 2 | 隠しファイル |
Normal | 0 | 標準ファイル |
ReadOnly | 1 | 読み取り専用ファイル |
System | 4 | システムファイル |
Volume | 8 | ボリュームラベル |
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
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。