Excel - Daten aus einer Zeile in mehrere Zeilen aufteilen
Hallo,
Folgendes bekomme ich nicht gelöst:
Muss eine Excel-Tabelle in eine andere Form übertragen. Arbeite mit Excel 2k.
Die Urtabelle beinhaltet je Artikel alle Staffeln u. dazugehörige Preise in einer Zeile.
Die Anzahl der Staffeln ist unterschiedlich.
Das muss ich umwandeln in eine Tabelle in der jeweils Artikel u. nur eine Staffel mit dem
dazugehörige Preis steht und das separat in einer Zeile.
Da es sich um 600 Artikel handelt, suche ich eine Formel- oder und VBA-Lösung.
Zur Verdeutlichung, Beispiel:
Für Anregungen, Konzepte und Lösungen bin ich dankbar.
Gruß
Uwe
Folgendes bekomme ich nicht gelöst:
Muss eine Excel-Tabelle in eine andere Form übertragen. Arbeite mit Excel 2k.
Die Urtabelle beinhaltet je Artikel alle Staffeln u. dazugehörige Preise in einer Zeile.
Die Anzahl der Staffeln ist unterschiedlich.
Das muss ich umwandeln in eine Tabelle in der jeweils Artikel u. nur eine Staffel mit dem
dazugehörige Preis steht und das separat in einer Zeile.
Da es sich um 600 Artikel handelt, suche ich eine Formel- oder und VBA-Lösung.
Zur Verdeutlichung, Beispiel:
Für Anregungen, Konzepte und Lösungen bin ich dankbar.
Gruß
Uwe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 226206
Url: https://administrator.de/contentid/226206
Ausgedruckt am: 21.11.2024 um 13:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Uwe,
nach deiner Beispiel-Tabelle im Bild und bei 5 Staffeln kannst du es so mit VBA machen:
(Du musst natürlich für deine echte Tabelle die Start-Ausgabe-Zelle in Zeile 6 des Codes anpassen und eventuell die Start-Zelle der Artikelliste in Zeile 4.)
Hier auch ein Demo-Sheet dazu.
Grüße Uwe
nach deiner Beispiel-Tabelle im Bild und bei 5 Staffeln kannst du es so mit VBA machen:
(Du musst natürlich für deine echte Tabelle die Start-Ausgabe-Zelle in Zeile 6 des Codes anpassen und eventuell die Start-Zelle der Artikelliste in Zeile 4.)
Sub ListeGenerieren()
Dim sheet As Worksheet, rngOutCurrent As Range, rngInCurrent As Range, rngInStop As Range, rngInStart As Range
Set sheet = Worksheets("Tabelle1")
Set rngInStart = sheet.Range("A6")
Set rngInStop = rngInStart.End(xlDown)
Set rngOutCurrent = sheet.Range("A15")
Set rngInCurrent = rngInStart
For Each cell In sheet.Range(rngInStart, rngInStop)
For i = 1 To 10 Step 2
If rngInCurrent.Offset(0, i).Value <> "" Then
rngOutCurrent.Value = rngInCurrent.Value
rngOutCurrent.Offset(0, 1).Value = rngInCurrent.Offset(0, i).Value
rngOutCurrent.Offset(0, 2).Value = rngInCurrent.Offset(0, i + 1).Value
Set rngOutCurrent = rngOutCurrent.Offset(1, 0)
End If
Next
Set rngInCurrent = rngInCurrent.Offset(1, 0)
Next
End Sub
Hier auch ein Demo-Sheet dazu.
Grüße Uwe
kein Problem, hab's dir zusätzlich mit Kommentaren im Code versehen ...
(hab noch eine Variable entfernt die überflüssig war)
Die Liste wird nun in "Tabelle2" ab Zelle "A2" ausgegeben.
Jetzt kannste früher Feierabend machen
Grüße Uwe
(hab noch eine Variable entfernt die überflüssig war)
Die Liste wird nun in "Tabelle2" ab Zelle "A2" ausgegeben.
Sub ListeGenerieren()
Dim sheet As Worksheet, rngOutCurrent As Range, rngInStop As Range, rngInStart As Range
'Arbeitsblatt in dem die Artikel stehen
Set sheet = Worksheets("Tabelle1")
'Anfangszelle der Artikel setzen
Set rngInStart = sheet.Range("A6")
'Den letzen Artikel finden
Set rngInStop = rngInStart.End(xlDown)
'Ausgabe-Startzelle setzen
Set rngOutCurrent = Worksheets("Tabelle2").Range("A2")
'Für jeden Artikel im Eingabebereich...
For Each cell In sheet.Range(rngInStart, rngInStop)
' Für jede Staffel ...
For i = 3 To 19 Step 2
'Wenn die Menge der Staffel nicht leer ist dann ...
If cell.Offset(0, i).Value <> "" Then
'Artikelnamen schreiben
rngOutCurrent.Value = cell.Value
'Konstanten Wert 'Staffelpreis' schreiben
rngOutCurrent.Offset(0, 1).Value = "Staffelpreis"
'Menge schreiben
rngOutCurrent.Offset(0, 2).Value = cell.Offset(0, i).Value
'Preis schreiben
rngOutCurrent.Offset(0, 3).Value = cell.Offset(0, i + 1).Value
'Ausgabezeile um eine Zeile nach unten verschieben für den nächsten Eintrag
Set rngOutCurrent = rngOutCurrent.Offset(1, 0)
End If
Next
Next
End Sub
Grüße Uwe