Wie oft kommt ein Wort im Text vor?

Hallo Leute,

ich muss in einem mächtigen Word-Dokument, dass ich wöchentlich bekomme, wissen, wie oft ein bestimmtes Wort vorkommt. Wie kann ich das VBA-mäßig (hab da leider keine Ahnung von) das Problem lösen?

Danke und beste Grüße
Bozi

Hallo,

ich muss in einem mächtigen Word-Dokument, dass ich
wöchentlich bekomme, wissen, wie oft ein bestimmtes Wort
vorkommt. Wie kann ich das VBA-mäßig (hab da leider keine
Ahnung von) das Problem lösen?

wie Du den Text in eine Variable bekommst habe ich auch keine Ahnung, mit VBA kenne ich mich nicht aus. Dabei wird Dich aber sicher die Hilfe unterstützen.

Das Zählen selbst könnte in VB6 etwa so aussehen:

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String
 Dim su As String
 Dim n As Long
 Dim po As Long
 txt = Text1.Text ' 0
 po = InStr(po, txt, su)
 If po 0 Then n = n + 1
 Wend
 Label1.Caption = n
End Sub

Die Befehle funktionieren in VBA alle, so weit ist das gleich.
Es gibt noch andere Wege, aber übersichtlich und leicht zu verstehen, ist für Dich wohl erst mal das Richtige.

Gruß, Rainer

Hallo,

zum Auslesen des Textes würde ich das Range-Objekt empfehlen.

den Text des ersten Absatzes erhält man z.B. so:
ActiveDocument.Paragraphs(1).Range.Text

Gruß
Katrin

Hallo Rainer,

warum nicht die Function Split verwenden?

MfG Alex

Hi Alex,

warum nicht die Function Split verwenden?

zwei Gründe.

1.) Für einen Anfänger undurchsichtig.
2.) Dann verbraucht der Text den dopppelten Speicher, je nach Größe …

Gruß Rainer

Grüezi bozi

ich muss in einem mächtigen Word-Dokument, dass ich
wöchentlich bekomme, wissen, wie oft ein bestimmtes Wort
vorkommt. Wie kann ich das VBA-mäßig (hab da leider keine
Ahnung von) das Problem lösen?

Du köntest die Anzahl Worte Zählen die das Dokument enthält, dann ersetzt Du deinen gesuchten Begriff mit ‚nichts‘ und zählst erneut die Anzahl Worte - die Differenz ist dann die Anzahl Vorkommen deines Begriffes.

Ev. kannst du hier ja mit dem Makro-Recorder bereits etwas anfangen?–

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi bozi

ich muss in einem mächtigen Word-Dokument, dass ich
wöchentlich bekomme, wissen, wie oft ein bestimmtes Wort
vorkommt. Wie kann ich das VBA-mäßig (hab da leider keine
Ahnung von) das Problem lösen?

Du köntest die Anzahl Worte Zählen die das Dokument enthält,
dann ersetzt Du deinen gesuchten Begriff mit ‚nichts‘ und
zählst erneut die Anzahl Worte - die Differenz ist dann die
Anzahl Vorkommen deines Begriffes.

Ich habe da mal was erdacht - anschliessend musst Du das Dokument ‚entsorgen‘, das Ganze also nur an einer Kopie der Daten laufen lassen:

Sub WordCount()
Dim lngWords As Long
 lngWords = ActiveDocument.Words.Count

 ActiveDocument.Content.Find.Execute \_
 FindText:="DeinWort", \_
 ReplaceWith:="", \_
 Replace:=wdReplaceAll

 MsgBox lngWords - ActiveDocument.Words.Count
End Sub


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -
1 Like

Hallo Rainer,

warum nicht die Function Split verwenden?

1.) Für einen Anfänger undurchsichtig.

du hast nach mir gerufen? *smile* Meine KollegInnen und ich finden dies da gar nicht SO schwer:

Sub Makro1()
’ leeres Dokument, =rand(199,100) einentern, ergibt 274 Seiten mit 1,2 MB Bytes Text
’ PS: wie kriegt man das hin dies mit Vba durchzuführen?
Dim a
a = Split(ActiveDocument.Range.Text, „Taxi“)
MsgBox UBound(a)
End Sub

2.) Dann verbraucht der Text den dopppelten Speicher, je nach
Größe …

Ist das so schlimm?
Wenn ich danach schreibe
a=""
ist der Platz doch wieder frei, oder sehe ich das falsch?

Wo nun genau ein Stackframe Bereich örtlich im PC ist weiß ich nu nicht, aber ich las:

„Toll 3 Byte gespart. Aber bei 512 Megabyte = 536.870.912 Byte Stackframe pro geöffneter Excelmappe spielen die 3 Byte nun wirklich keine große Rolle.“
(Ist heraugerissen aus einem Kommentar ob man Excelspalten als Byte oder Long deklarieren sollte in Vba)

Wenn dies nun für Word ähnlich ist, und ich meine 274 Seiten reine Textseiten hochrechne, so brauche ich 123 MB Platz für 27.400 Seiten im Document.
Wenns verdoppelt wird, habe ich halt 250 MB Platzverbrauch, aber nur kurzfristig.
Word hat also immer seinen Teil von 250 MB für sich und kann da machen was es will.

Wenn ich so im Wordbrett mitlese wie Word auf mehere Seiten und paar Bilder reagieren kann, wird ja wohl kein Mensch ein Dokument mit 27.000 in Word erstellen *denk*

Von daher weiß ich jetzt nicht weshalb die Verdopplung nicht gemacht werden sollte.

Gruß
Reinhard

Hallo Reinhard,

Wenns verdoppelt wird, habe ich halt 250 MB Platzverbrauch,
aber nur kurzfristig.

das meine ich. Min Notebook hat 256MB Arbeitsspeicher, das muss dann schon auslagern und schläft ein. :smile:

Gruß Rainer

Wenns verdoppelt wird, habe ich halt 250 MB Platzverbrauch,
aber nur kurzfristig.

das meine ich. Min Notebook hat 256MB Arbeitsspeicher, das
muss dann schon auslagern und schläft ein. :smile:

Hallo Rainer,
ich hab mal geschaut, ich weiß sowas nie auswendig, ich habe 512 MB, und wenn die Systeminfo nicht lügt, waren da eben nur noch 93 MB verfügbar, dann habe ich diese Worddatei entfernt ohne zu speichern, jetzt sind noch 97 MB verfügbar.

Dabei habe ich nur 5 Browserfenster, paar winzige Exceltestdateien und halt winamp an was von einem Radiosender die Musik abspielt.
Ist doch ein Witz daß dafür schon 400 MB Arbeitsspeicher weg sind.
MS aast ganz schön mit MB oder wie es genauer heißt MiBi rum.

Gruß
Reinhard

Hi Reinhard,

MS aast ganz schön mit MB oder wie es genauer heißt MiBi rum.

ja, deshalb versuche ich ja immer wenig im Speicher zu halten. Aber im Moment … ist ja eh kaputt und wartet auf bessere Zeiten.

Gruß Rainer

Hallo Bozi,

wenn du es nur ab und zu benötigst oder es nur mal informativ wissen möchtest (keine Auflistung) dann gehe einfach auf „Ersetzen“, gib in beiden Feldern das selbe Wort ein und drück auf „Alles ersetzen“. Danach zeigt er dir an „15 mal ersetzt“ oder so ähnlich. Schon hast du die Anzahl des Wortes.

LG