【エクセルが重い?】シート容量を自動取得!データ確認と高速化の方法を徹底解説!

VBAの組み方・VBA初心者向け

重いシートを見つけたいけど、シートが多くて調べきれない…
それぞれのシートがどのくらいの容量なのか確認したい!

エクセルが重くなってきたとき、列数が多いシートを改善すると、軽くなることがあります。ただ、エクセルのシートが増えてくると、重いシートを特定するのが難しくなります。

そんな時、シートごとの使用セルを調べるVBAを使えば、シート容量を確認できます。これを使えば、手作業でチェックする必要がなくなり、VBAの実装もそれほど難しくありません。

さらに今回の記事では、容量の大きいシートへの対処法や、見つからなかったときの対処方法も紹介します。ぜひそちらも参考にして、効率化を行ってみてください!

このブログでは、効率化に関する様々な情報を発信しています。仕事の効率化だけでなく、Youtubeの文字起こし改善のような題材も取り扱っていますので、ぜひほかの記事も見ていただけると嬉しいです!

【コピペで使える!】シート毎の容量(使用セル数)確認VBA

はじめにコピペで使えるコードを紹介します。

以下のコードをそのまま使えば、シートごとの最終行・最終列・総サイズ(行×列)を自動的に取得できます。


Sub ExportSheetSizes()
    Dim ws As Worksheet
    Dim resultSheet As Worksheet
    Dim lastRow As Long
    Dim lastCol As Long
    Dim totalSize As Long
    Dim i As Long
    Dim usedRange As Range
    
    ' 出力用のシートを作成
    Set resultSheet = ThisWorkbook.Sheets.Add
    resultSheet.Name = "シートサイズ一覧"
    
    ' ヘッダーを設定
    resultSheet.Cells(1, 1).Value = "シート名"
    resultSheet.Cells(1, 2).Value = "最終行"
    resultSheet.Cells(1, 3).Value = "最終列"
    resultSheet.Cells(1, 4).Value = "総サイズ(行×列)"
    
    i = 2 ' データ出力用の行を設定
    
    ' 各シートのサイズを取得
    For Each ws In ThisWorkbook.Sheets
        ' 出力用シート自身を除外
        If ws.Name <> resultSheet.Name Then
            ' シート全体のUsedRangeを取得
            On Error Resume Next ' 空のシートがある場合のエラー対策
            Set usedRange = ws.UsedRange
            On Error GoTo 0
            
            If Not usedRange Is Nothing Then
                ' 最終行と最終列を計算
                lastRow = usedRange.Row + usedRange.Rows.Count - 1
                lastCol = usedRange.Column + usedRange.Columns.Count - 1
            Else
                ' データが全くない場合
                lastRow = 0
                lastCol = 0
            End If
            
            ' 総サイズを計算
            totalSize = lastRow * lastCol
            
            ' 結果を出力
            resultSheet.Cells(i, 1).Value = ws.Name
            resultSheet.Cells(i, 2).Value = lastRow
            resultSheet.Cells(i, 3).Value = lastCol
            resultSheet.Cells(i, 4).Value = totalSize
            i = i + 1
        End If
    Next ws
    
    MsgBox "シートサイズ一覧を出力しました。", vbInformation
End Sub

VBAの動作解説:何ができるのか?

このVBAを実行すると、新しいシートが作成され、各シートの行数・列数が一覧で出力されます。これにより、どのシートでセルが使われているかをリストとしてみることができるようになります。

シート名にはリンクが張られる為、それぞれのシートへの移動も楽になります。

※出力例

次に、多くのセルを使うシートを見つけた後、シートを軽くする方法について簡単に解説していきます。

容量が大きいシートを軽くする方法

不要なデータや空白セルの削除

不要なセルや空白セルが多く含まれている場合、それが動作を遅くする原因になっていることがあります。使っているセルが多いシートを見つけたら、そのシートに移動して最後のセルがどこにあるか確認しましょう。

確認方法は、[Ctrl] + [G] → [セル選択] → [最後のセル]と選択

不要セルや空白のセルに飛んでいく場合削除するだけで、エクセルの動作が軽くなることがあります。

関数を値として貼り付ける

シート内に大量の関数が含まれている場合、エクセルの動作が重くなることがあります。その場合、必要な部分だけ値に変換することで、高速化が期待できます。

関数を値に変換するには、該当の箇所をコピーして、値の貼り付けを行います。

容量が大きいシートが見つからない場合のチェックポイント

関数・セルの書式設定が過剰になっていないか?

セルの書式設定条件付き書式が適用されていると、動作が遅くなる原因になります。不要な書式を削除することで改善できる場合があります。

画像が多くないか?見えない画像が隠れていないか?

画像が多いとファイルサイズが大きくなり、動作が遅くなる原因となります。ファイルサイズの軽減は、画像の圧縮で改善できます。

圧縮したい画像を選択して、[図の形式] → [図の圧縮]
[この画像だけに適用する]のチェックを外せば、全画像が圧縮される

また、見えないオブジェクト(不要な画像や図形)が原因で、動作が遅くなることもあります。

確認方法は、 [Ctrl] + [G] → [セル選択] → [オブジェクト]を選択。すべてのオブジェクトが選択されるので、要らない画像等があれば削除すれば、サイズ軽減することができます。

隠れている画像があれば、何もないところが選択される

VBAを活用してエクセルを軽くしよう!

データ容量の一覧出力により、改善すべきシートが明確になります。エクセルを作り変える必要がなくなるので、ぜひ一度は試していただきたいVBAです。

また今回使用しているVBAは、以前紹介した目次作成に近いVBAとなっています。この記事では、コード解説も行っていますので、そちらも参考にしてみてください。

コメント

タイトルとURLをコピーしました