Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Справочники

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 56972
Главная » Справочники » Функции VBA » Функции обработки строк

Replace

Функция Replace

Replace(Expression,Find,Replace,[Start],[Count],[Compare])

 

Возвращаемое значение

В результате действия функции 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

  Исходный текст:               Результат замены:

                 

Категория
Функции обработки строк

 

Счетчики: 75563 | Добавил: Serge_007 | Теги: Replace, функция, Excel, vba, заменить, ВБА, function
Всего комментариев: 8
0   Спам
1    Валерий   (29.10.2014 06:14) [ Материал]
   А можно ли с помощью этой функции в шаблоне задать замену допустим двух пробелов на один в открываемом документе

0  
2    Serge_007   (29.10.2014 13:21) [ Материал]
   Можно
Dim sample$, findstr$, newstr$, retval$
  sample = "Мир  MS  Excel" 'строка, в которой будем менять
  findstr = "  " 'подстрока для замены
  newstr = " " ' новая подстрока для замены
  retval = Replace(sample, findstr, newstr) ' меняем один раз, начиная с первого символа
  Debug.Print retval

0   Спам
3    mathiax90   (27.01.2016 06:03) [ Материал]
   Count Необязательный аргумент - указывает число
исправьте пожалуйста на
Count Необязательный аргумент - указывает число замен. -1 - чтобы заменить все появления (по умолчанию).

0   Спам
4    Joss   (20.12.2016 09:52) [ Материал]
   Replace ("1011112", "1", "2", 5, 1) выдаёт 212, а надо 1011212

Это что - глюк или фича? И как в таких случаях быть?

0   Спам
5    Joss   (21.12.2016 09:44) [ Материал]
   На сайте Микрософт к функции Replace висит заметка

Значение, возвращаемое функцией Replace является строкой, которая начинается с позиции, указанной параметром Start, и завершается в конце строки Expression, с заменой подстрок Find значениями Replace.

Т.е. Если хочешь получить нормальную замену, надо к результату добавить начало исходной строки до позиции Start.

0  
6    Serge_007   (21.09.2021 13:11) [ Материал]
   mathiax90, исправил

0   Спам
7    vladps1125   (30.01.2022 14:14) [ Материал]
   Добрый день! Интересует такой вопрос, возможно ли с помощью скрипта (с использованием функции 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

Заранее извиняюсь за такой развернутый вопрос, если можно хотелось бы получить хотя бы направление, куда двигаться, потому что везде идет замена строки на готовую заранее строку, а вот чтобы брать входную, менять, и заменять на нее, такого увы не встречал. Спасибо!

0  
8    Serge_007   (01.02.2022 12:52) [ Материал]
   vladps1125, задайте Ваш вопрос на форуме

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!