ich knobel seit längerem an einer Augabenstellung.
ich habe:
- 80 Zeilen (Kunden-Nr.)
- 140 Spalten (Artikel-Nr.)
- im Schnittpunkt die jeweilige Bedarfsmenge
Im Prinzip gibt mir die Ausgangs-Liste alle Werte, diese möchte ich in die Ziel-Liste umwandeln, sodass ich
80x die selbe Kd.-Nr. untereinander mit den jeweils 140 unterschiedlichen Artikel-Nr. aufliste und somit 11.200 Zeilen erhalte
Ich habe ein kleineres Beispiel angehängt.
diese Liste besteht aus
- 10 Kunde
- 4 Artikeln
= also 40 Zeilen Endergebnis
hat hier jemand für mich eine Lösung?
Besten Dank schon jetzt für eure Unterstützung und Mühe
Du beziehst Dich mit der Formel auf die Zielliste.
...
Coemms Vorschlag mit der Pivot ist hier zielführend und braucht nur ein Paar Klicks.
Hallo, jepp, das habe ich wohl, ich hatte mir nur die Datei angesehen... ... und dachte das man aus einer Ausgangsliste eine Zielliste erstellt... so mache ich das für gewöhnlich... ... aber wenn's so nicht gemeint war, auch gut...
Gruß Jörg
ich muss mich erst wieder ganz langsam heran robben. Also bitte ich um Nachsicht
"Wer immer tut, was er schon kann, bleibt immer das, was er schon ist." - Henry Ford
Sub mach()
Dim i As Long, j As Long, k As Long
Dim AListe As Range
Dim PaketA As Range
Dim PaketB As Range
Set AListe = Range("A3:D10")
Set PaketA = Range("F3:G6")
Set PaketB = Range("H3:I7")
Columns("R:U").Clear
j = 3
For i = 1 To AListe.Rows.Count
If AListe.Cells(i, 3) = "Paket A" Then
PaketA.Copy Cells(j, 20)
For k = 1 To PaketA.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketA.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketA.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketA.Rows.Count
Else
PaketB.Copy Cells(j, 20)
For k = 1 To PaketB.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketB.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketB.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketB.Rows.Count
End If
Next i
End Sub
Die Zielliste wird ab Zeile 3 (im Code: j = 3) und in die Spalten R-U (im Code werden diese gelöscht: Columns("R:U").Clear) erstellt
26.01.2016, 16:39 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2016, 17:38 von Aqui.)
Hallo Atilla,
besten Dank, habe ich getestet und es läuft.
Da ich nicht wirklich in VBA fit bin ... habe ich mir angeschaut was du gemacht hast und dann versucht ... es etwas anzupassen.
Aber leider falsch, da es nicht funktioniert.
Kann ich beliebige ELSE einbauen? Dachte ich wandel es ab das es passt .. :22: aber :69:
meine Datei dazu im Anhang.
Code:
Sub mach()
Dim i As Long, j As Long, k As Long
Dim AListe As Range
Dim PaketA As Range
Dim PaketB As Range
Dim PaketC As Range
Dim PaketD As Range
Set AListe = Range("A3:D72")
Set PaketA = Range("F3:G5")
Set PaketB = Range("H3:I6")
Set PaketC = Range("J3:K4")
Set PaketD = Range("L3:M3")
Columns("R:U").Clear
j = 3
For i = 1 To AListe.Rows.Count
If AListe.Cells(i, 3) = "Paket A" Then
PaketA.Copy Cells(j, 20)
For k = 1 To PaketA.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketA.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketA.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketA.Rows.Count
Else
PaketB.Copy Cells(j, 20)
For k = 1 To PaketB.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketB.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketB.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketB.Rows.Count
Else
PaketC.Copy Cells(j, 20)
For k = 1 To PaketC.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketC.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketC.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketC.Rows.Count
Else
PaketD.Copy Cells(j, 20)
For k = 1 To PaketD.Rows.Count
Cells(j + k - 1, 21) = AListe.Cells(i, 4).Value * PaketD.Cells(k, 2).Value
Next k
Range(Cells(j, 18), Cells(j + PaketD.Rows.Count - 1, 19)).Value = Range(AListe.Cells(i, 1), AListe.Cells(i, 2)).Value
j = j + PaketD.Rows.Count
End If
Next i
End Sub
vielleicht gibt es ja auch eine PowerPivot Möglichkeit?