Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Konvertierung eines spaltensortierten Exports zu sinnvoller Tabelle
#1
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.
Antworten Top
#2
Bei dem Stand des Beitrags, meine allgemeine Antwort
Powerquery
Antworten Top
#3
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


Angehängte Dateien Thumbnail(s)
   
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • forevershoxx
Antworten Top
#4
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?
Antworten Top
#5
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
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Antworten Top
#6
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
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


Angehängte Dateien
.xlsx   Beispiel.xlsx (Größe: 9,79 KB / Downloads: 10)
Antworten Top
#8
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
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"


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#10
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste