No error checking, a bit slow (5 secs on your sheet here) but simple code. It does not use column E values, instead it works out how many rows to add from column D. Run it when the active sheet is the one you want it to work on:
Sub blah()
Application.ScreenUpdating = False
lr = Cells(Rows.Count, "D").End(xlUp).Row
For rw = lr To 2 Step -1
yrs = Split(Cells(rw, "D").Value, " - ")
If UBound(yrs) = 1 Then
RowsToAdd = yrs(1) - yrs(0)
Rows(rw).Copy
Rows(rw + 1).Resize(RowsToAdd).Insert Shift:=xlDown
Cells(rw, "D").Resize(RowsToAdd + 1).Value = Evaluate("row(" & yrs(0) & ":" & yrs(1) & ")")
End If
Next rw
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub