Страницы: 1
RSS
Поиск и замена по маске, Есть артикулы в тексте, нужно найти их по маске и заключить в скобки
 
Добрый вечер форумчяне, нужен макрос для поиска по маске и замены.
Я знаю как с помощью подстановочных знаков удалить или заменить.

Selection.Replace what:=" ??-?????????RU", Replacement:=""
Selection.Replace what:=" TF-???????", Replacement:=""

Но как реализовать то что в примере?

Что есть:
Galaxy Note 8 EF-QN950CTEGRU Фиолетовый
Galaxy S9 Silicone Cover EF-PG960TJEGRU Cерый
DVB-T2 TELEFUNKEN TF-DVBT221
Xiaomi Viomi IH Rice Cooker 4L VXFB40B Black
Steinhardt Sunglasses SM001-0203 Gold
Baseus Speed Dual CCFS-E01 Black
---
Что должно получится
Galaxy Note 8 (EF-QN950CTEGRU) Фиолетовый
Galaxy S9 Silicone Cover (EF-PG960TJEGRU) Cерый
DVB-T2 TELEFUNKEN (TF-DVBT221)
Xiaomi Viomi IH Rice Cooker 4L (VXFB40B) Black
Steinhardt Sunglasses (SM001-0203) Gold
Baseus Speed Dual (CCFS-E01) Black
Изменено: DartoArem - 05.12.2019 20:47:15
 
UDF
Код
Function Maska(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "([A-Z]+-?[A-Z]+\d{2,3}([A-Z]+)?)"
     Maska = .Replace(cell, "($1)")
 End With
End Function
 
Спасибо, отличный пример  RegExp.
Но хотелось бы что бы это работало не виде вызова функции Maska.

А что бы работало при выделение диапазона, совместно с другими макросами
 
Цитата
при выделение диапазона
Так примените макрос к Selection
 
И вот еще вопрос можно ли использовать несколько патернов, вариантов артикулов бывает море, и писать одно большое регулярное выражение просто не реально для меня
 
Цитата
можно ли использовать несколько патернов
Думаю, что можно
 
Цитата
Kuzmich написал:
Так примените макрос к Selection
Что то я туповат для этого.
Попробовал Function Maska(cell$) заменить на Selection (cell$)
Не работает

Можете написать примером
Изменено: DartoArem - 05.12.2019 22:01:48
 
Цикл по столбцу А
Код
Sub iMaska()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Range("B1:B" & iLastRow).ClearContents
  With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "([A-Z]+-?[A-Z]+\d{2,3}([A-Z]+)?)"
    For i = 1 To iLastRow
     Cells(i, 2) = .Replace(Cells(i, 1), "($1)")
    Next
  End With
End Sub
 
И применение нескольких паттернов будет выглядит так?
    .Global = True
    .Pattern = "([A-Z]+-?[A-Z]+\d{2,3}([A-Z]+)?)"
    .Pattern = "([A-Z]+2)"
    Maska = .Replace(cell, "($1)")
 
Нет, так не пойдет. Будет использоваться последний паттерн
А что в .Pattern = "([A-Z]+2)" означает 2 ?
Изменено: Kuzmich - 05.12.2019 22:12:37
 
Спасибо огромное! Все работает. И несколько паттернов тоже.
Хотелось бы вас попросить еще об одном .
---
Можно еще пример
1. Удалить артикул по патерну
2. Удалить все кроме артикула
 
Цитата
Kuzmich написал:
А что в .Pattern = "([A-Z]+2)" означает 2 ?
Цифру 2
MWVF2
MWVD2
 
Цитата
Kuzmich написал:
Нет, так не пойдет. Будет использоваться последний паттерн
Проверил, сработали оба паттерна
 
Цитата
1. Удалить артикул по патерну
заменить строку
Код
Cells(i, 2) = .Replace(Cells(i, 1), "")

Цитата
2. Удалить все кроме артикула
Код
Cells(i, 2) = .Execute(Cells(i, 1))(0)
 
Извините, ошибся.
Вы правы, сработал последний паттерн
Изменено: DartoArem - 05.12.2019 22:20:47
 
Цитата
сработал последний паттерн
Сначала делаете цикл по первому паттерну, затем по второму
 
Я так и подумал)
Спасибо вам большое.
Страницы: 1
Наверх