FileLen関数

FileLen関数は指定したファイルのサイズをバイト単位で返します。

指定したファイルが存在しない場合はエラーになります。(実行時エラー ’53’: ファイルが見つかりません。)

Long型の精度のため約2GBを超えるファイルの場合は取得できません。その場合の対応方法は後述しています。


構文

Function FileLen(PathName As String) As Long

PathName ファイルサイズを取得するファイルパスを指定します。ファイル名だけを指定することも可能です。
戻り値 Long型でファイルサイズを返します。詳細は後述していますが、約2GBを超えるファイルの場合は正しくファイルサイズを取得できません。

単純なコードであればこのような感じになります。



エラー発生時の対応方法

指定したファイルが存在しない場合は「実行時エラー ’53’: ファイルが見つかりません。」が発生し、そこで処理が止まります。

FileLen関数を使う場合は、ファイルパスは変数で渡すことが多く、可変であるため、そのファイルが存在しているかどうかが不明なままFileLen関数を実行することが多くなります。

そうなると当然、ファイルが存在しないことも発生しやすくなり、結果としてエラーになり処理が止まってしまう、ということに陥ります。

そこで、事前にそのファイルが存在するのかをチェックを行い、存在するファイルパスのみをFileLen関数を行うようにしてエラーを回避します。

以下のサンプルでは、ファイル存在チェックを含めたコードを紹介します。


サンプルコード

指定ファイルパスのファイルサイズを出力するサンプルコードです。

上記の通り、ファイルが存在しない場合はエラーで処理が止まるため、ファイルの存在チェックを行い、存在する場合のみFileLen関数でファイルサイズを取得するようにしています。

ファイル存在チェックの「IsExistFileDir」関数は「VBAでファイルの存在をチェックする」のサンプルコードを利用しています。



約2GBを超えるファイルは正しく動作しない

FileLen関数はファイルサイズをLong型で返すため、Long型の範囲の-2,147,483,648から2,147,483,648(約2GB)を超えるファイルサイズの場合は正しく動作しません

試しに「2.17 GB (2,340,790,272 バイト)」のファイルを使ってFileLen関数を実行すると「1,954,177,024バイト」という不正な値が返されました。

このようなLong型の精度を超えるようなファイルサイズを取得する場合は、FileLen関数ではなく、FileSystemObjectクラスのGetFileメソッドを使ってFileオブジェクトを取得し、そのSizeプロパティを使うことで取得できます。SizeプロパティはVariant型のためLong型を超える精度でも取得可能です。