Страницы: 1
RSS
Как вытащить из текста слово содержащее число, Если можно то сразу несколько через разделитель
 
Есть такие типы данных:
Тройник   равнопроходной DN150 (6") T=7,11 мм. ANSI B16.9 Материал - ASTM A 420   Gr. WPL6 класс 150
Из них нужно выбрать:
DN150, 6", T=7,11, B16.9, A420(если нет пробела), WPL6
Можно в любых вариациях, хотя бы первое число, или хотя бы числа без текста или даже просто число из слова содержащего это число.
Вообще было бы круто если бы стандартная функция "текст по столбцам" могла бы так разбивать текст исходя из слов с числами.  
Изменено: bortnik27 - 23.03.2018 13:17:10
 
Цитата
bortnik27 написал:
Вообще было бы круто если бы
Вы показали файл-пример. Исходные данные и ожидаемый результат.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Добрый день. При помощи UDF можно:
Код
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)
 
webley, после того как прошла эйфория помогите разобраться.
1.
Код
arr = Split(st, " ") 
'создаем массив и заносим значения разбив строку на отдельные слова используя пробел как разделитель?

можно ли разделитель взять как переменную задаваемую пользователем? и использовать не один разделитель а сразу 2-3?

Код
res(k) = Replace(Replace(arr(j), "(", ""), ")", "") 'удаляем кавычки, но почему два раза?

Если надо убрать еще " - такой знак, или любой другой надо пистать третий реплэйс?

Код
res(k) = Replace(Replace(Replace(arr(j), "(", ""), ")", ""), """, "") 

как то так?
Изменено: bortnik27 - 23.03.2018 14:57:08
 
Цитата
res(k) = Replace(Replace(arr(j), "(", ""), ")", "") 'удаляем кавычки, но почему два раза?
Удаляются не кавычки а открывающая и закрывающая скобки
 
Kuzmich, конечно скобки, оговорился. я хотел бы еще добавить удаление третьего знака, оно будет осуществляться через третий реплейс как я описал выше?
 
Цитата
bortnik27 написал:
можно ли разделитель взять как переменную задаваемую пользователем? и использовать не один разделитель а сразу 2-3?
да, можно разделитель брать из переменной. Если разделителя 2-3 - то надо сначала исходную строку с помощью replace привести к виду, когда все варианты разделителей будут приведены к одному и уже этот разделитель использовать в split
Цитата
bortnik27 написал:
Если надо убрать еще " - такой знак, или любой другой надо пистать третий реплэйс?
да. Только кавычки я обычно записываю как chr(34) - код более читаемый. Если таких символов, которые надо исключить будет достаточно много, то имеет смысл делать это через переменную последовательно. Например:
Код
st="Какая-то строка"
st=replace(st,")","")
st=replace(st,"(","")
st=replace(st,chr(34),"")
st=replace(st,...
 
вариант макроса,кнопки 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
Изменено: кузя1972 - 23.03.2018 23:17:42
Страницы: 1
Наверх