スコットは、ドキュメント内のすべての文字の「頻度カウント」を取得する方法を探しています。彼は、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)用のこのヒントのバージョンを見つけることができます。以降)ここ: