Добрый день, уважаемые форумчане! Помогите пожалуйста доработать от такую конструкцию [vba]
Код
Sub bb() Dim arr() As Variant, i& With CreateObject("vbscript.regexp") .Pattern = "(?:([^,]+),)(?=(?:.*?,\1|\1)(?:,|$))|(?:,\s*)+$|(?:(,)(\s)*){2,}|\s+\K,\s*" .Global = True: .MultiLine = True arr = Selection.Value For i = 1 To UBound(arr) If .test(arr(i, 1)) Then arr(i, 1) = .Replace(arr(i, 1), "$2$3") Next Selection.Value = arr End With End Sub
[/vba]
Приложил пример, в нем в столбце А макрос уже применен для наглядности, в столбце B как раз начальный текст, в котором и нужно удалить все лишнее запятые.
После ее применения, остается лишняя запятая, как например в столбце А, в четвертой строке: Фильтр масляный , AUDI A3, вот от таких запятых надо избавиться, которые остаются после названия товара (Фильтр масляный) и перед маркой (AUDI A3), а вот после марок эти самые запятые необходимо оставить, когда идет перечисление: AUDI A4, AUDI A6, VOLKSWAGEN PASSAT.
Надеюсь объяснил не запутано
Добрый день, уважаемые форумчане! Помогите пожалуйста доработать от такую конструкцию [vba]
Код
Sub bb() Dim arr() As Variant, i& With CreateObject("vbscript.regexp") .Pattern = "(?:([^,]+),)(?=(?:.*?,\1|\1)(?:,|$))|(?:,\s*)+$|(?:(,)(\s)*){2,}|\s+\K,\s*" .Global = True: .MultiLine = True arr = Selection.Value For i = 1 To UBound(arr) If .test(arr(i, 1)) Then arr(i, 1) = .Replace(arr(i, 1), "$2$3") Next Selection.Value = arr End With End Sub
[/vba]
Приложил пример, в нем в столбце А макрос уже применен для наглядности, в столбце B как раз начальный текст, в котором и нужно удалить все лишнее запятые.
После ее применения, остается лишняя запятая, как например в столбце А, в четвертой строке: Фильтр масляный , AUDI A3, вот от таких запятых надо избавиться, которые остаются после названия товара (Фильтр масляный) и перед маркой (AUDI A3), а вот после марок эти самые запятые необходимо оставить, когда идет перечисление: AUDI A4, AUDI A6, VOLKSWAGEN PASSAT.