即効テクニック |
VBAには、ファイルのサイズを調べるFileLen関数があります。 次のマクロは、C:\Work\Sample.xlsのファイルサイズを表示します。Sub Sample1() Dim buf As Long buf = FileLen("C:\Work\Sample.xls") MsgBox buf End Sub3桁ごとにカンマで区切って表示させたいのでしたらFormat関数と併用します。Sub Sample2() Dim buf As Long buf = FileLen("C:\Work\Sample.xls") MsgBox Format(buf, "#,###") & "byte" End Subちなみに、ファイルを保存した日時はFileDateTime関数でわかります。Sub Sample3() Dim buf As Date buf = FileDateTime("C:\Work\Sample.xls") MsgBox buf End SubFileDateTime関数は、日時を表す日付型の値を返しますので、返り値はシリアル値として使えます。Sub Sample4() Dim buf As Date buf = FileDateTime("C:\Work\Sample.xls") MsgBox Year(buf) & "年" & vbCrLf & Hour(buf) & "時" End Subさて、ファイルのサイズを取得するFileLen関数ですが、ヘルプによると「長整数型(Long)の値を返します」と書かれています。 長整数型に格納できる値は、-2,147,483,648から2,147,483,648までの整数です。 2,147,483,648といえば、約2.15GBです。 これほど大きなExcelブックを作成することは希でしょうけど、動画ファイルなどでは、数GBのファイルも珍しくありません。 もし、約2.15GBを超えるような巨大ファイルのサイズをFileLen関数で取得しようとすると、FileLen関数は正しい結果を返してくれません。 ファイルサイズの数値によりますが、極端に小さい数値を返したり、ときにはマイナスの数値を返すこともあります。 FileLen関数の返値が長整数型(Long)なのですから、しかたありませんね。 こんなときは、FileSystemObjectを使いましょう。Sub Sample5() Dim FSO As Object, buf As Single Set FSO = CreateObject("Scripting.FileSystemObject") buf = FSO.GetFile("C:\Work\Sample.avi").Size MsgBox Format(buf, "#,###") & "byte" Set FSO = Nothing End Sub