📊 Excel VBA Top100
🔧

CalculateFileSize

ユーティリティ

現在のブックのファイルサイズを取得する

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

CalculateFileSize デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(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