What lowest performance is always having to refresh the display information. And if you have to switch between sheets, time delays are added focus allocation.
Application.ScreenUpdating = False
Application.ScreenUpdating = False
Besides optimizing You've already suggested, maybe you should think about the possibility of rewriting your own Replace function. I see you're using the same parameters in all calls.
LookAt: = xlPart, MatchCase: = False
LookAt: = xlPart,
MatchCase: = False
The VB functions contain algorithms prepared for many different parameters. Are too complex for what you really need but it will always be less quick to use own functions and 100% designed for your target.
If execution speed is your priority, you should reinvent the wheel but look worse encoded.
Other general advice would directly access the value of the cells, without having to select them first.