Тройник равнопроходной DN150 (6") T=7,11 мм. ANSI B16.9 Материал - ASTM A 420 Gr. WPL6 класс 150
Из них нужно выбрать: DN150, 6", T=7,11, B16.9, A420(если нет пробела), WPL6 Можно в любых вариациях, хотя бы первое число, или хотя бы числа без текста или даже просто число из слова содержащего это число. Вообще было бы круто если бы стандартная функция "текст по столбцам" могла бы так разбивать текст исходя из слов с числами.
Public Function PWN(st As String, part As Integer)
Dim arr() As String
Dim res()
Dim j As Integer, k As Integer
arr = Split(st, " ")
k = 0
For j = LBound(arr) To UBound(arr)
If arr(j) Like "*#*" Then
ReDim Preserve res(k)
res(k) = Replace(Replace(arr(j), "(", ""), ")", "")
k = k + 1
End If
Next j
If part > k Then
PWN = ""
Else
PWN = res(part - 1)
End If
End Function
webley, у меня нет цензурных слов как это круто и просто. самое оно, прям как я мечтал. невероятно круто (я не гиперэмоцианальный просто там 2000 позиций разбивать надо при том второй раз уже и текст по столбцам делает это хорошо только когда есть группа одинаковых позиций а там их (таких групп) овер 9000)
bortnik27 написал: можно ли разделитель взять как переменную задаваемую пользователем? и использовать не один разделитель а сразу 2-3?
да, можно разделитель брать из переменной. Если разделителя 2-3 - то надо сначала исходную строку с помощью replace привести к виду, когда все варианты разделителей будут приведены к одному и уже этот разделитель использовать в split
Цитата
bortnik27 написал: Если надо убрать еще " - такой знак, или любой другой надо пистать третий реплэйс?
да. Только кавычки я обычно записываю как chr(34) - код более читаемый. Если таких символов, которые надо исключить будет достаточно много, то имеет смысл делать это через переменную последовательно. Например:
вариант макроса,кнопки test и (очистка или макрос clean)
Код
Sub test()
Dim i&, j&, t$
With CreateObject("VBScript.RegExp"): .IgnoreCase = True
.Pattern = "(?:[\w=]+(?:\d+\.?,?(\d+)?)(\"")?|\d+\"")" : .Global = True
For j = 3 To Range("A" & Rows.Count).End(xlUp).Row: t = Range("A" & j)
For i = 0 To .Execute(t).Count - 1: Range("B" & j).Offset(, i) = .Execute(t)(i): Next i, j
End With
End Sub
Sub clean()
test
Dim t1$: t1 = Split(Range("A3").CurrentRegion.Address, "$")(3)
Range("B3:" & t1 & Range("B" & Rows.Count).End(xlUp).Row).ClearContents
End Sub