Hallo Alex,
hier mal auf die Schnelle zusammengeschrieben und mit einem Beispieltext getestet.
Der Text wird in der aktuellen Tabelle in der Zelle "A1" erwartet.
Ab Zeile 3 werden dann die einzelnen Texte ausgegeben.
Ist nicht schön, aber funktioniert ganz gut. Die Trennungen können erweitert werden.
Diese werden einzeln am erkannten Satzende überprüft. Verschiedene Längen der
Trennungen spielen keine Rolle. Allerdings werden nur Trennungen mit einen PUNKT
am Ende gefunden.
Vielleicht reicht dir das so. Notfalls kannst du es als Beispiel für Erweiterungen nehmen.
Gruß
Ein TestGast
--- Makro ---
Option Explicit
Sub SätzeTrennen()
Dim WS As Worksheet
Dim TrennungErkannt As Boolean
Dim TextKomplett As String
Dim Zeichen As String
Dim Trennung As String
Dim Satz As String
Dim Zeile As Long
Dim Pos As Long
Dim PosBeginn As Long
Dim Idx As Long 'Index der Trennungen
Dim LTrennung As Long 'Länge der Trennung
Dim Trennungen As Variant
'Aktive Tabelle nutzen
Set WS = ActiveSheet
'Trennungen in Array
Trennungen = Array("etc.", "usw.", "ggf.")
'Text aus Zelle A1 der aktiven Tabelle
TextKomplett = WS.Range("A1")
'Beginn der Ausgabe in Zeile 3
Zeile = 3
PosBeginn = 1
For Pos = 1 To Len(TextKomplett)
Zeichen = Mid(TextKomplett, Pos, 1)
If Zeichen = "!" Or Zeichen = "?" Then
WS.Cells(Zeile, 1) = Mid(TextKomplett, PosBeginn, Pos - PosBeginn + 1)
PosBeginn = Pos + 2
Zeile = Zeile + 1
ElseIf Zeichen = "." Then
TrennungErkannt = False
For Idx = LBound(Trennungen) To UBound(Trennungen)
Trennung = Trennungen(Idx)
LTrennung = Len(Trennung)
Satz = Left(TextKomplett, Pos)
'Prüfung ob die Trennung am Ende des erkannten Satzes steht
If Right(Satz, LTrennung) = Trennung Then
TrennungErkannt = True
Exit For
End If
Next Idx
'Keine der Trennungen wurde erkannt, Satz ist beendet
If TrennungErkannt = False Then
WS.Cells(Zeile, 1) = Mid(TextKomplett, PosBeginn, Pos - PosBeginn + 1)
PosBeginn = Pos + 2
Zeile = Zeile + 1
End If
End If
Next Pos
Set WS = Nothing
End Sub
|