Hallo Philipp!
Habe mit den Bilder mal die verschiedenen Indexe angepasst. der Code liest jetzt die Artikelnamen (Spalte B) ab Zeile 7 und arbeitet mit denen. Bei der Produktzusammensetzung hattest du glaube ich max. 10 Spalten gehabt - soll das bleiben oder auch mehr. UNd dann bin ich mir beim EIn- und Ausgang nicht sicher. Du hattest mal geschrieben, dass dort die Anzahl drin steht. Die Spaltenüberschrift lautet aber Datum. Stehen da dann wirklich Zahlen (also die Anzahl) drin oder das Datum vom Zu- bzw. Abgang. Ich bin von der Anzahl ausgegangen und Summiere die Zellen. Falls aber nur ein Datum drin steht (wobei dann jedes Datum für einen Zu-/Abgang steht), müsstet wir das noch anpassen. Wäre nicht schlimm, müsste nur eine andere Funktion genutzt werden. Also hier jetzt der neue Code. Schöne Woche noch. VG
Option Explicit
Private Sub CommandButton1_Click()
Dim eins As Object
Dim zwei As Object
Dim drei As Object
Dim vier As Object
Dim ende1 As Long
Dim ende2 As Long
Dim ende3 As Long
Dim ende4 As Long
Dim artikel()
Dim i As Long
Dim j As Long
Dim k As Long
Dim zusammensetzung()
Application.ScreenUpdating = False
Set eins = Worksheets(1)
Set zwei = Worksheets(2)
Set drei = Worksheets(3)
Set vier = Worksheets(4)
ende1 = eins.Cells(Rows.Count, 2).End(xlUp).Row 'belegte Zellen in Blatt 1
ReDim artikel(2, ende1)
For i = 7 To ende1
If eins.Cells(i, 2) <> "" Then
artikel(1, i - 1) = eins.Cells(i, 2)
artikel(2, i - 1) = 0
End If
Next i
ende2 = zwei.Cells(Rows.Count, 2).End(xlUp).Row
ReDim zusammensetzung(ende2, ende1)
For j = 6 To ende1
For i = 7 To ende2
If zwei.Cells(i, 2) <> "" Then
If j = 6 Then
zusammensetzung(i, 0) = zwei.Cells(i, 2)
Else
If artikel(1, j - 1) <> "" Then zusammensetzung(i, j - 6) = Application.WorksheetFunction.CountIf(zwei.Range(zwei.Cells(i, 3), zwei.Cells(i, 12)), artikel(1, j - 1))
End If
End If
Next i
Next j
ende3 = drei.Cells(Rows.Count, 2).End(xlUp).Row
For i = 7 To ende3
For j = 7 To ende1
If drei.Cells(i, 2) = artikel(1, j - 1) Then
artikel(2, j - 1) = artikel(2, j - 1) + Application.WorksheetFunction.Sum(drei.Range("C:BB").Rows(i))
End If
Next j
Next i
ende4 = vier.Cells(Rows.Count, 2).End(xlUp).Row
For i = 7 To ende4
For j = 7 To ende2
If vier.Cells(i, 2) = zusammensetzung(j, 0) Then
For k = 7 To ende1
artikel(2, k - 1) = artikel(2, k - 1) - (Application.WorksheetFunction.Sum(vier.Range("C:BB").Rows(i)) * zusammensetzung(j, k - 6))
Next k
End If
Next j
Next i
'Werte wieder eintragen
For i = 7 To ende1
If eins.Cells(i, 2) = artikel(1, i - 1) Then
eins.Cells(i, 3) = artikel(2, i - 1)
End If
Next i
Set eins = Nothing
Set zwei = Nothing
Set drei = Nothing
Set vier = Nothing
Application.ScreenUpdating = True
End Sub
|