Scott sucht nach einer Möglichkeit, eine „Häufigkeitszählung“ aller Zeichen in einem Dokument zu erhalten. Er möchte wissen, wie oft jedes Zeichen, die ASCII-Codes 9 bis 255, vorkommt. Es ist möglich, mithilfe von Suchen und Ersetzen die Anzahl der einzelnen Zeichen zu bestimmen (suchen Sie einfach nach einem fraglichen Zeichen und ersetzen Sie es dann durch sich selbst). Ein solcher Ansatz wäre jedoch bestenfalls mühsam, wenn Sie ihn für 247 ausführen müssten verschiedene Zeichencodes, um die gewünschten Informationen zu erhalten.

Eine solche Aufgabe muss mit einem Makro erledigt werden, es gibt jedoch mehrere Möglichkeiten, sich ihr zu nähern. Eine Möglichkeit besteht darin, ein schnelles Makro zu schreiben, das jedes Mitglied der Zeichensammlung durchläuft, jedes untersucht und dieses Zeichen einem von mehreren Zählern zuweist.

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

Das Makro verwendet das iCount-Array, um die Anzahl der einzelnen Zeichencodes zu akkumulieren. Anschließend wird ein neues Dokument erstellt, um die Ergebnisse auszugeben. (Das Ergebnisdokument kann beliebig formatiert werden.)

Dieser Ansatz eignet sich gut für relativ kurze Dokumente mit bis zu wenigen Seiten. Wenn das Dokument länger wird, wird das Makro langsamer. Warum?

Weil die Verwendung der Characters-Sammlung aus irgendeinem Grund viel Zeit in Anspruch nimmt. Wenn das Makro für Ihre Dokumente zu langsam ausgeführt wird, sollten Sie es ein wenig ändern, damit es nur mit Zeichenfolgen funktioniert.

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

Beachten Sie, dass diese Version des Makros das gesamte Dokument in eine einzige Zeichenfolge, sDoc, stopft. Diese Zeichenfolge kann dann vom Makro sehr, sehr schnell verarbeitet werden. (Die Verarbeitung eines 635-seitigen Dokuments auf meinem System dauerte nur etwa 30 Sekunden.) Da diese Version für längere Dokumente geeignet ist, sollten Sie auch beachten, dass einige der Variablentypen geändert wurden, um die Wahrscheinlichkeit größerer Zählungen widerzuspiegeln.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (411) gilt für Microsoft Word 97, 2000, 2002 und 2003. Sie finden eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Word (Word 2007) und später) hier: