Excel VBA マクロとハイパーリンクの組み合わせで目次生成の自動化を行います。
2つのボタン「目次作成」、「シート追加」で制御します。
このツールを作成した目的はマニュアル作成を効率的に進めたい!という思いが原動力になっています。
処理の流れ
今回はどのボタンを選択したかによって動き方が異なります。
一つのSubプロシージャでボタン判定の処理を行っています。
目次作成
「目次作成」のボタンを選択した場合
- 共通ルートの処理に進み
- 読み込んだシート名を目次に設定
- シート名に遷移するようにハイパーリンクを設定
- 読み込んだシートのA1セルが空の場合に目次に戻るためのハイパーリンクを設定
シート追加
「シート追加」のボタンを選択した場合
- シート追加を選択した場合、指定した名前のシートを末尾に追加
- 追加シートのA1セルに目次に戻るためのハイパーリンクを追加
- 目次作成と同様の処理
コピペで使えるコード
ソースをコピペ後に2つのボタンを設置します。
※どちらにも「目次作成」のマクロを設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
Sub 目次作成() Dim Ws1 As Worksheet Set Ws1 = Worksheets("目次") '処理前に列情報をクリア Columns(2).Clear Ws1.Cells(2, "B") = "目次" '選択したボタン名を取得 Dim Button_Name As String: Button_Name = ActiveSheet.Buttons(Application.Caller).Text 'シート追加を選択した場合 If Button_Name = "シート追加" Then Dim Sh_Add As String: Sh_Add = InputBox("シート名を指定して下さい。", "シート名確認", "") '追加シート名が未入力の場合は処理を止める If Sh_Add = "" Then MsgBox "シート名を設定してください。", vbYesNo + vbExclamation, "エラー" Exit Sub End If '右端にシートを追加 Worksheets().Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = Sh_Add '目次へ戻るを設定 Ws1.Hyperlinks.Add Anchor:=Range("A1"), Address:="", SubAddress:="目次!A1", ScreenTip:="ヒントを表示", TextToDisplay:="目次へ戻る" End If '共通ルート Dim Sh_Sta As Long: Sh_Sta = 2 'シート読込開始位置 Dim Sh_Name As String '読込シート名 Dim Sh_Cnt As Long: Sh_Cnt = Worksheets.Count 'シート数取得 '全シートを読み込むまで繰り返し Do While Sh_Sta <> Sh_Cnt + 1 '目次シートに読み込んだシート名を設定 Sh_Name = Worksheets(Sh_Sta).Name Ws1.Cells(Sh_Sta + 1, "B") = Sh_Name '読み込んだシートのA1セルに飛ぶようにハイパーリンクを設定 Ws1.Hyperlinks.Add Anchor:=Ws1.Cells(Sh_Sta + 1, "B"), Address:="", SubAddress:=Sh_Name & "!A1" 'シートのA1セルが空の場合、「目次に戻る」を追加 If Worksheets(Sh_Name).Cells(1, 1) = "" Then Ws1.Hyperlinks.Add Anchor:=Worksheets(Sh_Name).Cells(1, 1), Address:="", SubAddress:="目次!A1", ScreenTip:="ヒントを表示", TextToDisplay:="目次へ戻る" End If Sh_Sta = Sh_Sta + 1 Loop Ws1.Activate MsgBox "処理を終了します。", vbOKOnly + vbInformation, "正常終了" End Sub |