В результате действия функции Replace возвращается исходная строка с замененным строковым фрагментом
Параметры
Expression
Обязательный аргумент - строка, в которой требуется замена
Find
Обязательный аргумент - подстрока, которую нужно заменить
Replace
Обязательный аргумент - подстрока замены
Start
Необязательный аргумент - указывает позицию, с которой начинается поиск
Count
Необязательный аргумент - указывает число замен
Compare
Необязательный аргумент - вид сравнения
Пример
Sub Function_String_Replace()
Dim STRsample$, STRfind$, STRnew$, STRresult$
STRsample = "Мир MS Excel" 'строка, часть которой будем менять
STRfind = "MS " 'подстрока для замены
STRnew = "" ' новая подстрока для замены
STRresult = Replace(STRsample, STRfind, STRnew, 1, 1) ' меняем один раз, начиная с первого символа
MsgBox STRsample 'просмотр исходного текста
MsgBox STRresult ' просмотр результата замены
End Sub
Можно Dim sample$, findstr$, newstr$, retval$ sample = "Мир MS Excel" 'строка, в которой будем менять findstr = " " 'подстрока для замены newstr = " " ' новая подстрока для замены retval = Replace(sample, findstr, newstr) ' меняем один раз, начиная с первого символа Debug.Print retval
Count Необязательный аргумент - указывает число исправьте пожалуйста на Count Необязательный аргумент - указывает число замен. -1 - чтобы заменить все появления (по умолчанию).
На сайте Микрософт к функции Replace висит заметка
Значение, возвращаемое функцией Replace является строкой, которая начинается с позиции, указанной параметром Start, и завершается в конце строки Expression, с заменой подстрок Find значениями Replace.
Т.е. Если хочешь получить нормальную замену, надо к результату добавить начало исходной строки до позиции Start.
Добрый день! Интересует такой вопрос, возможно ли с помощью скрипта (с использованием функции replace) выполнить замену текста (соответствующего определенному шаблону) на этот же текст, но измененный? Т.е. мне неизвестна заранее строка для замены, эту строку я получаю чтением входной строки, и, например, добавлением к ней определенного символа.
Т.е. логика такая - у меня есть несколько шаблонов строк. Я беру входную строку, с помощью RegExp определяю, к какому шаблону относится данная строка, и далее меняю ее в зависимости опять же от шаблона. Т.е. в каком то случае это будет добавление к строке ".", в каком то случае пробела и тд.
Пример функции в экселе: ЕСЛИМН(RegExp1(A1;C1;D1) != 0; RegExp(A1;C1;D1); RegExp1(A1;C2;D2) != 0; RegExp1(A1;C2;D2); ... ), где С* - это столбец с паттернами (вида (\d{1})(\d{1})(\..*!) ), а D* - столбец с заменяемыми значениями вида $1.$2 $3. Т.е. идея такая, что делим исходную строку на группы, и далее в зависимости от вида шаблона добавляем между группами в нужные места символы (точки и тд). В таком случае вопрос, как показать в функции RegExp, что после чтения строки-паттерна в объект (regex.Pattern = Pattern), надо связать переданную в функцию строку-шаблон ( $1.$2 $3) с входным текстом? Потому что есть подозрение, что входную строку-шаблон он воспримет просто как строку, и выполнит замену 1 в 1 ( $1.$2 $3), а надо чтобы он понял, что вот эти знаки $ относятся именно к входной строке. Для примера код функции с основными частями:
Public Function RegExpExtract_myversion(Text As String, Pattern As String, myRep As String) As String ... Set regex = CreateObject("VBScript.RegExp") regex.Pattern = Pattern regex.Global = True If regex.Test(Text) Then RegExpExtract_myversion = regex.Replace(Text,myRep) Exit Function Else RegExpExtract_myversion = 0 Exit Function End If
Заранее извиняюсь за такой развернутый вопрос, если можно хотелось бы получить хотя бы направление, куда двигаться, потому что везде идет замена строки на готовую заранее строку, а вот чтобы брать входную, менять, и заменять на нее, такого увы не встречал. Спасибо!