With performance questions, the best answer is usually to benchmark. Fortunately, this situation is relatively easy to test:
Option Explicit
Const testString = "Some moderately long text string. Since I don't know long the actual input is, I'm just going to write some stuff. Oh, look, it's a special character! -> ®"
' Might want to start off with a lower number like 1000 and go up from there
Const numberOfIterations = 1000000
Dim replaceTime, inStrReplaceTime
Dim notReplaceTime, notInStrReplaceTime
' When search string is found in the target string
replaceTime = TestReplace("®")
inStrReplaceTime = TestInStrReplace("®")
' When search string is NOT found in the target string
notReplaceTime = TestReplace("©")
notInStrReplaceTime = TestInStrReplace("©")
WScript.Echo "Results (seconds, lower is better):" & vbNewline & _
" Replace: " & replaceTime & vbNewline & _
" InStr + Replace: " & inStrReplaceTime & vbNewline & _
" Replace (not in string): " & notReplaceTime & vbNewline & _
" InStr + Replace (not in string): " & notInStrReplaceTime & vbNewline
Function TestReplace(str)
Dim startTime, i, outString
startTime = Timer
For i = 1 To numberOfIterations
outString = Replace(testString, str, "something")
Next
TestReplace = Timer - startTime
End Function
Function TestInStrReplace(str)
Dim startTime, i, outString
startTime = Timer
For i = 1 To numberOfIterations
If InStr(testString, str) <> 0 Then outString = Replace(testString, str, "something")
Next
TestInStrReplace = Timer - startTime
End Function
On my machine, this script gave the output:
Results (seconds, lower is better):
Replace: 0.8515625
InStr + Replace: 1.234375
Replace (not in string): 0.6796875
InStr + Replace (not in string): 0.3046875
This may not be the most comprehensive test, but it does appear that the answer to which method is faster depends on whether or not you expect to see your search string in the string you are replacing.