Представление о макросах, функциях и 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)
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 в последней группе, извиняюсь.
после пояснений понятней не стало..) вариант с 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