Ich möchte alle Worte von einem großen Text untereinander haben. Wie mache ich das?

5 Antworten

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 Sub

Das 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

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.

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.

SarahZimmer285 
Fragesteller
 03.12.2019, 13:32

Das funktioniert nicht, die Seite wird kleiner, aber der Text bleibt in einer Zeile.

1
qugart  03.12.2019, 13:38
@SarahZimmer285

Dann machst du da etwas falsch, wenn die Ansicht verkleinert wird.

Aber auch Das Rand- oder Einzugsbereichverschieben wird nicht komplett funktionieren.

Wenns ein längerer Text sein soll, wirds wohl nur mit VBA machbar sein.

Ansnsten einfach Handarbeit.

1

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.

Limearts  03.12.2019, 12:58

Zumindest wenn man den Schritt mit Satzzeichen wiederholt. Dürfte tatsächlich einer der schnellsten Wege werden.

1
gutifragerno  03.12.2019, 12:59
@Limearts

Genau, das hatte ich vergessen, nachher alle Satzzeichen auf die gleiche Art und Weise entfernen lassen

1
SarahZimmer285 
Fragesteller
 03.12.2019, 13:29

Danke für die schnelle Antwort. Ich habe es mit Office 2010 getestet. allerdings akzeptiert er nicht die Umschaltung auf eine neue Zeile. Der Text wird dann zusammen geschrieben, als sei das ein Wort. Was meinst du genau mit "Absatz Endzeichen"? Umschalttaste? Entertaste?

1
gutifragerno  03.12.2019, 14:46
@SarahZimmer285

Du musst das Zeichen finden für den manuellen Zeilenumbruch, Ebenso das Zeichen für das Absatz Ende. Das ist leider in den neuen Office Versionen nicht mehr so einfach wie früher. Einfach mal im Handbuch nachschauen. Wenn man die Stelle hat, wo man die Zeichen findet, die man normalerweise nicht sieht, kann man sie eben suchen und ersetzen lassen. Du kannst in Office oben auch auf ein symbol klicken, dann werden dir diese verborgenen Formatierungszeichen angezeigt.

1