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

Вход

Регистрация

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

 

= Мир MS Excel/Формула для замены текста в нескольких местах ячейки - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Формула для замены текста в нескольких местах ячейки
Mitya Дата: Вторник, 22.08.2017, 13:54 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
Такая проблема. В первой колонке находится текст, который отличается только содержимым utm_content.
Во второй колонке каждая ячейка содержит повторяющийся несколько раз параметр utm_content.
Вопрос: как сменить в каждой ячейке второй колонки содержимое utm_content так, чтобы оно соответствовало этому параметру в левой ячейке?
К сообщению приложен файл: ___.xlsx (9.0 Kb)


Сообщение отредактировал Mitya - Вторник, 22.08.2017, 14:12
 
Ответить
СообщениеЗдравствуйте.
Такая проблема. В первой колонке находится текст, который отличается только содержимым utm_content.
Во второй колонке каждая ячейка содержит повторяющийся несколько раз параметр utm_content.
Вопрос: как сменить в каждой ячейке второй колонки содержимое utm_content так, чтобы оно соответствовало этому параметру в левой ячейке?

Автор - Mitya
Дата добавления - 22.08.2017 в 13:54
_Boroda_ Дата: Вторник, 22.08.2017, 14:20 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16885
Репутация: 6599 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
Код
=ПОДСТАВИТЬ(B1;СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(B1;ПОИСК("utm_content";B1);99);"&";ПОВТОР(" ";99));99));СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A1;ПОИСК("utm_content";A1);99);"&";ПОВТОР(" ";99));99)))

Или, если заменяемые значения всегда "utm_content=remont_su", то
Код
=ПОДСТАВИТЬ(B1;"utm_content=remont_su";СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A1;ПОИСК("utm_content";A1);99);"&";ПОВТОР(" ";99));99)))
К сообщению приложен файл: -15-1.xlsx (10.2 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
Код
=ПОДСТАВИТЬ(B1;СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(B1;ПОИСК("utm_content";B1);99);"&";ПОВТОР(" ";99));99));СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A1;ПОИСК("utm_content";A1);99);"&";ПОВТОР(" ";99));99)))

Или, если заменяемые значения всегда "utm_content=remont_su", то
Код
=ПОДСТАВИТЬ(B1;"utm_content=remont_su";СЖПРОБЕЛЫ(ЛЕВБ(ПОДСТАВИТЬ(ПСТР(A1;ПОИСК("utm_content";A1);99);"&";ПОВТОР(" ";99));99)))

Автор - _Boroda_
Дата добавления - 22.08.2017 в 14:20
sboy Дата: Вторник, 22.08.2017, 17:45 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Вариант функцией пользователя.
[vba]
Код
Function MyFirstRegExp(cell_from$, cell_to$)
With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "&utm_content.*?&"
     Set m = .Execute(cell_from)
     txt = m.Item(0).Value
     MyFirstRegExp = .Replace(cell_to, txt)
End With
End Function
[/vba]
[p.s.]Начал изучать регулярные выражения.Этот код моя первая проба пера Regexp. С удовольствием выслушаю критику и замечания по коду
К сообщению приложен файл: -15-1.xlsm (15.7 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеВариант функцией пользователя.
[vba]
Код
Function MyFirstRegExp(cell_from$, cell_to$)
With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "&utm_content.*?&"
     Set m = .Execute(cell_from)
     txt = m.Item(0).Value
     MyFirstRegExp = .Replace(cell_to, txt)
End With
End Function
[/vba]
[p.s.]Начал изучать регулярные выражения.Этот код моя первая проба пера Regexp. С удовольствием выслушаю критику и замечания по коду

Автор - sboy
Дата добавления - 22.08.2017 в 17:45
buchlotnik Дата: Вторник, 22.08.2017, 19:13 | Сообщение № 4
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Вчера руки не дошли - Сергей, можно чутка короче: [vba]
Код
Function MyFirstRegExp2(cell_from$, cell_to$)
With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "&utm_content[^&]+&"
     txt = .Execute(cell_from)(0)
     MyFirstRegExp2 = .Replace(cell_to, txt)
End With
End Function
[/vba]
К сообщению приложен файл: 9324277.xlsm (16.2 Kb)


Сообщение отредактировал buchlotnik - Среда, 23.08.2017, 09:20
 
Ответить
СообщениеВчера руки не дошли - Сергей, можно чутка короче: [vba]
Код
Function MyFirstRegExp2(cell_from$, cell_to$)
With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "&utm_content[^&]+&"
     txt = .Execute(cell_from)(0)
     MyFirstRegExp2 = .Replace(cell_to, txt)
End With
End Function
[/vba]

Автор - buchlotnik
Дата добавления - 22.08.2017 в 19:13
sboy Дата: Среда, 23.08.2017, 11:20 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
buchlotnik, Спасибо Михаил!
Мог бы объяснить в чем принципиальное отличие твоего паттерна (оптимальность, производительность, "правильность")?
Т.к. я еще их "читать" не умею, пользуюсь сайтом помощником для их составления


Яндекс: 410016850021169
 
Ответить
Сообщениеbuchlotnik, Спасибо Михаил!
Мог бы объяснить в чем принципиальное отличие твоего паттерна (оптимальность, производительность, "правильность")?
Т.к. я еще их "читать" не умею, пользуюсь сайтом помощником для их составления

Автор - sboy
Дата добавления - 23.08.2017 в 11:20
buchlotnik Дата: Среда, 23.08.2017, 12:28 | Сообщение № 6
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
В данном случае ничего принципиального нет. По скорости функции идентичны. Мне вариант с исключающим набором кажется более понятным ("последовательность НЕ амперсандов", вместо "последовательность символов до амперсанда в нежадном варианте"), но это субъективное. Объективно нужно помнить, что наши функции могут дать разные результаты, если в ячейке присутствуют разрывы строки (символ 10) - потому что точка, это всё, кроме разрыва строки; а НЕ амперсанд - это всё, кроме амперсанда (т.е. включая разрывы) :D
UPD на всякий случай - MSDN


Сообщение отредактировал buchlotnik - Среда, 23.08.2017, 13:24
 
Ответить
СообщениеВ данном случае ничего принципиального нет. По скорости функции идентичны. Мне вариант с исключающим набором кажется более понятным ("последовательность НЕ амперсандов", вместо "последовательность символов до амперсанда в нежадном варианте"), но это субъективное. Объективно нужно помнить, что наши функции могут дать разные результаты, если в ячейке присутствуют разрывы строки (символ 10) - потому что точка, это всё, кроме разрыва строки; а НЕ амперсанд - это всё, кроме амперсанда (т.е. включая разрывы) :D
UPD на всякий случай - MSDN

Автор - buchlotnik
Дата добавления - 23.08.2017 в 12:28
sboy Дата: Среда, 23.08.2017, 13:05 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
потому что точка, это всё, кроме разрыва строки

о как, это важное замечание. Спасибо.


Яндекс: 410016850021169
 
Ответить
Сообщение
потому что точка, это всё, кроме разрыва строки

о как, это важное замечание. Спасибо.

Автор - sboy
Дата добавления - 23.08.2017 в 13:05
  • Страница 1 из 1
  • 1
Поиск:

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