Clever-Excel-Forum

Normale Version: Konvertierung eines spaltensortierten Exports zu sinnvoller Tabelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich habe folgendes Problem, bei dem ich nicht genau weiß, wonach ich suchen muss, um eine Lösung zu finden. Ich hoffe, dass ihr mir helfen könnt.

Ich habe einen Datenexport, der folgendermaßen aussieht:  externer Link entfernt

Ich hätte nun gerne eine Tabelle, bei denen die ganzen Daten in einer Zeile hinter dem jeweiligen Artikel und dessen Namen stehen. Die Anzahl ist eigentlich erstmal irrelevant.
In etwa so: externer Link entfernt

Gibt es da eine einfache Möglichkeit oder wisst ihr, wonach ich für eine Lösung suchen muss?

Beste Grüße!

*Edit: Bilder wurde nicht angezeigt. Habe sie nun als Link hinzugefügt.
Bei dem Stand des Beitrags, meine allgemeine Antwort
Powerquery
Moin,

wenn Du Bilder hochlädst, musst Du sie erst mit "Attachment hinzufügen" hochladen und anschließend noch mit dem anderen Button "in den Beitrag einfügen"


Ansonsten so:

Arbeitsblatt mit dem Namen 'Tabelle2'
ABCDE
1Artikel1Datum1Name1Datum2Name2
2Datum1Name1
3Datum2Name2

ZelleFormel
B1=INDEX($A:$B;1+ABRUNDEN(SPALTE(A1)/2;)+REST(SPALTE(A1);2);1+REST(SPALTE(B1);2))
C1=INDEX($A:$B;1+ABRUNDEN(SPALTE(B1)/2;)+REST(SPALTE(B1);2);1+REST(SPALTE(C1);2))
D1=INDEX($A:$B;1+ABRUNDEN(SPALTE(C1)/2;)+REST(SPALTE(C1);2);1+REST(SPALTE(D1);2))
E1=INDEX($A:$B;1+ABRUNDEN(SPALTE(D1)/2;)+REST(SPALTE(D1);2);1+REST(SPALTE(E1);2))
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Vielen Dank schonmal für die rasche Antwort.

Ich habe versucht, die Formel nachzuvollziehen. Allerdings bei einem kurzen Test besteht das Problem. dass diese Formeln alle Daten in eine Zeile schreibt. 
Ich hätte ja aber gerne, dass sobald ein neuer Artikel anfängt, dieser auch wieder in einer neuen Zeile steht und nur die Daten und Namen dieses Artikels in einer Zeile auftauchen.

Übersehe ich etwas?
Hallo,

zeig dein Vorhaben doch bitte anhand eines Tabellenausschnitts oder einer kleinen Datei; jeweils mit händisch eingetragenem Wunschergebnis. Bitte keine Bilder! https://www.clever-excel-forum.de/forum-11.html
Hallöchen,

im Prinzip so. Du musst dann praktisch noch die Zeile berücksichtigen wo die Formel steht - vergleich die alte und diese Variante mal, dann siehst Du es.
Die Formel ziehst Du immer so weit nach rechts wie nötig. Wenn automatisch keine weiteren Ergebnisse kommen sollen, könnte man das auch noch verarbeiten. Oder man löst das mit VBA ...
Ich hab die auch nur in B1 eingegeben und dann nach B5 kopiert …

Arbeitsblatt mit dem Namen 'Tabelle2'
ABCDE
1Artikel1Datum1Name1Datum2Name2
2Datum1Name1
3Datum2Name2
4
5Artikel2Datum3Name3Datum4Name4
6Datum3Name3
7Datum4Name4

ZelleFormel
B1=INDEX($A:$B;1+ZEILE(A1)-1+ABRUNDEN(SPALTE(A1)/2;)+REST(SPALTE(A1);2);1+REST(SPALTE(B1);2))
B5=INDEX($A:$B;1+ZEILE(A5)-1+ABRUNDEN(SPALTE(A5)/2;)+REST(SPALTE(A5);2);1+REST(SPALTE(B5);2))
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Die Sache bzgl händisch machen ist unmöglich, da es sich um 3.000-4.000 Artikel handelt zwischen 0-30 Daten(Bestellungen).
Ich vermute, dass man dann mit einem VBA Skript vorgehen müssten. Da ich aber erst die kleinen Standards beherrsche, dachte ich, dass es vielleicht schon eine Lösung in Excel gibt.

Also hier nochmal das gesamte Problem mit Datei.

Tabelle 1 zeigt die Beschaffenheit des Exports. Und wie bereits gesagt, handelt es sich um unzählige Artikel. Mein wunsch wäre auf Tabelle 2 gezeigt, wo alle Lieferungen (Datum und Menge) eines Artikels je Zeile aufgeführt sind.

Ich hoffe es gibt eine schnelle Lösung für die Konvertierung.

Beste Grüße
Hallöchen,

