この記事では、Wordのファイル内にある表が何ページにあるかを特定する方法についてご説明します。
【動画】Wordのファイル内にある表が何ページにあるかを特定する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
ExcelのマクロがWordのファイルを開き、Excelの表の値を出力したい(Wordの)表を検索して表の情報を取得します。
表の情報を取得したら、取得した表の情報から、その表のWordファイル内の開始位置と終了位置を取得します。
取得した開始位置と終了位置を元にその表がどのページにあるのかをExcelのシートに出力しています。
マクロ作成の流れ
WordファイルとExcelファイルの例
Wordファイル
今回は次のWordファイルを用意しました。
以上は9ページのWordファイルですが、このWordファイルに6つの表が使われています。
それぞれの表がどのページにあるのかは下の表の通りです。
- 1つ目の表:1ページ目から3ページ目
- 2つ目の表:3ページ目から4ページ目
- 3つ目の表:4ページ目から5ページ目
- 4つ目の表:5ページ目から7ページ目
- 5つ目の表:7ページ目から8ページ目
- 6つ目の表:8ページ目から9ページ目
例えば2つ目の表なら、3ページ目から4ページ目に存在しています。
以上の情報を取得してExcelのシートに出力します。
Excelファイル
今回は次のExcelファイルを用意しました。
A2のセルにWordファイルのフルパスを入力して実行ボタンをクリックすると、Wordファイル内にある表がどのページにあるのかを出力します。
コードの例
Option Explicit Private Sub btn_exec_Click() Dim ws As Worksheet 'ワークシート変数 Dim WordApp As Object 'Wordアプリケーションインスタンス用変数 Dim WordDoc As Object 'Wordファイル用変数 Dim cnt As Integer 'カウンタ用変数 Dim rngStart As Object '表の開始位置情報用変数 Dim tblBgnOnPage As Long '表の開始位置のページ数用変数 Dim rngEnd As Object '表の終了位置情報用変数 Dim tblEndOnPage As Long '表の終了位置のページ数用変数 'Wordにデータを出力するシートを取得する Set ws = Worksheets("work") 'Wordアプリケーション用インスタンスを生成する Set WordApp = CreateObject("Word.Application") 'Wordを表示しない WordApp.Visible = False 'セルをクリアする ws.Range("A8:B17").ClearContents 'Wordファイルを開く Set WordDoc = WordApp.Documents.Open(ws.Range("wdFile").Value) 'Word文書内の表の数だけ処理を繰り返すFor文 For cnt = 1 To WordDoc.Tables.Count '表の数をAの列のセルに出力する ws.Range("A" & cnt + 7).Value = cnt '表の開始位置情報を取得する Set rngStart = WordDoc.Range( _ Start:=WordDoc.Tables(cnt).Range.Start, _ End:=WordDoc.Tables(cnt).Range.Start) '表の開始位置が何ページ目にあるか取得する tblBgnOnPage = rngStart.Information(wdActiveEndAdjustedPageNumber) '表の終了位置情報を取得する Set rngEnd = WordDoc.Range( _ Start:=WordDoc.Tables(cnt).Range.End, _ End:=WordDoc.Tables(cnt).Range.End) '表の終了位置が何ページ目にあるか取得する tblEndOnPage = rngEnd.Information(wdActiveEndAdjustedPageNumber) If tblBgnOnPage = tblEndOnPage Then '表の開始位置のページと終了位置のページが同じ場合 'Wordのファイル内に表が存在するページをBの列のセルに出力する ws.Range("B" & cnt + 7).Value = tblBgnOnPage & "ページ目" Else '表の開始位置のページと終了位置のページが違う場合 'Wordのファイル内に表が存在するページをBの列のセルに出力する ws.Range("B" & cnt + 7).Value = tblBgnOnPage & "ページ目から" & tblEndOnPage & "ページ目まで" End If DoEvents Next cnt 'Wordのファイルを閉じる WordDoc.Close 'Wordを終了する WordApp.Quit '後処理 Set WordDoc = Nothing Set WordApp = Nothing End Sub
注目すべきコード①
最初に見て頂きたいのは18行目です。
'Wordアプリケーション用インスタンスを生成する Set WordApp = CreateObject("Word.Application")
コードの説明
以上のコードは、Wordアプリケーション用インスタンスを生成するコードです。
このインスタンスを生成することでWordが起動されて操作することができるようになります。
今回はWordファイルを開いたり表が何ページ目にあるかが特定できたり、Word自体を終了させるなどの操作を行うのに使います。
注目すべきコード②
次に見て頂きたいのは21行目です。
'Wordを表示しない WordApp.Visible = False
コードの説明
以上のコードは、Wordの画面を非表示にするコードです。
Trueの場合はWordが表示されたままの状態になります。
注目すべきコード③
次に見て頂きたいのは27行目です。
'Wordファイルを開く Set WordDoc = WordApp.Documents.Open(ws.Range("wdFile").Value)
コードの説明
以上のコードは、Wordファイルを開く処理のコードです。
OpenメソッドにExcelのシートの表を出力したいWordファイルのフルパスを指定して実行することで、そのWordファイルが開きます。
注目すべきコード④
次に見て頂きたいのは30行目です。
'Word文書内の表の数だけ処理を繰り返すFor文 For cnt = 1 To WordDoc.Tables.Count
以上のコードは、Word文書内の表の数だけ処理を繰り返すFor文です。
Word文書内にいくつ表があるのかはWordDoc.Tables.Countプロパティから取得できるので、その値をFor文の最終値に指定して何回ループ処理を行うかを決定します。
注目すべきコード⑤
次に見て頂きたいのは33行目です。
'表の数をAの列のセルに出力する ws.Range("A" & cnt + 7).Value = cnt
コードの説明
以上のコードは、表の数をCの列のセルに出力するコードです。
注目すべきコード⑥
次に見て頂きたいのは36行目から49行目です。
'表の開始位置情報を取得する Set rngStart = WordDoc.Range( _ Start:=WordDoc.Tables(cnt).Range.Start, _ End:=WordDoc.Tables(cnt).Range.Start) '表の開始位置が何ページ目にあるか取得する tblBgnOnPage = rngStart.Information(wdActiveEndAdjustedPageNumber) '表の終了位置情報を取得する Set rngEnd = WordDoc.Range( _ Start:=WordDoc.Tables(cnt).Range.End, _ End:=WordDoc.Tables(cnt).Range.End) '表の終了位置が何ページ目にあるか取得する tblEndOnPage = rngEnd.Information(wdActiveEndAdjustedPageNumber)
コードの説明
以上のコードは、表の開始位置と終了位置がWordファイルの何ページ目にあるか取得する処理のコードです。
表の開始位置と終了位置を取得することで、その表が何ページ目から何ページ目に存在しているのかを特定することができます。
コードの詳細
37行目のStartプロパティと38行目のEndプロパティに、表の開始位置を設定しrngStartオブジェクトを生成します。
次に41行目でrngStartオブジェクトのInformationメソッドにwdActiveEndAdjustedPageNumberを指定して実行することで表の開始位置が何ページ目にあるかを取得することができます。
45行目のStartプロパティと46行目のEndプロパティに、表の終了位置を設定しrngEndオブジェクトを生成します。
次に49行目でrngEndオブジェクトのInformationメソッドにwdActiveEndAdjustedPageNumberを指定して実行することで表の終了位置が何ページ目にあるかを取得することができます。
注目すべきコード⑦
次に見て頂きたいのは51行目から65行目です。
If tblBgnOnPage = tblEndOnPage Then '表の開始位置のページと終了位置のページが同じ場合 'Wordのファイル内に表が存在するページをBの列のセルに出力する ws.Range("B" & cnt + 7).Value = tblBgnOnPage & "ページ目" Else '表の開始位置のページと終了位置のページが違う場合 'Wordのファイル内に表が存在するページをBの列のセルに出力する ws.Range("B" & cnt + 7).Value = tblBgnOnPage & "ページ目から" & tblEndOnPage & "ページ目まで" End If
コードの説明
以上のコードは、Wordのファイル内に表が存在するページをCの列のセルに出力する処理のコードです。
コードの詳細
51行目のコードは、表の開始位置のページと終了位置のページが同じかどうかを判定するIF文のコードです。
もし表の開始位置のページと終了位置のページが同じ場合は、56行目で「nページ目」とB列のセルに出力します。
もし表の開始位置のページと終了位置のページが同じではない場合は、63行目で「nページ目からnページ目まで」とB列のセルに出力します。
注目すべきコード⑧
次に見て頂きたいのは72行目から75行目です。
'Wordのファイルを閉じる WordDoc.Close 'Wordを終了する WordApp.Quit
コードの説明
以上のコードは、Wordのファイルを閉じ、Word自体も閉じる(終了する)処理のコードです。
コードの詳細
72行目のコードは、Wordのファイルを閉じるコードです。
75行目のコードは、Wordを終了する(閉じる)コードです。
動作確認
「WordファイルとExcelファイルの例」をご覧ください。
最後に
この記事では、Wordのファイル内にある表が何ページにあるかを特定する方法についてご説明しました。
Wordのファイル内に表がいくつかあるのか、またどのページに存在しているのかを知りたい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。