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! :)
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):
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