Home » ワードマクロ・Word VBAの使い方 » Office連携 » 全単語とページと行の一覧をExcelに出力するWordマクロ

全単語とページと行の一覧をExcelに出力するWordマクロ

対象:Word2003, Word2007, Word2010

Word文書に含まれる単語を書き出す系のマクロを、いくつかご紹介してきました。

Excelに出力するのなら、単語数のカウントをExcel側でやるのも一つの考え方です。

Excelでデータのカウントを行う方法はいくつか考えられますが、ピボットテーブルで単語数をカウントする方向で考えてみます。

[スポンサードリンク]

全単語とページと行の一覧をExcelに出力するサンプルマクロ

まず、WordからExcelに、ピボットテーブルで集計しやすい形で、すべての単語と、ページ番号&行番号の一覧を出力するマクロをご紹介します。

Sub 全単語とページと行の一覧をExcelに出力する()
 
 Dim rng As Word.Range
 Dim cnt As Long ' 単語の数
 Dim wd_pgln()  ' 単語, 単語の含まれるページ番号と行番号 の2次元配列
 Dim i As Long

 cnt = ActiveDocument.Words.Count
 ReDim wd_pgln(1 To cnt, 1 To 2)
 i = 1
 For Each rng In ActiveDocument.Words
  With rng
   wd_pgln(i, 1) = "'" & Trim(.Text)
   wd_pgln(i, 2) = "p." & _
    .Information(wdActiveEndAdjustedPageNumber) & _
    "-" & _
    .Information(wdFirstCharacterLineNumber)
  End With
  i = i + 1
 Next

 With CreateObject("Excel.Application")
  .Workbooks.Add
  .Range(.Range("A2"), .Cells(cnt + 1, "B")).Value = wd_pgln
  .Range("A1").Value = "語句"
  .Range("B1").Value = "ページ・行"
  .Visible = True
 End With

End Sub

上記のマクロを実行するとA2セルから下に単語がだらだらと、B2セルから下にその単語が何ページ目の何行目にあるのかが「p.1-1」というフォーマットで書き出されます。

サンプルマクロの解説

今回のマクロでは、二次元配列にデータを格納しておいて、一気にExcelに書き出しを行っています。

まず、アクティブな文書に含まれる単語の個数を取得して
 cnt = ActiveDocument.words.Count

二次元配列のサイズ決定します。
 ReDim wd_pgln(1 To cnt, 1 To 2)

サイズを決定した二次元配列に、単語と、ページ番号&行番号を、順番に格納していきます。
 i = 1
 For Each rng In ActiveDocument.Words

単語は前後のスペースをTrimして、頭に「'」(シングルクォート)を付加して、二次元配列の1列目に格納し
   wd_pgln(i, 1) = "'" & Trim(.Text)

ページ番号&行番号は、「p.1-1」というフォーマットにして、二次元配列の2列目に格納していきます。
   wd_pgln(i, 2) = "p." & _
    .Information(wdActiveEndAdjustedPageNumber) & _
    "-" & _
    .Information(wdFirstCharacterLineNumber)

ここでは、二次元配列にデータを格納しておいて一気に書き出す処理をわかりやすくするため、このあとのピボットテーブルを作成する処理を楽にするため、「p.1-1」という文字列を作る仕様にしています。例えば、どの単語がどのページにたくさん出現するのか、といった集計も必要ならば、ページ番号と行番号を別フィールドに出力する形にしていただくといいでしょう。

配列への格納が終わったらExcelをCreateObjectして
 With CreateObject("Excel.Application")

ブックを追加し
  .Workbooks.Add

データを格納した二次元配列から、データを一気に書き出します。
  .Range(.Range("A2"), .Cells(cnt + 1, "B")).Value = wd_pgln

データの書き出しが終わったら、見出しを書き出して
  .Range("A1").Value = "語句"
  .Range("B1").Value = "ページ・行"

Excelを表示しています。
  .Visible = True

今回は、単語とページ番号&行番号の一覧をExcelに出力する部分までで、このあとこの一覧データを元に、ピボットテーブルを作成するマクロを別記事でご紹介していきます。単語一覧とピボットテーブルを作成するWordマクロを公開しました。2012-08-27)

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Office連携 » 全単語とページと行の一覧をExcelに出力するWordマクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.