こんにちは、Ryoです。
VBAで処理した集計結果などを指定ファイルに出力する形が多いですが、例えばある程度の容量になったらファイルを新規に入れ替える等の処理を行うにはFileLen関数を利用してファイルサイズを取得するのも一つの手段かと思います。今回はその内容と取得したサイズのKB/MB/GB換算について書いていきます。
1.サンプル概要
デスクトップ上に「サンプルフォルダ」を作成し、その中にサンプルコード実行ファイル(Sample1.xlsm)と今回ファイルサイズを取得するサンプル(FileSize_Sample.xlsx)を準備しています。
ファイルサイズ取得用のサンプルファイルは画像データ等を大量に貼り付けて約100MBサイズとしてあります。

サンプルコードで指定したファイルサイズを取得し、メッセージボックスでKB/MB/GB単位で表示します。

以上がサンプル概要になります。
2.サンプルコード
Sub Sample1()
Dim temp As String
Dim i As Integer
Dim num As Variant
Dim sizeK, sizeM, sizeG As Double
'ファイルサイズをチェックするPath情報を変数に代入
temp = ThisWorkbook.Path & "\FileSize_Sample.xlsx"
'指定したファイルサイズ(バイト数)を取得
num = FileLen(temp)
'取得したファイルサイズ(バイト数)に対し、
'KB単位/MB単位/GB単位で表示する為の換算処理を行う
For i = 1 To 3
num = Round(num / 1024, 2)
Select Case i
Case 1 'バイト⇒キロバイト
sizeK = num
Case 2 'キロバイト⇒メガバイト
sizeM = num
Case 3 'メガバイト⇒ギガバイト
sizeG = num
End Select
Next i
'メッセージボックスで結果を表示
MsgBox "【指定ファイルのサイズ】" & vbLf & _
" キロバイト換算: " & sizeK & "KB" & vbLf & _
" メガバイト換算: " & sizeM & "MB" & vbLf & _
" ギガバイト換算: " & sizeG & "GB"
End Sub
このサンプルコードを実行すると、実行元ファイルと同保存場所にある指定ファイルのファイルサイズを取得してメッセージボックスで表示します。
このようにファイルサイズを取得するにはFileLen関数を利用します。
構文:FileLen(filename)
ここで取得するファイルサイズ=バイト数になります。引数のfilenameにはファイルをフルパスで指定します。
ある程度容量の大きいファイルになるとバイト数表示では判り難くなりますので、1024で除算を繰り返しながらKB単位/MB単位/GB単位に変換しています。(参考までに1KB=1024バイト 1MB=1024KB 1GB=1024MB 1TB=1024GB です)
3.まとめ
VBAで自動集計処理を行っていると気が付けばファイルサイズが肥大化してしまうようなこともあるので、そのようなケースでファイルサイズを監視しながら一定容量を超えたら新規ブックに切り替えるという処理に使うこともできます。
扱い方は特に難しいこともありませんので、何か利用機会があれば活用を検討されてみるのも良いかと思います。
以上、ファイルサイズ(容量)を取得する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

