Clever-Excel-Forum

Normale Version: Feldertrennung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Servus zusammen,

ich stehe VBA-technisch leider komplett auf dem Schlauch.
Ich habe bei ca. 15.000 Zeilen in jeder Zelle eine Begründung mit Datum. Diese baut sich folgendermaßen auf (s. Dateianhang):

Begründung + ab TT.MM.JJJJ + (- TT.MM.JJJJ)
Der erste Teil ist immer so vorhanden, der Teil in Klammern nicht.

Ich würde nun gerne für den weiteren Gebrauch ein Makro erstellen, das die Informationen auf drei Felder aufteilt (s. Dateianhang):

Begründung,von,bis

D.h. den Teil bis zum "ab" in das Feld "Begründung". Das erste Datum in das Feld "von" und wenn vorhanden das zweite Datum in das Feld "bis".
Ich glaube, ich würde es durch Formeln mit einem workaround hinbekommen, aber ich bin makrotechnisch blank.

Ich hoffe, ihr könnt mir helfen und verbleibe

mit den besten Grüßen!
Hola,

und warum ein Makro wenn es mit 3 kleinen Formeln erledigt werden kann?

Gruß,
steve1da
B1[:D1]: =WECHSELN(GLÄTTEN(TEIL(WECHSELN(WECHSELN(WECHSELN(A1;" + ab";);" + (-";);" ";WIEDERHOLEN(" ";99));SPALTE(A1)*99-98;98));")";)

In C1 und D1 kannst Du ein -- voranstellen, damit es zu Zahl wird.
(04.12.2020, 11:31)steve1da schrieb: [ -> ]Hola,

und warum ein Makro wenn es mit 3 kleinen Formeln erledigt werden kann?

Gruß,
steve1da

Die Daten werden im täglichen Gebrauch immer wieder auf die ursprüngliche Weise angeliefert und ich habe das Gefühl, dass "Knöpfchen-Drücken" für die Kollegen praktikabler sein wird.
Hi

versuch es mal so..

Code:
Sub splitten()
    Dim LR As Integer, Arr1, Arr2, Arr3, i As Integer
   
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
    Arr1 = Application.Transpose(Cells(2, 1).Resize(LR - 1, 1))
   
    For i = LBound(Arr1) To UBound(Arr1)
        Arr2 = Split(Arr1(i), "ab ")
        Arr3 = Split(Arr2(1), " - ")
       
        Cells(i + 1, 2) = Arr2(0)
        Cells(i + 1, 3) = Arr3(0)
        If UBound(Arr3) > 0 Then Cells(i + 1, 4) = Arr3(1)

    Next
End Sub

LG UweD
(04.12.2020, 15:37)UweD schrieb: [ -> ]Hi

versuch es mal so..

Code:
Sub splitten()
    Dim LR As Integer, Arr1, Arr2, Arr3, i As Integer
   
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
    Arr1 = Application.Transpose(Cells(2, 1).Resize(LR - 1, 1))
   
    For i = LBound(Arr1) To UBound(Arr1)
        Arr2 = Split(Arr1(i), "ab ")
        Arr3 = Split(Arr2(1), " - ")
       
        Cells(i + 1, 2) = Arr2(0)
        Cells(i + 1, 3) = Arr3(0)
        If UBound(Arr3) > 0 Then Cells(i + 1, 4) = Arr3(1)

    Next
End Sub

LG UweD

Hi Uwe,

vielen Dank! Ich habe das jetzt auf meine Tabelle umgeschrieben und es tut genau das, was es soll.
Es kommt gelegentlich vor, dass Zellen nicht befüllt sind. Wie kann ich denn einbauen, dass es in diesem Fall einfach zur nächsten Zelle springt.

Nochmal herzlichen Dank!
Also mit den Beispielen von dir klappte es.

Dann zeig mal Daten, wo es NICHT funktioniert hat.


LG
(07.12.2020, 16:20)UweD schrieb: [ -> ]Also mit den Beispielen von dir klappte es.

Dann zeig mal Daten, wo es NICHT funktioniert hat.


LG

Wenn eine Zelle nicht befüllt ist, oder die darin befindlichen Daten nicht dem Usus entsprechen, bekomme ich einen Error "Index außerhalb des gültigen Bereichs". Ich habe versucht, den Code selbst umzuschreiben, sodass entsprechende Zelle übersprungen wird, komme aber nicht drauf...
Code:
Sub splitten()
    Dim LR As Integer, Arr1, Arr2, Arr3, i As Integer
   
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
    Arr1 = Application.Transpose(Cells(2, 1).Resize(LR - 1, 1))
   
    For i = LBound(Arr1) To UBound(Arr1)
        Arr2 = Split(Arr1(i), "ab ")
        If UBound(Arr2) > 0 Then
            Arr3 = Split(Arr2(1), " - ")
            Cells(i + 1, 2) = Arr2(0)
            Cells(i + 1, 3) = Arr3(0)
        End If
        If UBound(Arr3) > 0 Then Cells(i + 1, 4) = Arr3(1)

    Next
End Sub

so???
(08.12.2020, 09:22)UweD schrieb: [ -> ]
Code:
Sub splitten()
    Dim LR As Integer, Arr1, Arr2, Arr3, i As Integer
  
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
    Arr1 = Application.Transpose(Cells(2, 1).Resize(LR - 1, 1))
  
    For i = LBound(Arr1) To UBound(Arr1)
        Arr2 = Split(Arr1(i), "ab ")
        If UBound(Arr2) > 0 Then
            Arr3 = Split(Arr2(1), " - ")
            Cells(i + 1, 2) = Arr2(0)
            Cells(i + 1, 3) = Arr3(0)
        End If
        If UBound(Arr3) > 0 Then Cells(i + 1, 4) = Arr3(1)

    Next
End Sub

so???

Lieben Dank für Deine Mühe. Wenn die erste Zeile leer ist, wirft er mir in der letzten Zeile (If Ubound(Arr3) > 0 (...)) aus, dass die Typen unverträglich seien.
Seiten: 1 2