The else should work, try also replacing the last two negative conditions with an "else".
For a split second there, two or three animations are set simultaneously, which somehow resets the frame index back to 0. I've verified this in Construct 2 just now. So your sprite is "frozen" on the first frame when you quickly press the d pads one after the other.
I'm thinking of a brute force solution: you can manually set the frame index every tick.
Have a local variable named "runFrameIndex", then manually increase it (just before the three conditions) :
Every (1.0 / YourAnimationFramerate) seconds, add 1 to runFrameIndex
if (runFrameIndex >= YourAnimationFrameCount) set runFrameIndex to 0
Then, after the 3 conditions, force the frame index to be set to your variable.
PS: you've made the problem harder than it should be by mixing input logic with animation logic. So I guess a brute force solution is appropriate here. You should also learn how to use the basic system conditions/actions like the conditional structures, the loops, etc. Usually in professional games, the animations are handled by an "FSM" (finite state machine) and are completely isolated from the input handling logic and the gameplay logic.