単語の出現回数の生成(Microsoft Word)
ドキュメントを分析しているときに、ドキュメント内の単語数のカウントを作成する方法があるかどうか疑問に思うかもしれません。残念ながら、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]
。