重いシートを見つけたいけど、シートが多くて調べきれない…
それぞれのシートがどのくらいの容量なのか確認したい!
エクセルが重くなってきたとき、列数が多いシートを改善すると、軽くなることがあります。ただ、エクセルのシートが増えてくると、重いシートを特定するのが難しくなります。
そんな時、シートごとの使用セルを調べる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となっています。この記事では、コード解説も行っていますので、そちらも参考にしてみてください。
コメント