Wordには、文書内の単語を表すWordsコレクションオブジェクトがあります。
英語のように、単語と単語の間に必ずスペースの存在する言語の場合、単語を識別するのは、とても簡単なことです。
しかし、日本語のような、隙間なく文字が続く言語の場合、単語がどのように認識されるのか、気になります。
文書に含まれる単語を新規文書に書き出すサンプルマクロ
その参考になりそうなマクロを作成したのでご紹介しておきます。
Dim dic As Object
Dim wrd As Range
Dim key As Variant
' 連想配列に単語を登録
On Error Resume Next
Set dic = CreateObject("Scripting.Dictionary")
For Each wrd In ActiveDocument.Words
dic.Add wrd.Text, ""
Next wrd
On Error GoTo 0
' 新規文書に単語を書き出し
With Application.Documents.Add
For Each key In dic.Keys
.Range.InsertAfter key & vbCr
Next key
End With
Set dic = Nothing
End Sub上記のマクロを実行すると、アクティブ文書に含まれる単語が、新規のWord文書に作成されます。
サンプルマクロの解説
Dictionaryオブジェクトを使って、ダブりのない連想配列に単語を格納して、それを新規文書に書き出しています。
連想配列に単語を登録している
On Error Resume Next
Set dic = CreateObject("Scripting.Dictionary")
For Each wrd In ActiveDocument.Words
dic.Add wrd.Text, ""
Next wrd
On Error GoTo 0
の部分については、田中亨さんのサイト・Office TANAKAの解説『重複しないリストを作る』をご覧いただくのが早いでしょう。
新規文書に書き出しをしている、
With Application.Documents.Add
For Each key In dic.Keys
.Range.InsertAfter key & vbCr
Next key
End With
のポイントは、RangeオブジェクトのInsertAfterメソッドを使っているところでしょう。
Rangeオブジェクトに、InsertAfterメソッドが用意されているのが、WordのVBA(Visual Basic for Applications)らしいと感じます。
Home » Dictionaryオブジェクトの使い方 » 文書に含まれる単語を新規文書に書き出すWordマクロ