sarekhl
Goto Top

Normalisierung einer Tabelle

Hallo zusammen,

ich beiße mir gerade die Zähne aus an dem Versuch eine Tabelle in Excel zu normalisieren. Vorhanden ist:

ashampoo_snap_mittwoch, 13. dezember 2023_06h57m27s_002_

In Spalte B stehen
  • teilweise keine Werte
  • teilweise ein Wert
  • teilweise mehrere (bis zu fünf), durch Kommata getrennte Werte

Ziel ist folgender Zustand:

ashampoo_snap_mittwoch, 13. dezember 2023_6h58m31s_001_mappe1 - excel


Hat jemand eine Idee, wie das umzusetzen ist?


Danke im Voraus,
Sarek \\//_

Content-ID: 21275054328

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

Ausgedruckt am: 23.11.2024 um 09:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 13.12.2023 um 07:23:52 Uhr
Goto Top
Moin,

Dein Ziel ist aber aus meiner Sicht auch keine normalisierte Tabelle.

Die wäre erreicht, wenn Text und Nummern in getrennten Feldern stehen.
em-pie
em-pie 13.12.2023 aktualisiert um 07:24:55 Uhr
Goto Top
Moin,

Als erstes würde ich es damit machen.
Danach, je nachdem wie viel zusätzlich Spalten über alle Zeilen entstehen „zu Fuß“ die Spalten C ff in Zeilen verschieben…


Edit:
Dein Ziel ist aber aus meiner Sicht auch keine normalisierte Tabelle.
Das kommt hinzu.
SarekHL
SarekHL 13.12.2023 um 07:34:44 Uhr
Goto Top
Dein Ziel ist aber aus meiner Sicht auch keine normalisierte Tabelle.

In dem Fall schon, da die Gruppen (Spalte A) und Rollen (Spalte B) genau so heißen. Also die Nummer ist Teil des Textes. Habe ich mir nicht ausgedacht...
SarekHL
SarekHL 13.12.2023 um 07:37:57 Uhr
Goto Top
Danach, je nachdem wie viel zusätzlich Spalten über alle Zeilen entstehen „zu Fuß“ die Spalten C ff in Zeilen verschieben…

Für "zu Fuß" ist die Tabelle zu groß face-sad Gerarade der Part macht mir ja Kopfzerbrechen, das Teilen hätte ich noch hinbekommen.
8030021182
Lösung 8030021182 13.12.2023 aktualisiert um 09:11:24 Uhr
Goto Top
Könntest du mit VBA machen, ungefähr so
Sub doit()
    Dim cell As Range, parts() As String, i As Integer
    With ActiveSheet
        Set cell = .Range("A1")  
        While cell.Value <> ""  
            parts = Split(cell.Offset(0, 1).Value, ",", -1, 1)  
            If UBound(parts) > 0 Then
                cell.Offset(0, 1).Value = Trim(parts(0))
                For i = 1 To UBound(parts)
                    cell.Offset(i, 0).EntireRow.Insert
                    cell.Offset(i, 0).Resize(1, 2).Value = Array(cell.Value, Trim(parts(i)))
                Next
                Set cell = cell.Offset(UBound(parts) + 1, 0)
            Else
                Set cell = cell.Offset(1, 0)
            End If
        Wend
    End With
End Sub
Gruß Katrin
SarekHL
SarekHL 13.12.2023 um 08:32:05 Uhr
Goto Top
Zitat von @8030021182:

Könntest du mit VBA machen, ungefähr so

Aber auch nur ungefähr ... Laufzeitfehler 1004: Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen.
8030021182
8030021182 13.12.2023 aktualisiert um 08:41:58 Uhr
Goto Top
Bin unterwegs konnte es nicht testen (deswegen ungefähr), mach ich später, habe oben noch Tippfehler korrigiert, vermutlich läuft es jetzt.
Kannst ja mit der Vorlage auch selbst etwas dran mitarbeiten, ist ja kein Full-Service hier ...
kpunkt
kpunkt 13.12.2023 um 08:54:27 Uhr
Goto Top
Mit Handarbeit kann das Excel auch ohne VBA.
Daten - Text in Spalten
Da kannst du die Werte in Spalte B aufteilen. Die Spalten dann einfach in die entsprechende Wunschspalte kopieren und abschließen wegen eventueller leerer Zellen sortieren.
8030021182
Lösung 8030021182 13.12.2023 aktualisiert um 10:27:28 Uhr
Goto Top
So zurück im Office konnte ich es testen. Fehler im Code ist oben behoben.

Vor Makro

screenshot

Nach Makro

screenshot
ukulele-7
ukulele-7 13.12.2023 um 09:54:10 Uhr
Goto Top
Alternativ: Einfach eine Formel machen die den Text bis zum ersten Trennzeichen in Spalte B ausgibt und eine die den Rest in Spalte C ausgibt. Das ganze für weitere Trennzeichen wiederholen. Alles als Daten in ein anderes Arbeitsblatt kopieren, alte Spalten weg schmeißen, sortieren und hintereinander hängen, fertig.

Liegen die Originaldaten eventuell schon irgendwo in einem DBMS?
SarekHL
SarekHL 13.12.2023 um 13:30:47 Uhr
Goto Top
Zitat von @8030021182:

So zurück im Office konnte ich es testen. Fehler im Code ist oben behoben.

Traumhaft, vielen Dank!
SarekHL
SarekHL 13.12.2023 um 13:35:01 Uhr
Goto Top
Zitat von @ukulele-7:

Alternativ: Einfach eine Formel machen die den Text bis zum ersten Trennzeichen in Spalte B ausgibt und eine die den Rest in Spalte C ausgibt. Das ganze für weitere Trennzeichen wiederholen.

Das ging noch - bzw. genau das macht ja auch die em-pie und //kpunkt" angesprochene Funktion. Am nächsten Schritt, aus diesen zusätzlichen Spalten dann automatisiert neue Zeilen zu machen, bei denen auch jeweils wieder der Inhalt aus Spalte A in der ersten Spalte steht, daran bin ich gescheitert.