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

Есть выгрузка в формате excel, где в одном столбце текстом указан перечень услуг за единицу или единицы товаров, например:
"Услугу по организации сервиса для ABCA1234567 в период с 1 января"
или
"Услуги по предоставлению сервиса для DDDA7654321, BABC5463217"
и тд.

Необходимо вытащить из ячеек текст/значения (ABCA1234567,DDDA7654321, BABC5463217), которые всегда соответствую параметру 4 латинские буквы и 7 цифр.

Не знаю, существует ли какой-то набор формул, который позволит определить, что в ячейке есть значение, соответствующее условию "4 латинские буквы и 7 цифр". Помогите)

Спасибо.
Изменено: AlexEm - 24.11.2023 13:45:01
 
UDF на регулярках подойдет. на просторах интернета есть такая RegExpExtract
Изменено: V - 24.11.2023 14:06:08
 
Без VBA здесь не обойтись?
 
Код
=ТРАНСП(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;",";" ");" ";"</i><i>")&"</i></j>";
"//i[string-length()=11]
[not(number()=.)]
[translate(.,'1234567890','')!=.]
[translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')!=.]"))
Изменено: Тимофеев - 24.11.2023 15:50:56
 
Цитата
Тимофеев
СПАСИБО!!!
Изменено: AlexEm - 24.11.2023 15:57:54
 
Цитата
Необходимо вытащить из ячеек текст/значения
Код
Sub GetFragment()
Dim mo As Object
Dim n As Integer
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
With CreateObject("VBScript.RegExp")
  .Global = True
  .Pattern = "[A-D]{4}[0-9]{7}"
  For i = 1 To iLastRow
    If .Test(Cells(i, 1)) Then
      Set mo = .Execute(Cells(i, 1))
      For n = 0 To mo.Count - 1
        Cells(i, n + 2) = mo(n)
      Next
    End If
  Next
End With
End Sub
 
Для разнобразия
=ЕСЛИОШИБКА(ПСТР($A7;НАИМЕНЬШИЙ(ЕСЛИ((ПСТР($A7;СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A7)));1)=" ")*(ABS(КОДСИМВ(ПСТР($A7;СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A7)))+1;1)&0)-77,5)<13);СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A7))));ЧИСЛСТОЛБ($B7:B7))+1;11);"")
Страницы: 1
Наверх