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-Key: 21275054328

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

Printed on: April 27, 2024 at 08:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Dec 13, 2023 at 06:23:52 (UTC)
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.
Member: em-pie
em-pie Dec 13, 2023 updated at 06:24:55 (UTC)
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.
Member: SarekHL
SarekHL Dec 13, 2023 at 06:34:44 (UTC)
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...
Member: SarekHL
SarekHL Dec 13, 2023 at 06:37:57 (UTC)
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.
Mitglied: 8030021182
Solution 8030021182 Dec 13, 2023 updated at 08:11:24 (UTC)
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
Member: SarekHL
SarekHL Dec 13, 2023 at 07:32:05 (UTC)
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.
Mitglied: 8030021182
8030021182 Dec 13, 2023 updated at 07:41:58 (UTC)
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 ...
Member: kpunkt
kpunkt Dec 13, 2023 at 07:54:27 (UTC)
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.
Mitglied: 8030021182
Solution 8030021182 Dec 13, 2023 updated at 09:27:28 (UTC)
Goto Top
So zurück im Office konnte ich es testen. Fehler im Code ist oben behoben.

Vor Makro

screenshot

Nach Makro

screenshot
Member: ukulele-7
ukulele-7 Dec 13, 2023 at 08:54:10 (UTC)
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?
Member: SarekHL
SarekHL Dec 13, 2023 at 12:30:47 (UTC)
Goto Top
Zitat von @8030021182:

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

Traumhaft, vielen Dank!
Member: SarekHL
SarekHL Dec 13, 2023 at 12:35:01 (UTC)
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.