Home » Dictionaryオブジェクトの使い方 » 単語と個数とページ番号と行番号を、Excelに書き出すWordマクロ

単語と個数とページ番号と行番号を、Excelに書き出すWordマクロ

対象:Word2003, Word2007, Word2010

文書に含まれる単語と単語の個数一覧をExcelに出力するWordマクロをご紹介しました。

ここまでくると、その単語が文書の中でどこにあるのかも一覧の中で欲しくなります。

そんなWordマクロをご紹介しておきます。

ページ番号と行番号の出力方法が、いくつか考えられますが、今回は1つのセルにページ番号と行番号をまとめて書き出すマクロをご紹介します。

[スポンサードリンク]

例えば、1ページ目の3行目、2ページ目の5行目に単語が存在しているときに
「p.1-3 p.2-5」
というデータを1つのセルに出力する形のマクロです。


Sub 単語と個数とページ番号と行番号の一覧をExcelに書き出す()

 Dim dic As Object ' Scripting.Dictionary
 Dim wrd As Word.Range
 Dim key As Variant
 Dim i As Long
 Dim pageline As String
 Dim xls As Object ' Excel.Application 

' 連想配列に単語を登録
 On Error Resume Next
 Set dic = CreateObject("Scripting.Dictionary")
 For Each wrd In ActiveDocument.Words
  dic.Add Trim(wrd.Text), ""
 Next wrd
 On Error GoTo 0

' Excelに、単語・個数・ページ番号&行番号を書き出し
 Set xls = CreateObject("Excel.Application")
 With xls
  .Workbooks.Add

  i = 1
  For Each key In dic.keys

   pageline = ""
   With ActiveDocument.Content
    .Find.Text = key
    Do While .Find.Execute = True
     pageline = pageline & "p." & _
      .Information(wdActiveEndAdjustedPageNumber) & "-" & _
      .Information(wdFirstCharacterLineNumber) & " "
    Loop
   End With ''ActiveDocument.Content

   .Cells(i, "A").Value = "'" & key
   .Cells(i, "B") = CountWord(CStr(key))
   .Cells(i, "C") = pageline
   i = i + 1

  Next key
 End With ''xls

 xls.Visible = True

 Set xls = Nothing
 Set dic = Nothing

End Sub

先日ご紹介したマクロと違うのは、
  For Each key In dic.keys
ではじまる、連想配列に登録したすべての語句に対するループの中で

単語を検索する処理を
    .Find.Text = key

繰り返して
    Do While .Find.Execute = True

そのDo~Loop文の中で、ページ番号・Information(wdActiveEndAdjustedPageNumber)と、行番号・Information(wdFirstCharacterLineNumber)を変数に格納し、
     pageline = pageline & "p." & _
      .Information(wdActiveEndAdjustedPageNumber) & "-" & _
      .Information(wdFirstCharacterLineNumber) & " "

単語をA列、単語数をB列、ページ番号と行番号をC列に、書き出しています。
   .Cells(i, "A").Value = "'" & key
   .Cells(i, "B") = CountWord(CStr(key))
   .Cells(i, "C") = pageline

B列に個数を書き出す処理で先日のマクロでも利用した、指定された語句の個数をカウントする、CountWordプロシージャを呼んでいますので、上記のSubプロシージャの他に、以下のようなFunctionプロシージャも用意しておいてください。
Function CountWord(WordWantToCount As String) As Long
 Dim cnt As Long
 With ActiveDocument.Range(0, 0).Find
  .Text = WordWantToCount
  Do While .Execute
   cnt = cnt + 1
  Loop
 End With
 CountWord = cnt
End Function

ここでは、ロジックが見えやすい形のマクロをご紹介していますが、たくさんの語句の含まれている文書に対して上記のマクロを実行すると、処理が完了するまでに、結構な時間がかかるはずです。

実務で本格的に利用する場合は、データを一旦配列に格納しておいて、Excelへの書き込みも工夫したマクロに修正することをおすすめしておきます。

関連語句
VBA, Visual Basic for Applications
[スポンサードリンク]

Home » Dictionaryオブジェクトの使い方 » 単語と個数とページ番号と行番号を、Excelに書き出すWordマクロ

TrackBack:1

TrackBack URL
全単語とページと行の一覧をExcelに出力するWordマクロ from インストラクターのネタ帳
対象:Word2003, Word2007, Word2010 Word文書に含まれる単語を書き出す系のマクロを、いくつかご紹介してきました。 文書に含...

Home » Dictionaryオブジェクトの使い方 » 単語と個数とページ番号と行番号を、Excelに書き出すWordマクロ

「Dictionaryオブジェクトの使い方」の記事一覧

検索


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

.