bei Stringmanipulationen nutze ich gerne REGEXP: [attachment=39869]
In neueren Excelversionen wird mit dynamischen Arrays gearbeitet. In deiner Version wirst du noch einen Bereich markieren müssen und dann die Formel eingeben und mit STRG+UMSCHALT+RETURN abschließen.
Hi zusammen, vielen Dank für die tollen Funktionen. Hatte gar nicht mehr auf dem Schirm, dass man eigene Funktionen definieren kann. Leider scheitere ich gerade noch daran das zu kombinieren mit der Funktionalität, die Zwenn schon mal in seiner Lösung drin hatte: Nämlich, dass ich automatisch (am besten via Button-Press) einen gegebenen, noch deutlich längeren String, durchschaue und alle Ergebnisse wie im Bsp. unter- und nebeneinander schreibe. Es fehlt also quasi noch eine Auslösefunktion (Button) und eine Schleife, die ständig prüft, den String dann reduziert und die erfolgreichen Funde in Zellen schreibt. VG
Hallo Case, Button erstellen, Funktion aufrufen und auch eine Schleife sind grundsätzlich klar. Ich scheitere aber gerade noch daran, den Gesamtstring sinnvoll zu "zerschneiden" und je Schleifendurchlauf nur das "Übrige" an die Funktion zu schicken. Vielleicht kannst du einen Blick drauf werfen. Anbei das Grundgerüst. VIELEN DANK! :)
das geht doch mit der UDF - egal wieviel Banken im String sind:
[attachment=39886]
Code:
Option Explicit Public Function fncBank(ByVal strTMP As String, Optional lngTMP As Long = 0, Optional lngZ As Long = 0) As Variant fncBank = IIf(lngZ = 0, Split(Split(strTMP, "<Bank>")(lngTMP + 1), "</Bank>")(0), Split(Split(strTMP, "<Bankleitzahl>")(lngTMP + 1), "</Bankleitzahl>")(0)) End Function
Als Formel dann in z. B. B5...
Code:
=WENNFEHLER(fncBank($B$2;SPALTE(A1)-1);"")
... und nach rechts ziehen.
Bzw. für die Bankleitzahl dann in B6...
Code:
=WENNFEHLER(fncBank($B$2;SPALTE(A1)-1;1);"")
... und auch nach rechts ziehen.
Wenn du es als Sub möchtest (in meinem Beispiel stehen die Strings ab A1 folgende):
[attachment=39887]
Code:
Option Explicit Public Sub Main() Dim lngLastRow As Long Dim lngCount As Long Dim lngTMP As Long Application.ScreenUpdating = False lngTMP = 1 With Tabelle1 For lngLastRow = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row If .Cells(lngLastRow, 1).Value Like "*<Bank>*" Then lngCount = .Evaluate("=SUM((LEN(A" & lngLastRow & ")-LEN(SUBSTITUTE(A" & lngLastRow & ",""</Bankleitzahl>"","""")))/LEN(""</Bankleitzahl>""))") For lngCount = 1 To lngCount .Cells(lngLastRow, lngTMP + 1).Value = Split(Split(.Cells(lngLastRow, 1).Value, "<Bank>")(lngCount), "</Bank>")(0) lngTMP = lngTMP + 1 .Cells(lngLastRow, lngTMP + 1).Value = Split(Split(.Cells(lngLastRow, 1).Value, "<Bankleitzahl>")(lngCount), "</Bankleitzahl>")(0) lngTMP = lngTMP + 1 Next lngCount End If lngTMP = 1 Next lngLastRow End With Application.ScreenUpdating = True End Sub
For j = 1 To UBound(sn) st = Split(Replace(Replace(Join(Filter(Split(sn(j, 1), "<"), "Bank"), ""), "Bank>", ""), "Bankleitzahl>", ""), "/") Tabelle1.Cells(j, 2).Resize(, UBound(st)) = st Next End Sub