5 Antworten
Community-Experte Microsoft Word Hallo, du kannst das folgende Makro verwenden, das du in ein neues, normales Modul einfügen musst (in Word Alt + F11 drücken, um den VBA-Editor zu öffnen, dann dort über Einfügen → Modul ein neues Modul erzeugen, und dann hier
das Makro reinkopieren). Hier der Code: Option Compare Text Sub TextUeberpruefen() Dim strWort, strNaechstesWort As String ActiveDocument.Range.Select 'Alle Satz- oder Sonderzeichen aus Text entfernen With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = "[,.-;:„“\!""§$%&/(\)=?{[\]}\\]" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = True .MatchSoundsLike = False .MatchAllWordForms = False .Execute Replace:=wdReplaceAll End With 'Wörter untereinander schreiben With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = " " .Replacement.Text = "^p" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False .Execute Replace:=wdReplaceAll End With 'Sortieren Selection.Sort ExcludeHeader:=False, FieldNumber:="Absätze", SortFieldType _ :=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, FieldNumber2 _ :="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _ wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _ wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _ wdSortSeparateByTabs, SortColumn:=False, CaseSensitive:=True, LanguageID _ :=wdGerman, SubFieldNumber:="Absätze", SubFieldNumber2:="Absätze", _ SubFieldNumber3:="Absätze" 'Mehrfach vorkommende Wörter löschen With Selection .EndKey Unit:=wdStory .TypeParagraph .HomeKey Unit:=wdStory, Extend:=wdExtend ActiveDocument.Bookmarks.Add Name:="BMBereich", Range:=.Range .Collapse VonVorne: .EndKey Unit:=wdLine, Extend:=wdExtend strWort = .Range.Text strWort = Left(strWort, Len(strWort) - 1) .Collapse .MoveDown Unit:=wdLine .EndKey Unit:=wdLine, Extend:=wdExtend strNaechstesWort = .Range.Text strNaechstesWort = Left(strNaechstesWort, Len(strNaechstesWort) - 1) If strWort = strNaechstesWort Then .Delete .MoveUp Unit:=wdLine Else If .InRange(ActiveDocument.Bookmarks("BMBereich").Range) Then strWort = .Range.Text Else .Delete ActiveDocument.Bookmarks("BMBereich").Delete Exit Sub End If End If GoTo VonVorne End With End SubDas Makro entfernt zunächst alle Satz- und Sonderzeichen aus deinem Text. Danach werden alle Wörter untereinander geschrieben und anschließend sortiert. Schließlich werden alle mehrfach vorkommenden Wörter entfernt, wobei Groß- und Kleinschreibung hierbei nicht beachtet wird. Wichtig: Je nach Umfang und Größe deines Dokuments, kann es sein, dass das Makro sehr lange braucht, weil es jede Zeile bzw. jedes Wort einzeln mit dem jeweils nächsten abgleichen muss, um gleiche Wörter zu löschen. Möglicherweise hängt sich Word dabei auch auf. Jedenfalls erfolgt die Verwendung des Makros vollkommen auf eigenes Risiko! Ich übernehme keinerlei Haftung für Schäden jedweder Art, die möglicherweise aus der Verwendung des Makros entstehen. Eine Rückmeldung wäre nett und melde dich bitte bei Fragen! Gruß, BerchGerch Woher ich das weiß:Eigene Erfahrung – Ich arbeite seit 25 Jahren nahezu täglich mit Word.
Ersetze die Leerzeichen durch Zeilenumbrüche. Dazu könntest du die „Suchen & Ersetzen“-Funktion verwenden. Zeilenumbrüche (bzw. eigentlich genauer: neue Absätze) erhält man bei Suchen und Ersetzen mit „^p“. Beim
Suchfeld also „ “ (ein Leerzeichen) eintragen und beim Ersetzen-Feld „^p“ eintragen. (ohne Anführungszeichen) Bzgl. der Löschung doppelt vorkommender Wörter fällt mir spontan keine optimale Möglichkeit ein. Persönlich würde ich evtl. die Zeilen einfach sortieren lassen und dann manuell schauen, welche Wörter doppelt vorkommen und diese Löschen. Bei einer größeren Datenmenge wäre das aber anstrengend und dauert evtl. auch länger. Bzw. würd ich selbst dafür wohl gar nicht Word verwenden,
sondern mir dafür ein kleines Python-Script basteln und den Text da reinschmeißen. Vermutlich kann man das mit VBA zufriedenstellend in Word lösen, aber damit kenne ich mich nicht aus.
Schalte zunächst die Anzeige der Steuerzeichen ein, damit Du Leerzeichen von weichen und harten Zeilenumbrüchen unterscheiden kannst. Und dann nutze die "Suchen-Ersetzen-Funktion", um Leerzeichen gegen feste Zeilenumbrüche auszutauschen. Schon hast Du alle Wörter untereinander. Kopiere den ganzen Text nun in die Tabellenfunktion. Danach müßte
https://praxistipps.chip.de/openoffice-calc-doppelte-eintraege-finden-und-entfernen_28350 helfen.
Es gibt eine ganz einfache Möglichkeit: du ersetzt alle Leerzeichen zwischen den Wörtern durch Absatz Endezeichen und dann hast du alle Wörter untereinander.
Community-Experte Computer Das einfachste wäre wohl, wenn du den rechten Seitenrand soweit nach links ziehst, dass dann jedesmal eine neue Zeile beginnt. Automatische Silbentrennung dann
ausschalten. Für alles andere dann per VBA. |