仅替换VBA中字符串中最后一次匹配

时间:2014-06-24 19:34:06

标签: string vba excel-vba replace excel

我有一个像这样的字符串

  

" C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"

并且必须将Move_Help.txt替换为Move_Job.txt

我在VBA EXCEL中使用以下代码

str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"
rlpStr = Replace(str, 'Help', 'Job')

我正在

"C://Documents/TestUser/WWW/Job/Files/Move_Job.txt"

预期

"C://Documents/TestUser/WWW/Help/Files/Move_Job.txt"

你能帮忙吗?

仅供参考:我无法将Move_Help与Move_Job匹配(Move_不是常量。它可以是任何字符串)

3 个答案:

答案 0 :(得分:13)

这是一个单线解决方案:

rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"),  StrReverse("Job"), , 1))

从技术上讲,它比组合InStrReplace的效率略低,但如果需要,可以在另一个表达式中使用。此外,我喜欢单线解决方案,只要它们不是不可理解的。

答案 1 :(得分:5)

以下代码中的技术是否符合您的要求?

Str的初始值是:

 C://Documents/TestUser/WWW/Help/Files/Move_Help.txt

最终值为:

 C://Documents/TestUser/WWW/Help/Files/Move_Job.txt

代码使用InStrRev找到ValueCrnt的最后一个匹配项(如果有),如果存在ValueCrnt,则用ValueNew替换最后一次出现。

Option Explicit
Sub Demo()

  Dim Pos As Long
  Dim Str As String
  Dim ValueCrnt As String
  Dim ValueNew As String

  Str = "C://Documents/TestUser/WWW/Help/Files/Move_Help.txt"

  ValueCrnt = "Help"
  ValueNew = "Job"

  Pos = InStrRev(Str, ValueCrnt)

  If Pos > 0 Then
    Str = Mid(Str, 1, Pos - 1) & Replace(Str, ValueCrnt, ValueNew, Pos)
  End If

  Debug.Print Str

End Sub

答案 2 :(得分:0)

Str =“ C://Documents/TestUser/WWW/Help/Files/Move_Help.txt”

ValueCrnt =“帮助” ValueNew =“工作”

Pos = InStrRev(Str,ValueCrnt)

如果Pos> 0然后 Str = Mid(Str,1,Pos-1)&Replace(Str,ValueCrnt,ValueNew,Pos) 如果结束

Wscript.Echo Str