Split()
Die folgende Funktion splittet den String am Trenner und gibt - wenn vorhanden - das Element intWelcher zurück:
Function SplitString(strString, intWelcher, strTrenner)
Dim arrTemp
SplitString = ""
arrTemp = Split(strString, strTrenner)
If UBound(arrTemp) >= intWelcher - 1 Then SplitString = arrTemp(intWelcher - 1)
End Function
Eingesetzt wird sie so: MsgBox SplitString("abc;cde;890;321", 3, ";"). Oder als Formel in eine Zelle.
Array, implizite Schnittmenge, impliziter Schnittpunktoperator @
Ab Excel 365 ist es auch möglich, die aufgeteilte Zeichenfolge insgesamt ausgeben zu lassen. Für das Beispiel die folgende Funktion:
Function Stringteile(strString, strTrenner)
Dim arrTemp
arrTemp = Split(strString, strTrenner)
Stringteile = IIf(UBound(arrTemp) > 0, arrTemp, "")
End Function
In Zelle B1 steht der String Januar;Februar;März, in C1 steht die Formel =Stringteile(B1;";"). Die Monate werden durch die Funktion also am Semikolon gesplittet und die Funktion gibt das Ganze als Array zurück. Da es sich aber um drei Elemente handelt (eben die drei Monate), werden diese auf die Nachbarzellen ausgeweitet; die Zelle mit der Formel flie�t über.
Wird jedoch der implizite Schnittpunktoperator @ verwendet (also =@Stringteile(B1;";")), wird nur das erste Element des Arrays zurückgegeben, also der Januar.
In jedem Fall kann aus einer anderen Formel heraus Bezug auf eine Ergebniszelle genommen werden. Im Beispiel auch auf E1, wo das Element März steht.
Für sehr alte Excelversionen
Die hier dargestellte Funktion stellt eine Alternative zur Funktion Split() dar, die es in niedrigeren Excelversionen noch nicht gab. Alternativ kann die Funktion auch als Tabellenblattfunktion verwendet werden, wenn man Daten - Text in Spalten nicht verwenden kann.
An die Funktion wird übergeben, welcher String aufgeteilt werden soll (strString), der wievielte Eintrag zurückgegeben werden soll (intWelcher) und um welches Trennzeichen es sich handelt (strTrenner).
Function SemiTrenner(strString, intWelcher, strTrenner)
Dim intI As Integer
Dim intZaehler As Integer
Dim intBeginn As Integer, intEnde As Integer
intBeginn = 0
intEnde = 0
intZaehler = 1
If Right(strString, 1) <> strTrenner Then strString = strString & strTrenner
For intI = 1 To Len(strString) + 2
If Mid(strString, intI, 1) = strTrenner Then
If intZaehler = 1 And intWelcher = 1 Then
intBeginn = 1
intEnde = intI
Exit For
ElseIf intZaehler = intWelcher Then
intBeginn = intEnde + 1
intEnde = intI
Exit For
End If
intZaehler = intZaehler + 1
intEnde = intI
End If
Next
If intBeginn > 0 And intEnde > 0 Then SemiTrenner = Mid(strString, intBeginn, intEnde - intBeginn) Else SemiTrenner = ""
End Function
So könnte die Funktion wie folgt eingesetzt werden:
strString = "1;456;78,9bb;543;"
MsgBox SemiTrenner(strString, 3, ";")
Das Ergebnis wäre in diesem Fall 78,9bb.