文字頻度カウント(Microsoft Word)
スコットは、ドキュメント内のすべての文字の「頻度カウント」を取得する方法を探しています。彼は、ASCIIコード9から255までの各文字が何回出現するか知りたいと思っています。検索と置換を使用して個々の文字の数を決定することは可能です(問題の文字を検索してからそれ自体に置き換えるだけです)が、247で実行する必要がある場合、このようなアプローチはせいぜい面倒です。必要な情報を取得するためのさまざまな文字コード。
このようなタスクはマクロを使用して実行する必要がありますが、それにアプローチする方法はいくつかあります。 1つの方法は、Characterコレクションの各メンバーをステップスルーし、それぞれを調べて、その文字をいくつかのカウンターの1つに割り当てるクイックマクロを作成することです。
Sub CountChars1() Dim iCount(0 To 255) As Integer Dim i As Integer Dim vCharacter As Variant Dim sTemp As String ' Initialize the array For i = 0 To 255 iCount(i) = 0 Next i ' Fill the array For Each oCharacter In ActiveDocument.Characters i = Asc(oCharacter) iCount(i) = iCount(i) + 1 Next ' Add document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLf ' Only output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
マクロはiCount配列を使用して各文字コードのカウントを累積し、新しいドキュメントを作成して結果を出力します。 (結果ドキュメントは、任意の方法でフォーマットできます。)
このアプローチは、数ページまでの比較的短いドキュメントに適しています。ドキュメントが長くなると、マクロは遅くなります。どうして?
何らかの理由でCharactersコレクションを使用するのにかなりの時間がかかるためです。マクロの実行がドキュメントに対して遅すぎる場合は、文字列のみで機能するようにマクロを少し変更する必要があります。
Sub CountChars2() Dim iCount(0 To 255) As Long Dim i As Long Dim j as integer Dim lCharCount As Long Dim sDoc As String Dim sTemp As String ' Initialize the array For i = 0 To 255 iCount(i) = 0 Next i ' Assign document to a huge string lCharCount = ActiveDocument.Characters.Count sDoc = ActiveDocument.Range(0, lCharCount) ' Fill the array For i = 1 to Len(sDoc) j = Asc(Mid(sDoc, i, 1)) iCount(j) = iCount(j) + 1 Next ' Add document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLf ' Only output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
このバージョンのマクロは、ドキュメント全体を単一の文字列sDocに詰め込んでいることに注意してください。この文字列は、マクロによって非常に迅速に処理できます。 (635ページのドキュメントは私のシステムで処理するのに約30秒しかかかりませんでした。)このバージョンはより長いドキュメントで動作するように作られているため、より大きなカウントの可能性を反映するためにいくつかの変数タイプが変更されていることにも注意してください。
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(411)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ:
link文字頻度カウント。