ドキュメントを分析しているときに、ドキュメント内の単語数のカウントを作成する方法があるかどうか疑問に思うかもしれません。残念ながら、Wordにはそのような機能は含まれていませんが、実行できることがいくつかあります。

まず、特定の単語またはフレーズが使用された回数を知りたい場合は、次の手順を実行できます。

。 Ctrl + Hを押して、[検索と置換]ダイアログボックスの[置換]タブを表示します。 (図1を参照)

。 [検索する文字列]ボックスに、カウントする単語またはフレーズを入力します。

。 [置換]ボックスに^&と入力します。この文字シーケンスは、検索したものを[検索する文字列]ボックスに配置したものに置き換えたいことをWordに通知します。 (つまり、単語またはフレーズをそれ自体に置き換えています。)

。個々の単語を検索する場合は、必ず[単語全体を検索]チェックボックスをクリックしてください。

。 [すべて置換]をクリックします。 Wordが置換を行い、置換したインスタンスの数を表示します。それはあなたが望む数です。

このアプローチは、知りたい単語やフレーズが1つか2つしかない場合に最適です。マクロを使用してドキュメントを検索し、カウントすることで、プロセスを少し自動化できます。次のマクロは、ユーザーに単語の入力を求め、その単語がドキュメントに表示される回数をカウントします。ユーザーが[キャンセル]ボタンをクリックするまで、別の単語を要求し続けます。

Sub FindWords()

Dim sResponse As String     Dim iCount As Integer

' Input different words until the user clicks cancel     Do         ' Identify the word to count         sResponse = InputBox( _           Prompt:="What word do you want to count?", _           Title:="Count Words", Default:="")

If sResponse > "" Then             ' Set the counter to zero for each loop             iCount = 0             Application.ScreenUpdating = False             With Selection                 .HomeKey Unit:=wdStory                 With .Find                     .ClearFormatting                     .Text = sResponse                     ' Loop until Word can no longer                     ' find the search string and                     ' count each instance                     Do While .Execute                         iCount = iCount + 1                         Selection.MoveRight                     Loop                 End With                 ' show the number of occurences                 MsgBox sResponse & " appears " & iCount & " times"

End With             Application.ScreenUpdating = True         End If     Loop While sResponse <> ""

End Sub

ドキュメント内のすべての一意の単語と、それぞれがドキュメントに表示される回数を特定する場合は、別のアプローチが必要です。次のVBAマクロはまさにそれを行います。

Sub WordFrequency()

Const maxwords = 9000          'Maximum unique words allowed     Dim SingleWord As String       'Raw word pulled from doc     Dim Words(maxwords) As String  'Array to hold unique words     Dim Freq(maxwords) As Integer  'Frequency counter for unique words     Dim WordNum As Integer         'Number of unique words     Dim ByFreq As Boolean          'Flag for sorting order     Dim ttlwds As Long             'Total words in the document     Dim Excludes As String         'Words to be excluded     Dim Found As Boolean           'Temporary flag     Dim j, k, l, Temp As Integer   'Temporary variables     Dim ans As String              'How user wants to sort results     Dim tword As String            '

' Set up excluded words     Excludes = "[the][a][of][is][to][for][by][be][and][are]"



' Find out how to sort     ByFreq = True     ans = InputBox("Sort by WORD or by FREQ?", "Sort order", "WORD")

If ans = "" Then End     If UCase(ans) = "WORD" Then         ByFreq = False     End If          Selection.HomeKey Unit:=wdStory     System.Cursor = wdCursorWait     WordNum = 0     ttlwds = ActiveDocument.Words.Count

' Control the repeat     For Each aword In ActiveDocument.Words         SingleWord = Trim(LCase(aword))

'Out of range?

If SingleWord < "a" Or SingleWord > "z" Then             SingleWord = ""

End If         'On exclude list?

If InStr(Excludes, "[" & SingleWord & "]") Then             SingleWord = ""

End If         If Len(SingleWord) > 0 Then             Found = False             For j = 1 To WordNum                 If Words(j) = SingleWord Then                     Freq(j) = Freq(j) + 1                     Found = True                     Exit For                 End If             Next j             If Not Found Then                 WordNum = WordNum + 1                 Words(WordNum) = SingleWord                 Freq(WordNum) = 1             End If             If WordNum > maxwords - 1 Then                 j = MsgBox("Too many words.", vbOKOnly)

Exit For             End If         End If         ttlwds = ttlwds - 1         StatusBar = "Remaining: " & ttlwds & ", Unique: " & WordNum     Next aword

' Now sort it into word order     For j = 1 To WordNum - 1         k = j         For l = j + 1 To WordNum             If (Not ByFreq And Words(l) < Words(k)) _               Or (ByFreq And Freq(l) > Freq(k)) Then k = l         Next l         If k <> j Then             tword = Words(j)

Words(j) = Words(k)

Words(k) = tword             Temp = Freq(j)

Freq(j) = Freq(k)

Freq(k) = Temp         End If         StatusBar = "Sorting: " & WordNum - j     Next j

' Now write out the results     tmpName = ActiveDocument.AttachedTemplate.FullName     Documents.Add Template:=tmpName, NewTemplate:=False     Selection.ParagraphFormat.TabStops.ClearAll     With Selection         For j = 1 To WordNum             .TypeText Text:=Trim(Str(Freq(j))) _               & vbTab & Words(j) & vbCrLf         Next j     End With     System.Cursor = wdCursorNormal     j = MsgBox("There were " & Trim(Str(WordNum)) & _       " different words ", vbOKOnly, "Finished")

End Sub

ドキュメントを開いてこのマクロを実行すると、単語または頻度でソートされたリストを作成するかどうかを尋ねられます。単語を選択すると、結果のリストがアルファベット順に表示されます。頻度を選択すると、結果のリストは、その単語がドキュメントに出現した回数に基づいて降順になります。

マクロの実行中、ステータスバーは何が起こっているかを示します。

ドキュメントのサイズとコンピューターの速度によっては、マクロが完了するまでに時間がかかる場合があります。 (349,000語を超える719ページのドキュメントで実行しましたが、完了するまでに約5分かかりました。)

マクロには、Excludes文字列に値を設定する行があることに注意してください。この文字列には、単語リストをまとめるときにマクロが無視する単語が含まれています。除外リストに単語を追加する場合は、文字列の[角かっこ]の間に単語を追加するだけです。また、除外語が小文字であることを確認してください。

何らかの理由でマクロを使用したくない場合は、単語数を作成するために使用できる他のプログラムがあります。たとえば、NoteTabテキストエディタ(「ライト」バージョンはhttp://www.notetab.comから無料でダウンロードできます)には、単語数を提供する機能が含まれています。

ドキュメント全体をコピーしてNoteTabに貼り付けるだけです。次に、NoteTab内で[ツール]、[ツール]の順に選択します。テキスト統計|もっと。パーセンテージを含む単語頻度の分析を示します。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ wordribbon-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1833)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ:

link:/ wordribbon-Generating_a_Count_of_Word_Occurrences [Generating a Count of WordOccurrences]