Feldertrennung
#1
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!


Angehängte Dateien
.xlsx   201204_BSP.xlsx (Größe: 8,7 KB / Downloads: 9)
Top
#2
Hola,

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

Gruß,
steve1da
Top
#3
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.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#4
(04.12.2020, 12: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.
Top
#5
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
[-] Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:
  • sebi007
Top
#6
(04.12.2020, 16: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!
Top
#7
Also mit den Beispielen von dir klappte es.

Dann zeig mal Daten, wo es NICHT funktioniert hat.


LG
Top
#8
(07.12.2020, 17: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...
Top
#9
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???
Top
#10
(08.12.2020, 10: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.
Top


Gehe zu:


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