即効テクニック

ファイル操作関連のテクニック

ファイルのサイズを調べる

(Excel 97/2000/2002/2003/2007)
VBAには、ファイルのサイズを調べるFileLen関数があります。
次のマクロは、C:\Work\Sample.xlsのファイルサイズを表示します。

Sub Sample1()
  Dim buf As Long
  buf = FileLen("C:\Work\Sample.xls")
  MsgBox buf
End Sub   
3桁ごとにカンマで区切って表示させたいのでしたら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 Sub   
FileDateTime関数は、日時を表す日付型の値を返しますので、返り値はシリアル値として使えます。
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