シート名を取得しリンク付きの目次シートを作成する方法! VBAで自動生成 | EXCELトピックス

スポンサーリンク
スポンサーリンク

シート名の一覧を取得し、リンク付きの目次を作成する方法

Excel VBAを使用すると、ワークブック内のすべてのシート名を取得し、自動で目次を作成することができます。目次には各シートへのリンクが設定されており、クリックすることで瞬時に移動できるようになります。

以下では、VBAを使用してシート名を取得し、リンク付きの目次を作成する方法を具体的に解説します。

VBAの作成と実行

  1. VBAは、[開発]→[VisualBasic]→[挿入]→[標準モジュール]→コードを貼り付け の順で作成します。
  2. 実行する際は、[開発]→[マクロ]→作成したマクロを選択して実行します。

リンク付きの目次を作成するVBAコード

このVBAコードを実行すると、新しく「目次」シートが作成され、ワークブック内の全シート名が一覧表示されます。それぞれのシート名には、クリックするとそのシートへジャンプするハイパーリンクが設定されます。

Sub CreateSheetIndex()
    Dim ws As Worksheet
    Dim indexSheet As Worksheet
    Dim i As Integer

    ' 既存の「目次」シートを削除
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("目次").Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    ' 新しい「目次」シートを作成
    Set indexSheet = ThisWorkbook.Sheets.Add
    indexSheet.Name = "目次"
    
    ' 見出しを設定
    indexSheet.Cells(1, 1).Value = "シート一覧"
    indexSheet.Cells(1, 1).Font.Bold = True
    
    ' シート名の一覧を取得して目次を作成
    i = 2
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> "目次" Then
            ' シート名に特殊文字が含まれる場合に対応
            indexSheet.Hyperlinks.Add _
                Anchor:=indexSheet.Cells(i, 1), _
                Address:="", _
                SubAddress:="'" & Replace(ws.Name, "'", "''") & "'!A1", _
                TextToDisplay:=ws.Name
            i = i + 1
        End If
    Next ws

    ' 列の幅を自動調整
    indexSheet.Columns("A").AutoFit

    MsgBox "目次シートが作成されました!", vbInformation, "完了"
End Sub

コードの解説

  • On Error Resume Next を使用し、既存の「目次」シートがある場合は削除する。
  • Sheets.Add を使用して、新しく「目次」シートを作成する。
  • For Each ws In ThisWorkbook.Sheets を使用し、現在のワークブックのシートのみを対象に処理する。
  • ハイパーリンクの SubAddressReplace(ws.Name, "'", "''") を適用し、シート名にシングルクォートが含まれる場合でも正しく動作するようにする。
  • Columns("A").AutoFit で、列幅を自動調整し、見やすくする。

実行結果

このマクロを実行すると、「目次」シートが作成され、以下のように各シート名とハイパーリンクが一覧表示されます。

シート一覧
Sheet1
Sheet2
Sheet3

目次を自動更新する方法

シートの追加・削除に対応するため、WorkbookのOpenイベントを利用して、Excelファイルを開くたびに目次を更新することも可能です。

Private Sub Workbook_Open()
    CreateSheetIndex
End Sub

まとめ

  • VBAを使用すると、Excelのすべてのシート名を取得し、自動で目次を作成できる。
  • 各シート名にはハイパーリンクが設定され、ワンクリックでシートに移動可能。
  • 他のウィンドウで開いているブックのシートは目次に含めない。
  • シート名に特殊文字(シングルクォート)が含まれていても正しくリンクを設定できる。
  • Workbook_Openイベントを利用すると、ファイルを開くたびに目次を自動更新できる。