【Word VBA】3ページ目以降にページ番号を挿入するWordマクロ

Wordでよくある質問に「目次と表紙ページ以外にページ番号を入れる方法」や「3ページ目からページ番号を挿入する方法」などがあります。

いずれも、1ページ目を表紙で2ページ目を目次とした場合に、目次が終了した次のページ(3ページ目)から本文が開始することを想定しています。

なので、本文が始まるページ(3ページ目)のページ番号が1になる(1ページ目が始まる)ということです。

この操作は、上記のリンク先の記事をご覧いただくとよくわかると思います。

今回のマクロでは、このような操作手順を知らなくても、ひとまずは指定したページからページ番号が開始するようにできるマクロです。

細かな設定はやはりWordの使い方を覚えて自分で設定できるほうがいいと思うのですが、複雑なページ番号やフッターを入れる必要がなくて、ただ単に3ページ目から1ページ目が開始するといいなと感じている方には重宝するマクロだと思います。

このマクロでできること

現在カーソルのある文書に対して実行します。

まず、ページ番号の挿入を開始したいページ番号を入力します。

ここで任意のページ番号を入力できます。例として3を入力します。

次に、ページの開始番号を入力します。デフォルトでは1と表示されています。[OK]をクリックします。

すると、3ページ目以降にページ番号が挿入されます。

すでにページ番号が挿入されている場合には、3ページ目以降のフッターの文字やページ番号は削除して新たに振り直しますが、1ページ目と2ページ目にはページ番号が残ったままになりますのでお気をつけください。

マクロの解説

セクション区切りを挿入するために、まずカーソルをページの先頭に移動させてからセクション区切りを挿入しています。50行目~56行目で設定したようにページ先頭にジャンプするGotoメソッドを用います。

このための準備として、14行目で表示を「印刷レイアウト」に設定しています。たとえば表示が「Webレイアウト」になっている場合、ページの概念がないので上記のGotoメソッドをしてもカーソルが指定したページの先頭に移動しないからです。

あと、メインの処理とはあんまり関係がありませんが、参考情報です。

26行目の Information(wdNumberOfPagesInDocument) プロパティでページ総数を取得できます。指定したページ数が、ページ総数を超えるとメッセージを表示できるようにしています。

ちなみにGotoメソッドは、ショートカットキーの Ctrl + G で開く[検索と置換]ダイアログボックス[ジャンプ]タブに相当します。

マクロ


Sub 文書の途中からページ番号を挿入()
 
 Dim myDoc As Document  '処理対象の文書
 Dim myPage As Variant  '開始ページ
 Dim myStartP As Variant '開始番号
 Dim mySection As Long  'セクション
 Dim myRange As Range   'Rangeオブジェクト
 Dim myMessage As String '表示するメッセージ
 
 '-------------------------------------------
 'ページの表示を開始するページ
 '-------------------------------------------
 Set myDoc = ActiveDocument
 myDoc.ActiveWindow.View.Type = wdPrintView
   
 myMessage = "ページ番号の表示を開始するページを入力してください。"
 
 Do
  myPage = InputBox(myMessage, "数値を入力してください。")
  If myPage = vbNullString Then Exit Sub
 Loop While IsNumeric(myPage) = False Or myPage < 1
 
 If myDoc.Range.Information(wdNumberOfPagesInDocument) < CInt(myPage) Then
  MsgBox "本文書の総ページ数は、" & myPage & "ページ未満です。" & vbCr & _
      "終了いたします。"
  Exit Sub
 End If
 
 '-------------------------------------------
 'ページの開始番号
 '-------------------------------------------
 myMessage = myPage & "ページ目の開始番号を入力してください。 "
 
 Do
  myStartP = InputBox(myMessage, "数値を入力してください。", 1)
  If myStartP = vbNullString Then Exit Sub
 Loop While IsNumeric(myPage) = False Or myStartP < 1
 
 '-------------------------------------------
 'ページ番号の表示開始ページの指定
 '-------------------------------------------
 If myPage = 1 Then
  
  '開始番号が1ページ目の場合
  mySection = 0
  
 Else
 
  '開始番号が2ページ目以降の場合
  With Selection
   .GoTo What:=wdGoToPage, _
      Which:=wdGoToAbsolute, _
      Count:=myPage
   .InsertBreak _
      Type:=wdSectionBreakNextPage
  End With
  
  'カーソル位置直前までのセクション数
  Set myRange = Selection.Range
  myRange.SetRange Start:=0, End:=Selection.End
  mySection = myRange.Sections.Count
 
 End If
 
 '-------------------------------------------
 'ページ番号の挿入
 '-------------------------------------------
 With myDoc.Sections(mySection + 1)
 
  '-------------------------------------------
  '設定のリセット
  '-------------------------------------------
  'セクションのヘッダー・フッターの設定
  With .PageSetup
   
   '1ページ目と2ページ目以降の設定を同一にする
   .DifferentFirstPageHeaderFooter = False
   
   '奇数/偶数ページ別指定をしない
   .OddAndEvenPagesHeaderFooter = False
   
  End With
  
  '前のセクションのフッターと独立したフッターに設定する
  .Footers(wdHeaderFooterFirstPage).LinkToPrevious = False
  .Footers(wdHeaderFooterPrimary).LinkToPrevious = False
  .Footers(wdHeaderFooterEvenPages).LinkToPrevious = False
  
  '現在の入力内容をリセットする
  .Footers(wdHeaderFooterFirstPage).Range.Text = ""
  .Footers(wdHeaderFooterPrimary).Range.Text = ""
  .Footers(wdHeaderFooterEvenPages).Range.Text = ""
  
  '-------------------------------------------
  'ページ番号の挿入
  '-------------------------------------------
  With .Footers(wdHeaderFooterPrimary).PageNumbers
  
   'アラビア数字で表示
   .NumberStyle = wdPageNumberStyleArabic
   
   'このセクションでページ番号を振り直す
   .RestartNumberingAtSection = True
   
   'ページ番号の開始番号
   .StartingNumber = myStartP
   
   'フッターの中央に表示する
   .Add PageNumberAlignment:=wdAlignPageNumberCenter
   
  End With
 End With
 
 Set myDoc = Nothing
 
End Sub

トップへ戻る