Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fortgeschrittenes VBA: String "zerschneiden"
#11
Hallo, 19 

bei Stringmanipulationen nutze ich gerne REGEXP: 21

.xlsb   REGEXP_Bank_UND_Bankleitzahl_auslesen_auch_mehrere_CEF.xlsb (Größe: 26,12 KB / Downloads: 6)

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. Confused
________
Servus
Case
Antworten Top
#12
Und nun ein echtes, repräsentatives Beispiel.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#13
Hallo, 19 

bevor es wieder Schnappatmung gibt - das geht auch kürzer. Einen Kurzen mag ich aber eher im Glas. Dodgy

.xlsb   SPLIT_Bank_UND_Bankleitzahl_auslesen_auch_mehrere_CEF.xlsb (Größe: 14,5 KB / Downloads: 6)

Auch hier könnte man in der UDF ein Array bilden bzw. beide in eine Funktion packen. 21
________
Servus
Case
Antworten Top
#14
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
Antworten Top
#15
Hallo, 19 

schreibe doch einfach eine Sub und rufe darin die Funktion auf. Lege das auf einen Button und fertig. 21

Wenn du das nicht hinbekommst, dann lade eine aussagekräftige Beispieldatei hier hoch und ich schau mir das an. Dodgy
________
Servus
Case
Antworten Top
#16
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! :)


Angehängte Dateien
.xlsb   SPLIT_Bank_UND_Bankleitzahl_auslesen_auch_mehrere_CEF (2).xlsb (Größe: 18,02 KB / Downloads: 4)
Antworten Top
#17
Hallo, 19 
das geht doch mit der UDF - egal wieviel Banken im String sind: 21
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): 21
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
Jetzt sollte es eigentlich klar sein.
________
Servus
Case
Antworten Top
#18
{} bedeutet Formelarray! Folgende Formel ist ab xl2013 möglich. {B4:F7:}

=INDEX(GLÄTTEN(XMLFILTERN("<a><b>"&WECHSELN(WECHSELN(WECHSELN(B2;"<";" ");">";" ");" ";"</b><b>")&"</b></a>";"//b"));ZEILE(1:4)*20-{17.13.9.5.1})

Quellhinweis: shift-del spürte die geniale XMLFILTERN-(als-SPLIT)-Verwendung von rhockman auf.
Antworten Top
#19
Oder:

Code:
Sub M_snb()
  sn = Tabelle1.Cells(1).CurrentRegion
 
  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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste