Wordsコレクションを使って文書内の単語を列挙し、各単語がそれぞれいくつあるのかをカウントするWordマクロで、結果は新しい文書に表形式で出力します。
カウントを行う「CntWord」関数内の検索条件を変更すれば得られる結果も変更されます。
Option Explicit
Public Sub CountDocumentWords()
'文書内の単語を単語ごとにカウントする
Dim doc As Word.Document
Dim w As Word.Range
Dim dic As Object
Dim itm As Variant
Dim i As Long
i = 2 '初期化
Application.ScreenUpdating = False
Set doc = ActiveDocument
Set dic = CreateObject("Scripting.Dictionary")
For Each w In doc.Words
'単語が重複しないようにDictionaryオブジェクトを使用
If Not dic.Exists(w.Text) Then
dic.Add w.Text, w.Text
End If
Next
With Application.Documents.Add
With .Tables.Add(.Range, 1, 3)
.Cell(1, 1).Range.Text = ""
.Cell(1, 2).Range.Text = "単語"
.Cell(1, 3).Range.Text = "個数"
For Each itm In dic.Items
.Rows.Add
.Cell(i, 1).Range.Text = i - 1
.Cell(i, 2).Range.Text = itm
.Cell(i, 3).Range.Text = CntWord(doc, itm)
i = i + 1
Next
'テーブルの装飾
.AutoFitBehavior wdAutoFitContent
.Borders.InsideLineStyle = wdLineStyleSingle
.Borders.OutsideLineStyle = wdLineStyleSingle
.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
With .Rows(1).Shading
.Texture = wdTextureNone
.ForegroundPatternColor = wdColorAutomatic
.BackgroundPatternColor = 16751103
End With
End With
End With
Set dic = Nothing
Set doc = Nothing
Application.ScreenUpdating = True
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub
Private Function CntWord(ByVal doc As Word.Document, ByVal txt As String) As String
'単語数をカウントする
Dim tmp As String
Dim ret As String
Dim r As Word.Range
Dim cnt As Long
ret = "": cnt = 0 '初期化
tmp = Replace$(txt, " ", "")
tmp = Replace$(tmp, " ", "")
tmp = Replace$(tmp, vbCrLf, "")
tmp = Replace$(tmp, vbCr, "")
tmp = Replace$(tmp, vbLf, "")
If Len(tmp) > 0 Then
Set r = doc.Range(0, 0)
With r.Find
'検索条件は適宜変更
.ClearFormatting
.ClearAllFuzzyOptions
.Text = txt
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = True
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
Do While .Execute
cnt = cnt + 1
Loop
End With
Set r = Nothing
ret = CStr(cnt)
End If
CntWord = ret
End Function


















この記事へのコメントはありません。