Microsoft Excel

Herbers Excel/VBA-Archiv

Spalte in Zeile umwandeln mit referenz

Betrifft: Spalte in Zeile umwandeln mit referenz von: Tobi
Geschrieben am: 10.10.2020 15:25:22

Hallo zusammen,

Ich habe eine Exceltabelle welche die Auftragsnummer (wiederholt sich) in Spalte A und in Spalte B die bestellten Artikel enthält.

Ich suche nach einer Möglichkeit die Daten so anzuordnen das in Spalte A die Auftragsnummer steht und die Artikelnummer in den spalten rechts davon, so das jeder Auftrag nur noch eine Zeile hat

Ich habe eine Beispiel Datei mit 2 Blättern einmal den ist Zustand und einmal wie die Ausgabe aussehen soll.

https://www.herber.de/bbs/user/140781.xlsx

Transponieren funktioniert ja nicht das dann keine Zuordnung der Artikel mehr zum Auftrag vorhanden ist.

Betrifft: AW: Spalte in Zeile umwandeln mit referenz
von: Hajo_Zi
Geschrieben am: 10.10.2020 15:29:28

https://www.herber.de/excelformeln/pages/SVERWEIS_bei_mehrfach_vorkommendem_Suchkriterium.html

GrußformelHomepage

Betrifft: AW: verscheidene Lösungsvarianten möglich ...
von: neopa C
Geschrieben am: 10.10.2020 15:39:44

Hallo Tobi,

... außer VBA gibt es die Möglichkeit ohne Formeln mit der Funktion Daten abrufen und transformieren) und auch reine Formellösung. Hier gibt es wiederum verschieden Varianten teils in auch in Abhängigkeit von Deiner wirklich eingesetzten Excelversion´. In der angegebenen XL-Version bevorzuge ich folgende:

In A2:
=WENNFEHLER(INDEX(Tabelle1[Auftrag];AGGREGAT(15;6;(ZEILE(Tabelle1[Auftrag])-ZEILE(Tabelle1[#Kopfzeilen]))/(ZÄHLENWENN(A$1:A1;Tabelle1[Auftrag])=0);1));"")

und weit genug nach unten ziehend kopieren.
dann in B2:
=WENNFEHLER(INDEX(Tabelle1;AGGREGAT(15;6;(ZEILE(Tabelle1)-ZEILE(Tabelle1[#Kopfzeilen]))/(INDEX(Tabelle1;;1)=$A2);SPALTE(A1));2);"")

und weit genug nach unten und rechts ziehend kopieren.

Gruß Werner
.. , - ...

Betrifft: AW: Spalte in Zeile umwandeln mit referenz
von: Frank Svoboda
Geschrieben am: 10.10.2020 16:20:43

Hallo Tobi,

das folgende VBA kann das Umsortieren erledigen
 
Sub Umsortieren()
    Dim region As Range, zeile As Long, zeile1 As Long, zeileN As Long
    Dim auftrag As String, vorherauftrag As String, artikel As Long
    ' Arbeitsbereich bestimmen
    Set region = [A2].CurrentRegion
    zeile1 = region.Row
    zeileN = zeile1 + region.Rows.Count - 1
    ' Zu Beginn gibts keinen Vorher-Autrag
    vorherauftrag = ""
    ' Kopfzeile nicht beachten
    zeile = zeile1 + 1
    ' Schleife über alle Zeilen des Bereichs
    Do While zeile <= zeileN
        ' Daten holen
        auftrag = Cells(zeile, 1).Value
        artikel = Cells(zeile, 2).Value
        ' Wenn es der gleiche Auftrag wie vorher ist:
        If auftrag = vorherauftrag Then
            ' Letzte freie Zelle in der Zeile vorher ermitteln und Artikel dort speichern
            Cells(zeile - 1, 1).End(xlToRight).Offset(0, 1).Value = artikel
            ' Aktuelle Zeile löschen
            Rows(zeile).EntireRow.Delete
            ' Bereich um 1 verkleinern, weil Zeile gelöscht
            zeileN = zeileN - 1
        ' Sonst:
        Else
            ' Nächste Zeile
            zeile = zeile + 1
            ' Neuer Vorher-Auftrag
            vorherauftrag = auftrag
        End If
    Loop
End Sub

Die abwechselnden Hintergrundfarben berücksichtigt es allerding noch nicht.

Viele Grüße
Frank

Betrifft: AW: Spalte in Zeile umwandeln mit referenz
von: Tobi
Geschrieben am: 10.10.2020 17:07:33

Ihr seit genial. Vielen Dank!
Mit der Formel hat es nicht ganz geklappt. Excel hat sich aufgehängt. (die Originaldatei hatte 144k Zeilen.)

Mit dem VBA Code von Frank hat es super geklappt.

Betrifft: AW: Spalte in Zeile umwandeln mit referenz
von: Frank Svoboda
Geschrieben am: 10.10.2020 18:53:41

Prima Tobi,
mein Skript hat allerdings noch einen Haken: Wenn in einer Zeile gar kein Artikel angegeben ist, ordnet es falsch ein. Kann man aber durch einfügen eines if...then ändern. Wo man das einfügt, hängt davon ab, was in diesen Fällen passieren soll.
Viele Grüße
Frank