Excelで目次を自動で生成するためにはどうしたらいいんですか?
目次や各シートにページ番号も振りたい!
このようなお悩みってありませんか?
そこで、今回の記事ではExcelで「目次の自動生成する方法」「ページ番号の振り方」などを解説していきたいと思います!
本記事で分かること!
1.目次やハイパーリンクを自動作成できる(ページ番号付き)
2.各ページ番号を自動で振れる
本記事で紹介するマクロを使用すると、以下図のようにエクセルで「目次やハイパーリンクを、一括で自動作成」「目次に各ページ番号を自動で振る」ことができます。
① 目次とハイパーリンクを自動生成できる。(ページ番号付き)
② 各ページの番号を自動で振れる。
そもそも、1つのブックに複数のシートが存在していないと、本記事のメリットが活かせません。
よって前回は、複数のエクセルファイルを1つのブックにまとめるマクロを解説していますので、前回記事をチェックしてないようでしたら、本記事と併せてご確認ください。
>>複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの解説!
目次
Excelで目次を自動生成してページ番号を振るマクロの導入手順
ということで、「Excelで目次を自動生成し、ページ番号を振る」マクロの導入手順をご紹介します。
焦らず一つずつ試してみてくださいね。
3つの導入手順
1.マクロ実行用のエクセルファイルを用意する
2.コードを「標準モジュール」に貼り付ける
3.マクロ実行ボタンの設置
手順①:マクロ実行用のエクセルファイルを用意する
まずはマクロを実行するためのエクセルファイルを用意しましょう。
1.「ファイル」タブを選択
2.「名前を付けて保存」を選択
3.保存したいフォルダを選択し、ダイアログを開く
4.「ファイルの種類」⇒「Excel マクロ有効ブック(*.xlsm)」⇒「保存」
5.タブエリアで右クリック ⇒ 「リボンのユーザー設定」を選択
6.「開発」にチェックをいれる ⇒ OK
7.タブエリアに「開発」が入っていることを確認しましょう!
これで、マクロ実行用のエクセルファイル作成が完了しました。
次に、コードを貼り付けていきましょう。
手順②:コードを「標準モジュール」に貼り付ける
1.「開発」タブ ⇒ 「Visual Basic」を選択し、VBE(Visual Basic Editor)を起動する
※ Alt + F11 でも起動できます。
起動すると、以下のような真っ白な画面が出てきます!
2.「挿入」タブ ⇒ 「標準モジュール」を選択し、標準モジュールを挿入する
「Module 1」が追加されたことを確認しましょう。
3.下記コードをすべてコピーする
↑の画像のような場所をクリックすると、すべてのコードをコピーできます。
クリックして「Copied to the clipboard」と出ればOKです。
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
Public Sub 目次() '定数を宣言する Const STR_SHEET_NAME As String = "目次シート" 'ダイアログから、目次を作りたいExcelを選ぶ! Dim strFilename As String strFilename = Application.GetOpenFilename("Exceブック,*.xls?") If strFilename = "False" Then: MsgBox "取得できませんでした", vbInformation: Exit Sub 'Excelを開いて、変数awbに参照設定する Dim awb As Workbook Set awb = Workbooks.Open(strFilename) With awb ' // 手前に目次シートを追加する // Dim ws As Worksheet 'コレクションの数だけループ For Each ws In .Worksheets 'シート名が目次シートの場合のみ処理 If ws.Name = STR_SHEET_NAME Then '警告を無効化 Application.DisplayAlerts = False 'シート削除 ws.Delete '警告を有効化 Application.DisplayAlerts = True Exit For End If Next '手前にシートを追加する .Worksheets.Add Before:=.Worksheets(1) Dim wsIndex As Worksheet '追加したシートの参照を割り当てる Set wsIndex = .ActiveSheet '追加したシートの名前を目次シートに変更する wsIndex.Name = STR_SHEET_NAME ' // 目次を作成(各シートとの相互リンク)// '目次シートの行数用カウンタ変数 Dim myRow As Long 'ページ番号用カウンタ変数 Dim myNo As Long: myNo = 1 For Each ws In .Worksheets 'シート名が目次シート以外の場合、処理する If ws.Name <> STR_SHEET_NAME Then '目次シート⇒各シートへ移動できるハイパーリンク作成 'シート名格納用変数 Dim strSheetname As String '変数にシート名を入れておく strSheetname = "'" & ws.Name & "'" & "!A1" 'ハイパーリンクの追加 wsIndex.Hyperlinks.Add _ Anchor:=wsIndex.Range("A1").Offset(myRow), _ Address:="", _ SubAddress:=strSheetname, _ TextToDisplay:=ws.Name '目次に各ページ番号を振る wsIndex.Range("A1").Offset(myRow, 1) = CStr(myNo) myRow = myRow + 1 '各シート⇒目次シートへ移動できるハイパーリンクを作成 ws.Hyperlinks.Add _ Anchor:=ws.Range("B1"), _ Address:="", _ SubAddress:=STR_SHEET_NAME & "!A1", _ TextToDisplay:=STR_SHEET_NAME ' // 目次を作成(各シートとの相互リンク)// 'ページ番号を転記 ws.Range("C1").Value = CStr(myNo) myNo = myNo + 1 End If Next ws End With MsgBox "目次作成完了しました!", vbInformation End Sub |
4.VBEの右のウィンドウに貼り付ける ⇒ 上書き保存
これで、コードの貼り付けは完了です!
では最後の手順、「マクロ実行ボタン」の設置をやっていきましょう。
手順③:マクロ実行ボタンの設置
1.「開発」タブ ⇒ 「挿入」 ⇒ 「ボタン(フォームコントロール)」
画面の適当なところでクリックしてみると・・・
「マクロの登録」というウィンドウが開きます。
2.「目次」 ⇒ 「OK」
ボタンにマクロの実行名を紐づける、といったことを行います。
お疲れさまでした!
このようなボタンが画面上に挿入されたら、完成です!(ボタンに表示されているテキストは、自由に変えても大丈夫です)
では次に「Excelで目次を自動生成し、ページ番号を振るマクロの使い方」について解説していきます。
Excelで目次を自動生成してページ番号を振るマクロの使い方
ここからは実際の使い方をご説明してきます。
使い方はとてもシンプルですので、安心してくださいね!
マクロの使い方
1.実行ボタンを押して「エクセルで目次を自動作成したい」ファイルを開く
2.エクセルでハイパーリンク付き目次を一括作成する
たったこれだけです。
簡単ですよね^^
実行ボタンを押して「エクセルで目次を自動作成したい」ファイルを開く
ということで、さきほどコードを貼り付けた、Excelマクロのファイルを開いておきましょう。
「ボタン1」を押しダイアログを開いてみましょう。
ボタンを押すと、上図のようなダイアログが開かれます。
目次を作成したいエクセルが保存された、フォルダに移動しましょう。
そして、ダイアログから、エクセルを開いてみてください。
エクセルでハイパーリンク付き目次を一括作成する
ダイアログからエクセルを開いてみると、瞬きしている間に一瞬で処理が終わります。
(サンプルとして、Shee1~Sheet1(5)まで、計5つのシートを事前に準備しておきました。)
実行結果は、以下のような感じです。
■Before
■After
「目次シート」が新規追加され、ハイパーリンク付きの目次が一括で自動作成できました。
各ページの左上には、「目次シートへのハイパーリンク」も自動で作成されます。
クリックすると、目次シートに楽々戻れます♪
Excelで目次を自動生成してページ番号を振るマクロの解説
ということで、さきほどは「Excelで目次を自動生成し、ページ番号を振るマクロの使い方」についてご説明しました。
ここから先は、「どうやってマクロを作ったか教えて!コツはあるの?」という方に向けて、マクロの解説をしていきたいと思います。
全体のコードから抜粋しながらご説明していきますね。
3つのポイント
1.目次シートを更新する(For Each In ~ Next文)
2.目次から各ページに移動する
3.各ページから目次に戻る
以上の3つのポイントを押さえれば、あなたもマクロを作成できます!
ポイント①:目次シートを更新するマクロ
まず、シート数の増減によって、目次シートを更新する必要がありますよね。
よって、マクロを実行するたびに、目次シートを更新するような処理を入れていきましょう。
具体的には、For Each In ~ Nextにて「シート削除・追加」していけば大丈夫です。
以下のように記述して実行すると、「目次シートを削除 ⇒ 目次シートを追加」といった処理を行ってくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
' // 手前に目次シートを追加する // Dim ws As Worksheet 'コレクションの数だけループ For Each ws In .Worksheets 'シート名が目次シートの場合のみ処理 If ws.Name = STR_SHEET_NAME Then '警告を無効化 Application.DisplayAlerts = False 'シート削除 ws.Delete '警告を有効化 Application.DisplayAlerts = True Exit For End If Next '手前にシートを追加する .Worksheets.Add Before:=.Worksheets(1) Dim wsIndex As Worksheet '追加したシートの参照を割り当てる Set wsIndex = .ActiveSheet '追加したシートの名前を目次シートに変更する wsIndex.Name = STR_SHEET_NAME |
シートの追加後は、序盤で宣言した定数(Const)にてシートのリネームをします。
ポイント②:エクセルで目次から各ページに移動するマクロ
では次に、目次シートから各ページへ移動する目次作成方法について解説していきます。
さきほどのセクションの終盤にて参照設定したworksheetオブジェクト(wsIndex)に、ハイパーリンクを追加していきましょう。
Worksheetオブジェクト.Hyperlinksコレクション.Addメソッドにてハイパーリンクを追加していきます。
TextToDisplay:=ws.Name
Addメソッドの後に4つも名前付き引数があって、わけわかんないですよね。
筆者も最初は混乱しました^^;
大丈夫です。落ち着いて確認していきましょう。
それぞれの引数と役割は以下の通りです。
引数 | 説明 | 解説 |
---|---|---|
Anchor | ハイパーリンクのアンカーを指定します。 Range オブジェクトまたは Shape オブジェクトを指定します。 | ハイパーリンクを起動するオブジェクトを指定します。(セル・オートシェイプ) |
Address | ハイパーリンクのアドレスを指定します。 | これは指定しなくてもよいです。ただし、省略できません。 |
SubAddress (省略可) | ハイパーリンクのサブアドレスを指定します。 | 各シートのアドレスを指定します。 |
ScreenTip (省略可) | ハイパーリンク上をマウス ポインターで指した場合に表示されるヒントを指定します。 | マウスポインタ―を合わせたときのヒントが表示されます |
TextToDisplay (省略可) | ハイパーリンクで表示されるテキストを指定します。 | ハイパーリンク上に表示されるテキストを指定できます |
つまり、要点をまとめると・・・
■Anchor
Anchor:=wsIndex.Range(“A1”).Offset(myRow)
ハイパーリンクを起動するオブジェクトを指定します。(今回はセルをクリックして起動することを想定しているため、RangeオブジェクトでOK)
■SubAddress
strSheetname = “‘” & ws.Name & “‘” & “!A1”
SubAddress:= strSheetname
各シートのアドレス(リンク先のことです)を指定する。
注意として、文字列をシングルクォーテーション( ‘ )で囲う必要があります。
■TextToDisplay
TextToDisplay:=ws.Name
ハイパーリンクに表示される文字列(各シート名でOK)を設定する。
このように言い換えることができます。
実行してみると、目次シートのA1セルから順番に、目次が自動作成されます。
以上で、目次の自動生成は完了です。(目次⇒各シートへのリンクつき)
■目次シートのページ番号
目次シートへのページ番号は、以下のように書けばいいでしょう。
ここまできたら、あとは「各シート⇒目次」へ移動する(戻る)機能も追加していきましょう。
基本的には、「目次シート ⇒ 各シートへのリンク挿入」と同じように書けばOKです!
ポイント③:エクセルで各ページから目次に戻るマクロ
最後に、各ページから目次シートへ戻る方法を解説していきます。
せっかく目次から各シートへのリンクを設置したのに、今のままですと目次に戻る方法が人力となってしまいますよね。
あまりスマートじゃないですね。
そこで、各シートから目次シートへ戻る・移動するための、ハイパーリンクを設置していきましょう。
Anchor:=ws.Range(“B1″), _
Address:=””, _
SubAddress:=STR_SHEET_NAME & “!A1”, _
TextToDisplay:=STR_SHEET_NAME
つまり・・・
■Anchor
Anchor:=ws.Range(“B1”)
各シートのB1セルからハイパーリンクを起動する
■SubAddress
SubAddress:=STR_SHEET_NAME & “!A1”
目次シートのアドレス(定数:目次シート)
■TextToDisplay
TextToDisplay:=STR_SHEET_NAME
ハイパーリンクに表示される文字列(定数:目次シート)
となります。
とっても簡単ですよね!
Excelで目次を自動生成してページ番号を振るマクロのまとめ
今回は「Excelで目次を自動作成する方法・ページ番号の振り方」について解説しました。
そもそも本記事のマクロは、複数のシートが存在していないと意味を成しません。
よって複数のエクセルファイルを1つのブックにまとめるマクロをご紹介していますので、併せてチェックしていただくと、より業務効率化が進みます!
>>複数のエクセルファイルを1つのブックにまとめる(シート別)マクロの解説!
今回は以上です。
最後までご覧いただきありがとうございました。