@ > Home > Inhalt > Stringaufteilungsformel für variable Teillängen Excel 97+

Aufgabe

Ein String soll durch Formeln, nicht durch einen Aufteilungs- oder Import-Assistenten, auf nebenstehende Zellen B2:F2 aufgeteilt werden:

A2: 2,3#30000#Meier#31.3.2008#5003,67#

Lösung (Klaus "Perry" Pago vom 2007.06.15):

B2:F2: =TEIL("#"&$A2;
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(A2)))+1;
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(B2)))-
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(A2)))-1)

- ist keine Matrixformel
- ist zusammenhängend in eine Excel-Zelle einzufügen
- ist nach rechts bis F2 zu kopieren

WECHSELN ist die einzige Textfunktion (bis vor xl2007), die den Parameter "n-tes Auftreten" aufweist. Hier wird diese Funktionalität, die man für die Funktion FINDEN gern direkt hätte, in die Formel mit wenig Aufwand eingebracht.

Falls alle Einträge Zahl oder Datum sind (also ohne "Meier"), wird gleich in Zahlen gewandelt, wenn ein -- (Doppel-Minus) vorangestellt wird. Ein Datum wird dann zu einer Datum-Seriennummer, die wieder als Datum formatiert werden kann.

Eine Fehlerbehandlung für Fälle, bei denen die Anzahl der Teil-Strings variabel ist (keine Fehlermeldungen):

B2:F2: =WENN(SPALTE(A2)<=LÄNGE($A2)-LÄNGE(WECHSELN($A2;"#";""));TEIL("#"&$A2;
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(A2)))+1;
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(B2)))-
FINDEN("_";WECHSELN("#"&$A2;"#";"_";SPALTE(A2)))-1);"")

Sonstiges 1:

Bernd Plumhoff, 2007.06.16, bietet eine VBA-Funktion als Formel-Array an. Dieses Array ist nicht in B2, sondern in markierten B2:F2 mit STRG-UMSCH-EINGABE einzugeben: 

B2:F2: =wssplit(A1;"#")

Function wssplit(s As String, _
  Optional sdelimiter As String = ",", _
  Optional lcount As Long = -1) As Variant
    wssplit = Split(s, sdelimiter, lcount)
End Function

Sonstiges 2:

Die Formel für den Fall gleicher Feldlängen wie bei 3,4#MEI#600#723# lautet

B2: =TEIL($A2;SPALTE(B2)*4-7;3) 

wobei die Trennzeichen aufgrund der Information "gleiche Feldlängen" dann überflüssig sind.