#string #vba #excel #replace
#строка #vba #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_ не является константой. Это может быть любая строка)
Комментарии:
1. Соответствует ли подчеркивание? Если это так, вы можете использовать
rlpStr = Replace(str, "_Help", "_Job")
.2. Это не так. Это может быть любой символ.
Ответ №1:
Для этого есть однострочное решение:
rlpStr = StrReverse(Replace(StrReverse(str), StrReverse("Help"), StrReverse("Job"), , 1))
Технически это немного менее эффективно, чем объединение InStr
и Replace
, но при необходимости его можно использовать внутри другого выражения. Кроме того, мне нравятся однострочные решения, если они понятны.
Ответ №2:
Будет ли метод в приведенном ниже коде соответствовать вашим требованиям?
Начальное значение 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) amp; Replace(Str, ValueCrnt, ValueNew, Pos)
End If
Debug.Print Str
End Sub
Ответ №3:
Str = «C://Documents/TestUser/WWW/Help/Files/Move_Help.txt «
ValueCrnt = «Справка» ValueNew = «Задание»
Pos = InStrRev(Str, ValueCrnt)
Если Pos> 0, то Str = Mid(Str, 1, Pos — 1) amp; Replace(Str, ValueCrnt, ValueNew, Pos) End Если
Wscript.Echo Str
Комментарии:
1. Вместо того, чтобы публиковать ответы только для кода, пожалуйста, добавьте некоторое объяснение того, что означает код.