🔧
CalculateFileSize
ユーティリティ現在のブックのファイルサイズを取得する
Excelファイルのサイズ情報をVBAで取得して表示するマクロです。FileSystemObjectまたはDir関数を使って現在開いているブックのファイルサイズをバイト・キロバイト・メガバイト単位で計算して表示します。ファイルが肥大化していないかの確認や、保存前後のサイズ比較などに活用できます。大容量ファイルの原因調査(画像・グラフ・キャッシュ等)の前処理としても有用です。内部ではFileSystemObjectのGetFileメソッドでSizeプロパティを取得し、1024で繰り返し除算することでKB・MB単位に変換しています。LogToSheetと組み合わせれば、日々のファイルサイズ推移を記録し、肥大化の傾向を早期に発見する運用体制を構築できます。エクスプローラーでプロパティを確認する手間なく、シート上で即座にサイズを把握できる点が便利です。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとファイルサイズをメッセージとシート出力で表示する
🎯 活用シーン
- ✓定期的にファイルサイズを記録してブログやレポートの肥大化を監視
- ✓圧縮・最適化処理の前後でサイズを比較して効果を検証
- ✓共有サーバーへのアップロード前にサイズ上限チェックを自動化
- ✓メール添付できる容量に収まっているか、送信前に自動チェックしたいとき
- ✓複数ブックの一覧からサイズの大きいファイルを洗い出し、優先的に軽量化対象を選定したいとき
💡 実装のヒント
- ▸FileSystemObject.GetFile(path).Size でバイト数を取得できます
- ▸1024で割ることでKB、さらに1024で割るとMBに変換できます
- ▸ThisWorkbook.FullName で現在のブックの完全パスを取得できます
- ▸共有ドライブ上のファイルはネットワーク経由でのサイズ取得に時間がかかることがあるため、ローカルコピーでの計測も検討してください。
- ▸サイズ急増の主な原因は画像の埋め込みや条件付き書式の蓄積であることが多く、原因調査にはRemoveConditionalFormattingなどの整理系マクロが役立ちます。
💻 VBAコード
' CalculateFileSize
' -----------------
' Macro Name: CalculateFileSize
' Description: 現在のブックのファイルサイズを取得する
' Parameters: なし
' Returns: なし
' Usage: 実行するとファイルサイズをメッセージとシート出力で表示する
' -----------------
Sub CalculateFileSize()
Dim wb As Workbook
Dim filePath As String
Dim fileSize As Long
Dim fileSizeKB As Double
Dim fileSizeMB As Double
Dim ws As Worksheet
Dim outputRow As Long
On Error GoTo ErrorHandler
Set wb = ActiveWorkbook
If wb.Path = "" Then
MsgBox "このブックは保存されていません。保存してから再実行してください。", vbExclamation
Exit Sub
End If
filePath = wb.FullName
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(filePath) Then
MsgBox "ファイルが見つかりません。", vbExclamation
Exit Sub
End If
fileSize = fso.GetFile(filePath).Size
fileSizeKB = fileSize / 1024
fileSizeMB = fileSize / 1024 / 1024
Set ws = ActiveSheet
outputRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 2
ws.Cells(outputRow, 1).Value = "ファイルサイズ"
ws.Cells(outputRow, 1).Font.Bold = True
outputRow = outputRow + 1
ws.Cells(outputRow, 1).Value = "ファイル名:"
ws.Cells(outputRow, 2).Value = wb.Name
outputRow = outputRow + 1
ws.Cells(outputRow, 1).Value = "パス:"
ws.Cells(outputRow, 2).Value = filePath
outputRow = outputRow + 1
ws.Cells(outputRow, 1).Value = "サイズ (バイト):"
ws.Cells(outputRow, 2).Value = fileSize
outputRow = outputRow + 1
ws.Cells(outputRow, 1).Value = "サイズ (KB):"
ws.Cells(outputRow, 2).Value = Round(fileSizeKB, 2)
outputRow = outputRow + 1
ws.Cells(outputRow, 1).Value = "サイズ (MB):"
ws.Cells(outputRow, 2).Value = Round(fileSizeMB, 2)
ws.Cells(outputRow, 2).Font.Bold = True
MsgBox "ファイルサイズ: " & Round(fileSizeMB, 2) & " MB (" & fileSize & " バイト)", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub