【Excel VBA】ファイル・フォルダのサイズを取得する(FileLen/Size)

はじめに

今回は、ファイルやフォルダのサイズ(容量)を取得する方法をご紹介します。
ファイルサイズを取得した後、KB(キロバイト)やMB(メガバイト)等への換算方法も併せてご紹介します。

この記事を読むメリット
  • 基本構文から引数など、基礎知識から丁寧に解説します。
  • ファイルサイズ取得後、KB(キロバイト)やMB(メガバイト)などの単位変換についても解説します。
  • コピペで使える実践的なコードを解説します。

前提

ファイルサイズを取得する関数 及び メソッド

#関数/プロパティ説明
1FileLenファイルサイズを取得する
2SizeFileSystemObjectのFile/Folderオブジェクトのプロパティ
ファイルやフォルダのサイズを取得する
ファイル/フォルダサイズ取得 – 関連関数/プロパティ

取得されるファイルサイズの単位はバイトです

KB(キロバイト)やMB(メガバイト)の換算について

前項にて、取得ファイルサイズの単位はバイトであることをご説明しました。
バイトは、ファイルサイズを測るうえでの最小単位であるため、正確なファイルサイズを調べる上ではメリットもあります。

他方で、KB(キロバイト)やMB(メガバイト)に変換したい場合もあるかと思います。
以下にKB(キロバイト)やMB(メガバイト)の変換の数式を示します。
※「^」はべき乗です。(例:1024 ^ 2 … 1024の2乗)

#単位数式
1KB(キロバイト)ファイルサイズ(バイト単位) ÷ 1024
2MB(メガバイト)ファイルサイズ(バイト単位) ÷ (1024 ^ 2)
3GB(ギガバイト)ファイルサイズ(バイト単位) ÷ (1024 ^ 3)
4TB(テラバイト)ファイルサイズ(バイト単位) ÷ (1024 ^ 4)
KB/MBなどの変換数式

1024は2の10乗です。
一見半端な数字ですが、コンピュータが2進数で動いていることに起因しています。

基本情報

FileLen関数

ファイルサイズを取得するには、FileLen関数を使用します。
FileLen関数は、特定の単体ファイルのファイルサイズを場合に最適です。

※フォルダのサイズを取得するには、後述する「Sizeプロパティ」を参照ください。

構文

構文

FileLen(PathName)

緑色は引数です。

FileLen関数の戻り値はLong型となります。
変数に代入する際は、Long型の変数に代入してください。

引数

#引数必須/任意説明
1PathName必須ファイルパスを指定します。
ファイル名のみでも指定可能です。
※ファイル名を指定した場合は、カレントディレクトリのファイルが対象となります。
引数 – FileLen関数

既に開かれているファイルを指定した場合は、ファイルが開かれる前のファイルサイズが返却されます。

Sizeプロパティ

FileSystemObjectを使用したファイルサイズ 及び フォルダサイズの取得は、File及びFolderオブジェクトのSizeプロパティを使用します。
Sizeプロパティは複数のファイル・フォルダを扱う場合に最適です。

構文

FileObject.Size
FolderObject.Size

Fileオブジェクト、Folderオブジェクトの取得方法については以下の記事にて解説しています。

サンプルコード

ファイルサイズを出力する(FileLen関数)

サンプルコード
Public Sub getFileSize()
    Dim filePath As String
    Dim fileSize As Long

    ' ファイルパスをセット
    filePath = "C:\vba-hack\vba\TestFile.txt"

    ' ファイルサイズを取得
    fileSize = FileLen(filePath)

    ' セルに情報を書き出し
    Range("A1").Value = filePath    ' ファイルパス
    Range("B1").Value = fileSize    ' ファイルサイズ
End Sub

フォルダ配下のファイルサイズを一覧で出力する(Sizeプロパティ)

サンプルコード
Public Sub getFileSizeForTargetFolder()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim myFolder As Folder          ' Folderオブジェクト
    Dim myFile As File              ' Fileオブジェクト
    Dim loopCnt As Long             ' ループカウンタ

    ' フォルダオブジェクトを取得
    Set myFolder = fso.GetFolder("C:\vba-hack\vba")

    ' フォルダ配下のファイル数分ループ
    loopCnt = 1
    For Each myFile In myFolder.Files

        Cells(loopCnt, 1).Value = myFile.Name   ' ファイル名
        Cells(loopCnt, 2).Value = myFile.Size   ' ファイルサイズ
        loopCnt = loopCnt + 1
    Next myFile
End Sub

フォルダ配下のファイルサイズをMB単位で一覧で出力する(Sizeプロパティ)

サンプルコード
Public Sub getMBFileSizeForTargetFolder()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim myFolder As Folder          ' Folderオブジェクト
    Dim myFile As File              ' Fileオブジェクト
    Dim loopCnt As Long             ' ループカウンタ

    ' フォルダオブジェクトを取得
    Set myFolder = fso.GetFolder("C:\vba-hack\vba")

    ' フォルダ配下のファイル数分ループ
    loopCnt = 1
    For Each myFile In myFolder.Files

        Cells(loopCnt, 1).Value = myFile.Name               ' ファイル名
        Cells(loopCnt, 2).Value = myFile.Size / (1024 ^ 2)  ' ファイルサイズ
        loopCnt = loopCnt + 1
    Next myFile
End Sub
めい

ファイルサイズは必要に応じて丸め処理を実施しましょう。

フォルダ配下のフォルダサイズを一覧で出力する(Sizeプロパティ)

サンプルコード
Public Sub getFolderSizeForSubFolder()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim targetFolder As Folder      ' 対象フォルダ
    Dim subFolder As Folder         ' サブフォルダ
    Dim loopCnt As Long             ' ループカウンタ

    ' フォルダオブジェクトを取得
    Set targetFolder = fso.GetFolder("C:\vba-hack")

    ' フォルダ配下のフォルダ数分ループ
    loopCnt = 1
    For Each subFolder In targetFolder.SubFolders

        Cells(loopCnt, 1).Value = subFolder.Name    ' フォルダ名
        Cells(loopCnt, 2).Value = subFolder.Size    ' フォルダサイズ
        loopCnt = loopCnt + 1
    Next subFolder
End Sub

最後に

今回は、ファイルサイズを取得する方法を解説しました。
本記事が、皆さんのお力になれば幸いです!

オススメの書籍
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA