Hallo,
das Anliegen ist lösbar:
Sub ReCalcUeberstanden()
Dim rng As Range
Dim rngAbgbH As Range, rngMon As Range
Dim iMon As Integer
For Each rng In UsedRange.Rows
Set rngAbgbH = rng.Cells(1, 2) ' Abgebaute Überstunden
If IsNumeric(rngAbgbH) Then
For iMon = 1 To 12
Set rngMon = rng.Cells(1, 2 + iMon)
If rngAbgbH.Value >= rngMon.Value Then
rngAbgbH.Value = rngAbgbH.Value - rngMon.Value
rngMon.Value = 0
Else
rngMon.Value = rngMon.Value - rngAbgbH.Value
rngAbgbH.Value = 0
End If
If rngMon.Value = 0 Then
rngMon.ClearContents
End If
If rngAbgbH.Value = 0 Then
rngAbgbH.ClearContents
Exit For
End If
Next
End If
Next
End Sub
Kurze Erläuterung:
Es werden alle Einträge Zeilenweise durchlaufen.
Der Name wird nicht ausgewertet. Die Auswertung beginnt in Spalte B. Solange hier ein Wert steht, werden die Monate (Spalte C bis N) durchlaufen. Wenn im Monats-Eintrag eine Zahl enthalten ist, wird dieser Wert um den Wert in Spalte B reduziert. Gleichzeitig wird der Wert in Spalte B ebenfalls korrigiert.
Das Ganze läuft solange, bis entweder alle 12 Monate durchlaufen sind oder in Spalte B ein Wert 0 aufweist.
Sobald in B oder C bis N ein Wert 0 enthalten ist, wird der Inhalt gelöscht.
Alternativ könnten auch die 0-Werte stehen gelassen und lediglich mit einer "Bedingten Formatierung" ausgeblendet werden:
Es wird angenommen, dass die Tabelle max. 4000 Einträge beinhalten kann:
Bedingung: =B1:N4000=0
Formatierung: Zahlenformat: ;;;
Info: Durch Zuweisen des Zahlenformats ";;;" wird der Inhalt ausgeblendet.
LG, Ben
|