hier mal ein Zwischenschritt, eventuell reicht das schon. Der trägt Dir die Formeln automatisch ein. Als nächstes kann man dann z.B. nach Spalte C filtern, dadurch die leeren ausblenden und die gefüllten Zeilen kopieren und mit Inhalte einfügen - Werte (Taste 123) an andere Stelle einfügen.

Alternativ könnte ich auch gleich im Code die Formeln durch Werte ersetzen. Dann könntest Du auch gleich andersrum filtern und die leeren anzeigen und diese Zeilen dann löschen.

Hier mal eine Variante, die schon die Formeln durch die Ergebnisse ersetzt. Das Löschen ist noch auskommentiert.
Statt dem Löschen kannst Du, wie gesagt, die Daten auch an andere Stelle kopieren. Ich weiß nur nicht, ob Du das andere Blatt nur wegen der Veranschaulichung hast oder die Daten wirklich auf ein anderes Blatt sollen...

Code:
Option Explicit

Sub SenkWaag()
'Zelle A2 aktivieren
Cells(2, 1).Activate
'Ausf?hren solange in der aktiven Zellle was steht
Do While ActiveCell.Value <> ""
  'Im Bereich neben der aktiven Zelle
  With ActiveCell.Offset(, 1).Resize(1, (ActiveCell.End(xlDown).Row - ActiveCell.Row) * 2)
     'Formel eintragen
     .FormulaR1C1 = _
        "=INDEX(C1:C2,1+ROW(RC[-1])-1+ROUNDDOWN(COLUMN(RC[-1])/2,)+MOD(COLUMN(RC[-1]),2),1+MOD(COLUMN(RC),2))"
     'Formel durch Ergebnisse ersetzen
     .Value = .Value
  'Ende Im Bereich neben der aktiven Zelle
  End With
  'Weiter zum Ende und dann zum n?chsten Anfang
  '--> setzt min eine Leerzeile zwischen den Bereichen voraus
  ActiveCell.End(xlDown).Activate
  ActiveCell.End(xlDown).Activate
'Ende Ausf?hren solange in der aktiven Zellle was steht
Loop
'Loeschen aufrufen
'Call loeschen
'A2 aktivieren
Cells(2, 1).Activate
End Sub

Sub Loeschen()
'Mit der Spalte C
With Columns("C:C")
  'Autofilter anschalten
  .AutoFilter
  'leere anzeigen
  .AutoFilter Field:=1, Criteria1:="="
  'gefilterte Zeilen loeschen (und ein paar mehr)
  .Range("A2:A20000").Delete Shift:=xlUp
  'Autofilter ausschalten
  .AutoFilter
'Ende Mit der Spalte C
End With
End Sub
Das andere Blatt war nur wegen der Veranschaulichung. 

Das passt so, dass die Daten umgetragen werden und im gleichen Blatt bleiben.

Das Problem scheint momentan allerdings zu sein, dass wenn keine Lieferung eines Artikel vorgenommen wurde (100008) funktioniert das Skript nicht mehr. Ab da kommt es durcheinander und scheint die Formel hinter das letzte Datum einer Lieferung zu kopieren....

Bild des Problems im Anhang.

Vielen Dank schonmal für die Mühe!


*EDIT: Gibt es eine Möglichkeit, entweder das neueste Datum (die letzte Zeile unter jedem Artikel) als erste Spalte zu haben, sodass man die neuesten Lieferungen sofort sieht?
Oder ist es leichter nacher alle Spalten zu "vertauschen"
Hallöchen,

erst mal zum Thema keine Lieferung ein Ersatz für das Sub SenkWaag (ungetestet)

Code:
Sub SenkWaag()
'Zelle A2 aktivieren
Cells(2, 1).Activate
'Ausf?hren solange in der aktiven Zellle was steht
Do While ActiveCell.Value <> ""
  'Wenn in der Folgezelle auch was steht, dann
  If ActiveCell.Offset(1, 0).Value <> "" Then
    'Im Bereich neben der aktiven Zelle
    With ActiveCell.Offset(, 1).Resize(1, (ActiveCell.End(xlDown).Row - ActiveCell.Row) * 2)
       'Formel eintragen
       .FormulaR1C1 = _
          "=INDEX(C1:C2,1+ROW(RC[-1])-1+ROUNDDOWN(COLUMN(RC[-1])/2,)+MOD(COLUMN(RC[-1]),2),1+MOD(COLUMN(RC),2))"
       'Formel durch Ergebnisse ersetzen
       .Value = .Value
    'Ende Im Bereich neben der aktiven Zelle
    End With
  'Ende Wenn in der Folgezelle auch was steht, dann
  End If
  'Weiter zum Ende und dann zum n?chsten Anfang
  '--> setzt min eine Leerzeile zwischen den Bereichen voraus
  ActiveCell.End(xlDown).Activate
  ActiveCell.End(xlDown).Activate
'Ende Ausf?hren solange in der aktiven Zellle was steht
Loop
'Loeschen aufrufen
'Call loeschen
'A2 aktivieren
Cells(2, 1).Activate
End Sub
Seiten: 1 2