#Java 8, 141 136 134 bytes
s->{float q=s.split("!",-1).length,n=new Float(s.split("!")[0]),i=n,r=n;for(;--i>0;r=q<3?i*r:q<4?i+r:q<5?i-r:i/r);return n<1&q<3?1:r;}
Explanation:
Try it here.
s->{ // Method with String parameter and float return-type
float q=s.split("!",-1).length, // Amount of exclamation marks + 1
n=new Float(s.split("!")[0]),
// The number before the exclamation marks
i=n, // Index (starting at `n`)
r=n; // Return sum (starting at `n`)
for(;--i>0; // Loop from `i-1` down to 1
r= // Change the result (`r`) to:
q<3? // If `q` is 2:
i*r // Multiply
:q<4? // Else if `q` is 3:
i+r // Addition
:q<5? // Else if `q` is 4:
i-r // Subtraction
: // Else (if `q` is 5):
i/r // Division
); // End of loop
return n<1&q<3? // Edge case if the input is `0!`:
1 // Then return 1
: // Else:
r; // Return the result
} // End of method