どーも!marusukeです!
エクセルブック内の大量のシートの目次を自動作成する方法VBAコードを紹介します!
このVBAでできること(結論)
- ブック内の全シート名を一覧化して「目次」シートに自動出力します
- 各シート名にクリックで飛べるリンクを付け、探す手間を置き換えます
- 目次シートが無ければ自動作成、あれば内容を作り直します
- シート数が多いブックほど「探す」「戻る」の繰り返しを減らせます
このVBAの処理の流れ
- 「目次」シートがあるか確認(無ければ作成)
- 目次シートの内容を一旦クリアして、見出しを作成
- ブック内の全シートを順番に走査(目次シート自身は除外)
- シート名を目次に書き出し、各行にジャンプ用リンクを付ける
コピペで使えるVBAコード
Sub MakeSheetIndex()
Dim wsIndex As Worksheet
Dim ws As Worksheet
Dim r As Long
Dim indexName As String
indexName = "目次"
Application.ScreenUpdating = False
' 目次シートの取得(なければ作成)
On Error Resume Next
Set wsIndex = ThisWorkbook.Worksheets(indexName)
On Error GoTo 0
If wsIndex Is Nothing Then
Set wsIndex = ThisWorkbook.Worksheets.Add(Before:=ThisWorkbook.Worksheets(1))
wsIndex.Name = indexName
End If
' 目次の初期化
wsIndex.Cells.Clear
wsIndex.Range("A1").Value = "シート目次(クリックで移動)"
wsIndex.Range("A1").Font.Bold = True
wsIndex.Range("A1").Font.Size = 14
wsIndex.Range("A2").Value = "No."
wsIndex.Range("B2").Value = "シート名"
wsIndex.Range("A2:B2").Font.Bold = True
r = 3
' 全シートを一覧化(目次シートは除外)
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> wsIndex.Name Then
wsIndex.Cells(r, 1).Value = r - 2
wsIndex.Cells(r, 2).Value = ws.Name
' シートへ移動するハイパーリンクを作成
' ※ '#' はブック内リンクの意味
wsIndex.Hyperlinks.Add _
Anchor:=wsIndex.Cells(r, 2), _
Address:="", _
SubAddress:="'" & ws.Name & "'!A1", _
TextToDisplay:=ws.Name
r = r + 1
End If
Next ws
' 見た目を整える
wsIndex.Columns("A").ColumnWidth = 5
wsIndex.Columns("B").ColumnWidth = 35
wsIndex.Range("A2:B" & r - 1).Borders.LineStyle = xlContinuous
wsIndex.Activate
wsIndex.Range("A1").Select
Application.ScreenUpdating = True
MsgBox "目次を作成しました。", vbInformation
End Sub
カスタマイズする場合のポイント
「目次」シート名はここだけ直せばOKです。
indexName = "目次"
たとえば「INDEX」にしたいなら "INDEX" に変更します。
また、リンク先をA1ではなく表の先頭セルにしたい場合は、下記の !A1 を !B2 のように変えるだけで対応できます。
SubAddress:="'" & ws.Name & "'!A1"
よくあるエラー・注意点
- シート名に
]など特殊文字があると、リンクがうまく動かないことがあります → まずは一般的な命名(記号少なめ)に寄せるのが安全です - 目次シートを手で保護していると
Cells.Clearで止まります → 保護解除してから実行してください - 既に「目次」シートがある場合は“作り直し”になります → 目次シートに別の情報を書いている運用なら、別名にするのがおすすめです
まとめ
シートが増えるほど、「探す」作業が地味に時間を取ります。目次をVBAで作っておけば、日々の移動作業をそのまま置き換えられます。まずはこのコードを貼って、目次が自動でできる感覚を掴んでみてください
以上です!
ここまで読んでいただきありがとうございました!



コメント