Hallo Walter, musst du denn unbedingt Prozente dazwischenschalten? Das verzerrt nur das Ergebnis. Das kann man auch mit einem simplen Dreisatz lösen, so wie wir es in der Schule gelernt haben. Einfach Stunden / Summe der Werte bei X * Wert bei einem bestimmten X rechnen. Das letzte X dann einfach Stunden - Summe der vorherigen Xe rechnen. Der Code dazu sieht bei mir so aus. Probier ihn mal aus.
Sub Verteilen()
Dim lngLetzte As Long, rngWerte As Range, c As Range
Dim i As Long, Summe As Double, anzX As Long, Stunden As Long, x As Long
lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row
Set rngWerte = Range(Cells(2, "B"), Cells(2, "I")) 'Spaltenbuchstaben anpassen
For i = 3 To lngLetzte
Summe = Application.SumIf(rngWerte.Offset(i - 2), "X", rngWerte)
anzX = Application.CountIf(rngWerte.Offset(i - 2), "X")
Stunden = Cells(i, "J") 'bei dir cells(i, "AH")
x = 0
For Each c In rngWerte.Offset(i - 2)
If c.Value = "X" Then
x = x + 1
If x < anzX Then
c.Value = Application.Round(Stunden / Summe * Cells(2, c.Column), 0)
Else
c.Value = Stunden - Application.Sum(rngWerte.Offset(i - 2).Resize(1, c.Column - 2))
End If
End If
Next c
Next i
End Sub
Gruß Mr. K.
|