Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Чистка ячейки от лишних символов и слов
 
Доброго времени суток товарищи. Помогите пожалуйста написать формулу для зачистки ячейки от лишнего.

Имеем: +из полей! "доносится"  !печаль -налей -золото
Получаем: из полей доносится печаль

Если с кавычками, плюсами, восклиц. знаками и пробелами топорно разобрался (каждая ячейка чистит от чего-то одного)
Скрытый текст

то слова со знаком минуса никак не могу победить на автомате ((( Хотелось, чтобы конечный результат получался в одной ячейки, а не цепочке ...

Благодарю.
 
Анализ текста регулярными выражениями
Согласие есть продукт при полном непротивлении сторон.
 
вариант UDF в C1
Код
 Function vvv$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "[-!\""\+]+"
 If .test(t) Then vvv = Trim(.Replace(t, ""))
 End With
End Function
Изменено: кузя1972 - 15 Сен 2018 09:51:45
 
еще вариант vvv в C1 и bbb E1 если надо удалять и слова,(файл-пример все равно нужен от создателя темы).Возможен объединенный вариант ccc
Код
Function ccc$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "[!\""\+]+"
 If .test(t) Then ccc = Trim(.Replace(t, ""))
.IgnoreCase = True:   .Pattern = "-[а-яё]+"
 If .test(ccc) Then ccc = Trim(.Replace(ccc, ""))
 End With
End Function
Код
Function vvv$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "[!\""\+]+"
 If .test(t) Then vvv = Trim(.Replace(t, ""))
 End With
End Function
Код
Function bbb$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True:: .IgnoreCase = True:  .Pattern = "-[а-яё]+"
 If .test(t) Then bbb = Trim(.Replace(t, ""))
 End With
End Function
Изменено: кузя1972 - 15 Сен 2018 12:11:04
 
кузя1972, спасибо за примеры. Второй вариант именно то, что надо, вот только с другими вариациями он дружит через раз ((( В исходном варианте я описал возможные нюансы, которые могут быть. Но к примеру, если из ячейки надо вычистить только слова со знаком минуса, то не справляется (

Проверял на варианте:
Скрытый текст

Исходного варианта у меня увы нет, готовлюсь и делаю заготовки к новой работе.
Изменено: Alez - 17 Сен 2018 23:18:15
 
Цитата
Alez написал: Хотелось, чтобы конечный результат получался в одной ячейки, а не цепочке ...
Делайте цепочку в одной формуле:
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(А1;"!";);"+";);"-";);СИМВОЛ(34);)..

Но мне Ваша цепочка под спойлером больше нравится :)
 
vikttur, благодарю. С экселем плотно никогда не сталкивался, поэтому синтаксис еще не успел освоить. Сейчас проверю ...
 
vikttur, работает, благодарю. Осталось понять, как дописать функцию Кузи

Код
Function bbb$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True:: .IgnoreCase = True:  .Pattern = "-[а-яё]+"
 If .test(t) Then bbb = Trim(.Replace(t, ""))
 End With
End Function

чтобы чистились не только русские-англ. буквы в разных регистрах, но и цифры

P.S. Потом пожалуйста объясните, куда этот код и как вставлять ? Пытаюсь наковырять его в файле примера, но не могу найти (((
Изменено: Alez - 17 Сен 2018 23:53:15
 
Подниму тему, остался последний рывок к решению поставленной задачи ...
 
Проблема почти решена. У меня функция получилась следующего вида:
Код
Function Clear$(t$)
 With CreateObject("VBScript.RegExp"): .Global = True:: .IgnoreCase = True:  .Pattern = "-[a-zA-Zа-яёА-ЯЁ0-9]+"
 If .test(t) Then Clear = Trim(.Replace(t, ""))
 End With
End Function
Но вылезла другая проблема. Если отсутствуют слова для фильтрования, то ячейка пуская ((( Как это можно победить ? Ведь не каждую ячейку мне надо фильтровать. Возможны и ячейки с чистыми значениями, которые надо сохранить так есть ...

Для примера возьмите 2 строчки, где первую надо фильтрануть, а втораю имеет чистое значение:
+из полей! "доносится"  !печаль -налей -золото
из полей доносится печаль

В итоге мы увидим в соседнем столбце лишь отфильтрованные данные. Помогите пожалуйста с этой задачей разобраться.

Благодарю.
Изменено: Alez - 20 Сен 2018 02:43:23
 
ПЫтался найти решение самостоятельно, не нашел. Прошу помощи.
 
В Вашем варианте удалите If .test(t) Then
А так будет работать быстрее:
Код
Function Clear(Txt As String) As String
  Static RegExp As Object
  If RegExp Is Nothing Then
    Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Global = True
    RegExp.Pattern = "-.+"
  End If
  Clear = Trim(RegExp.Replace(Txt, vbNullString))
End Function
Изменено: ZVI - 20 Сен 2018 19:38:57
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
 
ZVI, благодарю за помощь. Пока нареканий в работе не выявлено. С поставленной задачей справляется на ура )))
Страницы: 1
Читают тему (гостей: 1)
Наверх