Страницы: 1
RSS
Извлечь часть текста из ячейки по заданному условию
 
Добрый день уважаемые форумчане, огромная просьба помочь в решении!

Целый день ломаю голову как сделать. Идею понимаю, с использованием ПСТР+ПОИСК, но реализовать не могу.

Имеется большой массив информации с товарами (парсинг сайта), где в одной ячейке имеется описание с характеристиками, всегда в разном порядке.
Из этой ячейки необходимо вытащить только определенные значения.

Во вложении небольшой пример.
В завистимости от категорий товаров, значения, которые необходимо вытащить будут менятся, поэтому формула должна ссылаться на название заголовка (если это возможно).
 
UDF
Код
Function iWarrenty(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "Гарантия (\d+)"
   If .test(cell) Then
     iWarrenty = .Execute(cell)(0).SubMatches(0)
   Else
     iWarrenty = ""
   End If
 End With
End Function
Function iCountry(cell$)
 With CreateObject("VBScript.RegExp")
     .IgnoreCase = True
     .Pattern = "Страна ([А-ЯЁ]+)"
   If .test(cell) Then
     iCountry = .Execute(cell)(0).SubMatches(0)
   Else
     iCountry = ""
   End If
 End With
End Function

дальше аналогично
 
=TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(MID([@Описание];SEARCH(CHAR(10)&G$4&" *;";[@Описание]&";")+LEN(G$4)+2;99);";";" ");" ";REPT(" ";99));99)) а дальше протянуть  :D
По вопросам из тем форума, личку не читаю.
 
СУПЕР! Спасибо!

А как сделать так, что бы формула показывала все слова после заданного и до знака ";" (у вас ведь так и сделано, если я правильно всё прочитал)
На данный момент только одно слово, а характеристика может состоять из нескольких.

Например по значению "Механизм" выдаёт "керамический", а нужно "керамический картридж".

За вариант с кодом так же спасибо.
Но писать на сотни характеристик отдельные функции не вариант...
Изменено: vikttur - 31.07.2021 23:28:25
 
Тут надо ии 5 лет ввместо 5 получаать или....
Все тогда еще проще, удаляем часть и все
=TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(MID([@Описание];SEARCH(CHAR(10)&G$4&" *;";[@Описание]&";")+LEN(G$4)+2;99);";";" ");" ";REPT(" ";99));99))
По вопросам из тем форума, личку не читаю.
 
Именно то, что нужно!
ОГРОМНОЕ спасибо!
 
Иван И., написал
Цитата
Но писать на сотни характеристик отдельные функции не вариант...
Цитата
все слова после заданного и до знака ";"
Если нужные характеристики указаны в строке 4, то макрос
Код
Sub iTable()
Dim i As Long
Dim iLastRow As Long
Dim j As Integer
 With CreateObject("VBScript.RegExp")
     .IgnoreCase = True
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  Range("G5:J" & iLastRow).ClearContents
    For i = 5 To iLastRow
      For j = 7 To 10
       .Pattern = Cells(4, j) & " (.+)(?=;)"
        If .test(Cells(i, 6)) Then
          Cells(i, j) = .Execute(Cells(i, 6))(0).SubMatches(0)
        Else
          Cells(i, j) = ""
        End If
      Next
    Next
 End With
End Sub
 
Kuzmich, можете приложить файл-пример с вашим кодом.  
 
Santiago,
Цитата
файл-пример с вашим кодом.
Так пример в первом сообщении
Вставьте макрос в стандартный модуль и запустите
Возможно для умной таблицы надо будет сделать изменения
 
в G2 и растянуть вниз и вправо
Код
=ПОДСТАВИТЬ(ПСТР(ИНДЕКС(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ($F5;СИМВОЛ(10);"</i><i>")&"</i></j>";"//i");ПОИСКПОЗ(1;ПОИСК(G$4;ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ($F5;СИМВОЛ(10);"</i><i>")&"</i></j>";"//i"));0));ДЛСТР(G$4)+1;100);";";"")
Изменено: Тимофеев - 02.08.2021 19:50:43
 
Тимофеев,  ну уж тут и не краткости и не универсальности и еще и скорость будет хромать.
По вопросам из тем форума, личку не читаю.
 
для меня это просто чтоб не забыть данную функцию тренировка
а вот из поста 3 Ваш пример в I5 должно быть керамический картридж а не просто керамический
Страницы: 1
Наверх