This works for your example.
Sub x()
Dim rngDistance As Range, rngDistr As Range
Dim nMin As Long, nMinD As Long, r As Long, n As Long
Dim wf As WorksheetFunction
Set wf = WorksheetFunction
Set rngDistance = Range("B4:F7")
Set rngDistr = Range("B11:G15")
For r = 1 To rngDistance.Rows.Count
Do While rngDistr(r + 1, 1) > 0
n = n + 1
nMin = wf.Small(rngDistance.Rows(r), n)
nMinD = wf.Index(rngDistr, 1, 1 + wf.Match(nMin, rngDistance.Rows(r), 0))
If nMinD <= rngDistr(r + 1, 1) Then
rngDistr(r + 1, 1 + wf.Match(nMin, rngDistance.Rows(r), 0)) = nMinD
rngDistr(r + 1, 1) = rngDistr(r + 1, 1) - nMinD
ElseIf nMinD > rngDistr(r + 1, 1) Then
rngDistr(r + 1, 1 + wf.Match(nMin, rngDistance.Rows(r), 0)) = rngDistr(r + 1, 1)
rngDistr(r + 1, 1) = 0
End If
Loop
n = 0
Next r
End Sub
Bookmarks