Yes, if you save failed executions like described here you can do that:
You simply have to open the past executions via the button on the left side. There you will then see a list of all successful and failed executions. The failed ones will have a “retry” button right next to their status “Error”. If you click on it you can choose between two options:
Retry with currently saved workflow: It will run the workflow as it is currently saved. Meaning if you made any changes since the original execution to nodes after the last successfully executed one (lets say you fixed a wrong expression) it will use the new ones. It is also possible to add new nodes (but only after the last successfully executed one). You, however, have to be careful in complicated flows like if they have loops and only part of it got executed. It will probably mess that up. But with regular linear-workflows, it should simply work fine.
Retry with original workflow: Simply runs it again with exactly the workflow how it was saved at the time of the execution (even if it got changed in the meantime). This is what you would want if something external was the problem like an API you did use was down.