Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Sätze trennen

Forumthread: Sätze trennen

Sätze trennen
09.12.2024 11:39:39
Anton100
Hallo zusammen,
ich habe in einer Zelle (in Spalte A) einen Text mit mehreren Sätzen, die alle am Ende einen Punkt und anschließend ein Leerzeichen haben. Nun möchte ich die Sätze voneinender trennen und in Spalte C in separaten Zellen untereinander wieder auflisten. Irgendwie breche ich mir die Ohren.
Hat einer von Euch eine einfache Lösung?
Problematisch wird es bei Abkürzungen wie z.B., usw., bzw., i.d.R. und und und
Diese sollten idealerweise ignoriert werden.

Danke ich freue mich auf euren Input
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sätze trennen
09.12.2024 11:48:56
Oberschlumpf
Moin,

mit VBA gut kennst du bestimmt den VBA-Befehl Split(), oder?
Ich wollt gerad etwas programmieren, stelle aber fest, dass das ohne eine Bsp-Datei von dir mit genügend und richtigen Bsp-Daten in den richtigen Zellen ne schwierigere Aufgabe werden kann, als eben mit einer Datei von dir.

Ciao erst mal
Thorsten

Anzeige
AW: Sätze trennen
09.12.2024 12:22:03
MCO
Moin Anton!

Wäre eine Funktion OK?

Formel dazu lautet "=Texttrenner()"

Der code dazu
Function texttrenner(Vorgabe As String) As Variant


Dim x As Long
Dim i As Long
Dim replace_arr As Variant
Dim replacement_arr As Variant

replace_arr = Array("z.B. ", "i.d.R. ") 'ersetze
replacement_arr = Array("z.B._", "i.d.R._") 'durch

For i = 0 To UBound(replace_arr)
Vorgabe = Replace(Vorgabe, replace_arr(i), replacement_arr(i))
Next i

splitwerte = WorksheetFunction.Transpose(Split(Vorgabe, ". "))

For x = 1 To UBound(splitwerte)
For i = 0 To UBound(replace_arr)
splitwerte(x, 1) = Replace(splitwerte(x, 1), replacement_arr(i), replace_arr(i))
Next i
Next x

texttrenner = splitwerte
End Function


Einfacher geht es wirklich nicht mehr.

Fleißarbeit von Deiner Seite: Alle Abkürzungen, die es zu ignorieren gilt, müssen in beiden Arrays auftauchen. dabei ist es egal, welches Zusatzzeichen das Leerzeichen ersetzt, Hauptsache ist, dass die Begriffe im Array an gleicher Position stehen.

Viel Erfolg!
Gruß, MCO
Anzeige
AW: Sätze trennen
09.12.2024 11:54:18
{Boris}
Hi,

mit ein bisschen Vorarbeit könnte man alle nicht zu trennenden "Punkt Leerzeichen" erst einmal wegwechseln in dieser Art (in A1 steht der Ausgangstext):

=WECHSELN(WECHSELN(A1;"z.B. ";"z.B.#");"i.d.R. ";"i.d.R#"))

Die # steht dabei für ein Zeichen, das sonst im Text nicht vorkommt und ersetzt temporär das Leerzeichen. Das Wechselspielchen musst Du entsprechend noch erweitern.

Steht diese WECHSEL-Formel in A2, dann trennst Du anschließend mit:

=MTRANS(WECHSELN(TEXTTEILEN(A2;". ");"#";" "))

VG, Boris
Anzeige
AW: Sätze trennen
09.12.2024 13:01:05
Anton100
Hallo zusammen,

vielen vielen Dank für die Hilfe. Sorry für das zweimal einstellen, war doof, ich entschuldige mich.
Ich habe mal eine Beispieldatei angehängt, mit beiden Lösungen.

Ein kleines Problem bleibt noch, es sind mehrere Zellen die untereinander und nacheinander mit solchen Ketten auftauchen. Super wäre, wenn zu euren Lösungen entsprechende Zeilen eingefügt würden und dann der neue Kettensatz kommt und umgewandelt würde.

Habe Ihr hierzu auch eine Idee?
Ich habe mal eine Beispieldatei angehängt.


https://www.herber.de/bbs/user/174190.xlsm
Anzeige
AW: Sätze trennen
09.12.2024 13:15:42
{Boris}
Hi,

Du kannst auch erstmal MTRANS weglassen - dann werden die Sätze auf einzelne Spalten verteilt. Diese kannst Du dann - z.B. in einem anderen Tabellenblatt - mit MTRANS wieder untereinander bringen.

Am Beispiel von E7 - dort steht jetzt:

=WECHSELN(TEXTTEILEN(D7;". ");"#";" ")&"."

Und in einem neuen Tabellenblatt dann z.B. in A1:

=MTRANS(Tabelle1!E7#)

VG, Boris
Anzeige
AW: Sätze trennen
09.12.2024 14:04:03
daniel
Hi
in dem Fall würde ich es nicht mehr per Funktion lösen, sondern als Makro, welches du auf die Textspalte anwendest.
die Originalspalte könntest du dann danach löschen.

hier mal mein Codevorschlag.
die Texte stehen in Tabelle1 Spalte A.
die Abkürzungen, nach denen nicht getrennt werden soll, müssen im Tabellenblatt "Abk" in Spalte A untereinander gelistet werden.
das Makro tauscht dann diese Abkürzungen im originaltext aus und verändert dabei den Punkt, so dass dieser bei der Satztrennung hinterher nicht mehr stört.

Sub TextTeilen()

Dim c As Range
Dim txt As String
Dim arr
With Sheets("Tabelle1")
For Each c In Sheets("Abk").Columns(1).SpecialCells(xlCellTypeConstants, 2)
.Columns(1).Replace c.Value, Replace(c.Value, ".", "·"), xlPart
Next
.Columns(1).Replace ". ", ".µ", xlPart

.Columns(2).ClearContents
For Each c In .Columns(1).SpecialCells(xlCellTypeConstants, 2)
arr = Split(c.Value, "µ")
.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Resize(UBound(arr) + 1).Value = WorksheetFunction.Transpose(arr)
Next
.Range("A:B").Replace "·", ".", xlPart
.Range("A:A").Replace "µ", " ", xlPart
End With


End Sub


der mittige Punkt ist das Zeichen mit dem ASCII-Code 0183.
auch das µ sollte im Text nicht vorkommen, da ich es als Trennzeichen einfüge, damit die Punkte am Satzende auch in der getrennten Version erhalten bleiben.

Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige