ak-david
Goto Top

Excel - Zelleninhalte auf zwei Spalten verteilen und je Wert neue Zeile anlegen, Wert aus A beibehalten

Hallo VBA-Künstler

Ich komm mit Excel-Bordmittel nicht weiter und müsste wohl auf ein VBA-Skript oder so setzen. Nur verstehe ich davon zuwenig. Mit der Aufzeichnungs-Sache hab ich schon ein paar sachen hin gekriegt, dass die Tabelle nun so aussieht:
ursprung

Aber nun müssen die einzelnen Einträge in Spalte B (B enthält alle Gruppen mit dazugehörigem Recht, Jede Gruppe ist mittels | getrennt und jedes Recht von der Gruppe mit ; getrennt. B kann auch leer sein) auf einzelne Zeilen verteilt werden. Dabei muss der Wert aus Spalte A erhalten bleiben.

D.h. am Ende muss je Gruppe eine neue Zeile angelegt werden, wobei Spalte A dann der Pfad, Spalte B die Gruppe und Spalte C das dazugehörige Recht enthält.

Am Ende in etwa so:


Angehängt noch eine Beispieldatei. Die definitive Datei enthält rund 1000 Zeilen, wobei diese Variabel sind, mal mehr, mal weniger.
Edit: sorry, scheinbar kann ich nur Bilder hochladen...

Danke für eure Hilfe.
ergebnis

Content-Key: 548700

Url: https://administrator.de/contentid/548700

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: 142970
142970 18.02.2020 aktualisiert um 13:07:31 Uhr
Goto Top
Quelldaten auf Blatt 1, Ergebnis landet dann auch Blatt 2
Sub SplitteZellen()
    With Sheets(1)
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            Set rngOut = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)  
            cell.Copy Destination:=rngOut
            If cell.Offset(0, 1).Value <> "" Then  
                arrGroups = Split(cell.Offset(0, 1).Value, "|", -1, 1)  
                For i = 0 To UBound(arrGroups)
                    rngOut.Offset(0, (i * 2) + 1).Resize(1, 2).Value = Split(arrGroups(i), ";", 2, 1)  
                Next
            End If
        Next
    End With
End Sub
Mitglied: AK-David
AK-David 18.02.2020 aktualisiert um 13:14:23 Uhr
Goto Top
Hallo soccer

Danke, aber das gibt dann das selbe Ergebnis, wie ich mit "Text in Spalten" auch schon hatte. Jetzt sind die Gruppen aus Spalte B aufgesplitet und in einzelne Spalten verteilt:
ergebnis_soccer1

Die aufgesplitteten Daten müssen aber Zeilenweise angeordnet werden, während die Zeile der erste Spalte jeweils erhalten bleibt, also so sollte es dann aussehen:
ergebnis_soccer1_soll

hab das jetzt mal manuell für die ersten beiden Zeilen gemacht...
Mitglied: 142970
Lösung 142970 18.02.2020 aktualisiert um 13:28:34 Uhr
Goto Top
Ach so dann hab ich das falsch verstanden, aber kein Problem
Sub SplitteZellen()
    With Sheets(1)
        Set rngNext = Sheets(2).Range("A2")  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            rngNext.Value = cell.Value
            If cell.Offset(0, 1).Value <> "" Then  
                arrGroups = Split(cell.Offset(0, 1).Value, "|", -1, 1)  
                For i = 0 To UBound(arrGroups)
                    rngNext.Value = cell.Value
                    rngNext.Offset(0, 1).Resize(1, 2).Value = Split(arrGroups(i), ";", 2, 1)  
                    Set rngNext = rngNext.Offset(1, 0)
                Next
            Else
                Set rngNext = rngNext.Offset(1, 0)
            End If
        Next
    End With
End Sub
Mitglied: AK-David
AK-David 18.02.2020 um 13:46:39 Uhr
Goto Top
Soccer, Vielen Dank...

Unglaublich. Seit heute morgen Sitz ich da dran und probiere diverse Formeln aus und auch VBA sachen via Google, welche aber nicht so ganz funktionierten. Und am ende sind es dann so wenige Zeilen. die es braucht.

1000-Dank.