If you add a messagebox into the loop, you'll see that it is restarting the loop. I can't think of a simple way of regressing a for each loop by one value.
[VBA]
Sub Loops()
Dim c As Range, Check As Boolean
Retest:
Check = False
For Each c In Range("Test")
If c = 5 Then
c.Value = 4
Check = True
Exit For
End If
MsgBox c
Next
If Check = True Then GoTo Retest
End Sub

[/VBA]