Hallo Paul
Eine Möglichkeit mit Array's.
Angenommen wurde, das die Daten in beiden Tabellen mit A2 beginnen.
' in ein Modul
Option Explicit
Sub Bestand()
Dim lzBest As Long, lzBewe As Long, n As Long, x As Long
Dim wksBest As Worksheet, wksBewe As Worksheet
Dim arrBest() As Variant, arrBewe() As Variant
Dim objRng As Range
Set wksBest = ThisWorkbook.Worksheets("Bestand")
Set wksBewe = ThisWorkbook.Worksheets("Bewegung")
' Daten aus Bestand
With wksBest
' letzte Datenzeile Spalte A, Tabelle Bestand
lzBest = .Cells(.Rows.Count, 1).End(xlUp).Row
'Zellbereich mit Daten welche ins Array müssen, entspricht Bereich A2 bis C und letzter Datenzeile
Set objRng = .Range(.Cells(2, 1), .Cells(lzBest, 3))
'Werte der Zellen in das Array schreiben
arrBest = objRng.Value
End With
' Daten aus Bewegung
With wksBewe
lzBewe = .Cells(.Rows.Count, 1).End(xlUp).Row
Set objRng = .Range(.Cells(2, 1), .Cells(lzBewe, 3))
arrBewe = objRng.Value
End With
' Berechnung
' Alle Artikelnummern der Bewegung werden mit den Artikelnummern verglichen. Bei Fund wird der
' Wert im Array 'arrBest' aktualisiert(plus/minus) und im Array 'arrBewe' auf 0 gesetzt.
For n = 1 To UBound(arrBewe)
For x = 1 To UBound(arrBest)
If arrBewe(n, 1) = arrBest(x, 1) Then
arrBest(x, 3) = arrBest(x, 3) + arrBewe(n, 3)
arrBewe(n, 3) = 0 ' oder auch = ""
Exit For
End If
Next x
Next n
' Daten im Bestand und Bewegung überschreiben
wksBest.Cells(2, 1).Resize(UBound(arrBest, 1), UBound(arrBest, 2)).Value = arrBest
wksBewe.Cells(2, 1).Resize(UBound(arrBewe, 1), UBound(arrBewe, 2)).Value = arrBewe
End Sub
mfg, GraFri
|