文書に含まれる単語と単語の個数一覧をExcelに出力するWordマクロをご紹介しました。
ここまでくると、その単語が文書の中でどこにあるのかも一覧の中で欲しくなります。
そんなWordマクロをご紹介しておきます。
ページ番号と行番号の出力方法が、いくつか考えられますが、今回は1つのセルにページ番号と行番号をまとめて書き出すマクロをご紹介します。
例えば、1ページ目の3行目、2ページ目の5行目に単語が存在しているときに
「p.1-3 p.2-5」
というデータを1つのセルに出力する形のマクロです。
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
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
先日ご紹介したマクロと違うのは、
For Each key In dic.keys
ではじまる、連想配列に登録したすべての語句に対するループの中で
単語を検索する処理を
.Find.Text = key
繰り返して
Do While .Find.Execute
その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への書き込みも工夫したマクロに修正することをおすすめしておきます。
- Newer:モジュール名を変更するショートカットキー-F4
- Older:VBAで選択されている列番号・行番号を取得する
Home » Dictionaryオブジェクトの使い方 » 単語と個数とページ番号と行番号を、Excelに書き出すWordマクロ