■ はじめに
* 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