Страницы: 1
RSS
Удаление повторяющихся участков текста в ячейке
 
Добрый день.


Представление о макросах, функциях и VBA я имею, но пока только на начальном уровне. Столкнулся с такой проблемой, которую самостоятельно решить не могу.Прошу помощи неофиту :)
После обработки некой таблицы получается одна ячейка с текстом вида:

AA (1), BB (2), AA (2), BB (3), AA (3), CC (1), DD (2), EE (1), CC (2), EE (2), FF (2), FF (3), DD (3), CC (3), EE (3), DD (3)

Можно ли макросом удалить повторяющиеся значения (1), (2) и (3), т.е. строка должна прийти к виду:

AA (1), BB, AA (2), BB, AA (3), CC (1), DD (2), EE (1), CC, EE, FF (2), FF, DD, CC, EE, DD (3)
Изменено: DemenG - 05.06.2018 14:09:57
 
у Вас остались повторяющиеся 1,2 и 3
почему у ВВ удалили и 2 и 3, а у DD оставили?
 
Показанный желаемый результат не соответствует поставленной задаче. Например, почему дважды ВВ, CC, ЕЕ и DD?
Разделение по запятой?
 
Цитата
yozhik написал:
у Вас остались повторяющиеся 1,2 и 3почему у ВВ удалили и 2 и 3, а у DD оставили?
Цитата
Юрий М написал:
Показанный желаемый результат не соответствует поставленной задаче. Например, почему дважды ВВ, CC, ЕЕ и DD?Разделение по запятой?
Приношу свои извинения. Должен был написать не "...удалить повторяющиеся значения..." , а "... удалить идущие подряд повторяющиеся значения..."

Поясню. Если поделить строку значений (AA, BB,CC  и.т.д.) вот так, по принадлежности к "уровню" символа ( (1), (2) или (3) ), то видно несколько групп значений
AA (1),
BB (2), AA (2),
BB (3), AA (3),
CC (1),
DD (2),
EE (1),
CC (2), EE (2), FF (2),
FF (3), CC (3), EE (3), DD (3)

И ,соответственно, нужно убрать "лишние" "уровни" в группе, но оставить последнее обозначение уровня в группе.
AA (1),
BB, AA (2),
BB, AA (3),
CC (1),
DD (2),
EE (1),
CC, EE, FF (2),
FF, CC, EE, DD (3)

Да, нашел задвоенное значение DD в последней группе, извиняюсь.
Изменено: DemenG - 05.06.2018 21:56:55
 
после пояснений понятней не стало..)
вариант с UDF
Код
Function del_rep(rng As Range)
s = Split(rng.Value, ",")
For i = LBound(s) To UBound(s) - 1
    If Right(s(i), 3) = Right(s(i + 1), 3) Then s(i) = Left(s(i), Len(s(i)) - 4)
    If lst = "" Then lst = s(i) Else lst = lst & "," & s(i)
Next
del_rep = lst & "," & s(UBound(s))
End Function
 
Большое спасибо! Все работает так как надо. Теперь осталось самому понять, что и как работает в функции - буду разбирать. Еще раз спасибо.
Страницы: 1
Наверх