【Excel VBA】Excel マクロ ~ 目次を自動作成する ~

 ■ はじめに

 * Excelでドキュメントを作成した際に、シートが増えると、
   目次を作成して、その目次にリンクを張っておけば便利だが
   その目次を自動生成できるようにする

 ■ サンプル

Sub CreatContents_Click()
On Error GoTo ErrorHandler
    Const ContentsSheetName As String = "目次"
    Dim contentsSheet As Worksheet
    Set contentsSheet = Worksheets(ContentsSheetName)
    
    Dim number As Integer
    number = 1

    ' 出力する行数(初めは表の項目を書きたいので初期値は2)
    Dim line As Integer
    line = 2
    
    Dim targetWorksheet As Worksheet
    For Each targetWorksheet In Worksheets
        If ContentsSheetName = targetWorksheet.Name Then
            ' シート名「目次」は対象外
            GoTo Continue
        End If
        
        ' 項番
        contentsSheet.Cells(line, 1).Value = number
        number = number + 1
        
        ' シート名
        targetWorksheet.Hyperlinks.Add Anchor:=contentsSheet.Cells(line, 2), _
                                  Address:="", _
                                  SubAddress:="'" & targetWorksheet.Name & "'!A1", _
                                  TextToDisplay:=targetWorksheet.Name
        
        line = line + 1
Continue:
    Next
    
    MsgBox "Done"
    GoTo Finished
ErrorHandler:
    '-- 例外処理
    MsgBox Err.number & " : " & Err.Description, vbCritical & vbOKOnly, "Error"
Finished:
End Sub

 出力結果

* シートが「目次」「Sheet1」「Sheet2」の場合 
項番  シート名  << ここは初めに書いておく
1   Sheet1  << ここがリンク
2   Sheet2  << ここがリンク

■ 補足

 補足1 : 括弧が入ったシート名の対処

 * シート名に括弧が入ると、リンクが動かなくなるので、
  回避策として、SubAddressの値をシングルクォート(')を囲っている

 補足2 : 使用した技術事項

 * 使用した以下の技術事項

  [1] シートでループする
  [2] Continue文を実装
  [3] Try-Catch\

 関連記事

Excel マクロ ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2015/07/15/104500