Страницы: 1
RSS
Вытащить числа (+1 символ до пробела)
 
Всем привет. Подскажите как мне из исходников первого столбца получать второй? какой формулой? Тоесть нужно искать числа (наверное чтобы было проще первое число и брать его со всеми прилегающими символами до первого пробела (потому что иногда нужно взять одну букву прилегающую без пробела к числу)
 
Единую формулу сложно придумать (если только UDF)
Для строк с 3 по 12
=ПОДСТАВИТЬ(ПСТР(C3;ПОИСК(" ";C3);99);"скв.";"")
Согласие есть продукт при полном непротивлении сторон
 
Проблема в том, что там не всегда "скв.", может просто число стоять или может быть написано скважина. Я думаю может находить число (как точка входа) и заканчивать знаком пробела, либо априори брать число+1 символ (если буквы нет, то просто припишется пробел). Правда как формулу реализовать не пойму. Сделал один вариант, который просто числа хватает, но как букву приписать не пойму
Код
=СУММПРОИЗВ(ПСТР(0&C3; НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(--ПСТР(C3; СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C3))); 1)) * СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C3))); 0); СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C3))))+1; 1) * 10^СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C3)))/10)
 
Вариант. (Excel 2019+, массив)
Код
=ПОДСТАВИТЬ(СЦЕП(ЕСЛИОШИБКА(ПСТР(C3;ПОИСК({"скважина";"скв."};C3)+{9;4};ЕСЛИОШИБКА(ПОИСК(" ";C3;ПОИСК({"скважина";"скв."};C3)+{9;4});ДЛСТР(C3))-ПОИСК({"скважина";"скв."};C3)-{8;3});""));",";"")
 
Масивная
Код
=ПРОСМОТР(99^9;--ПСТР(C3;ПОИСКПОЗ(;ПСТР(C3;СТРОКА($1:$99);1)*0;);СТРОКА($1:$19)))&ЕСЛИ((КОДСИМВ(ПРАВБ(C3))>191)*ЕЧИСЛО(-ЛЕВБ(ПРАВБ(C3;2)));ПРАВБ(C3);"")
Алексей М.
 
Спасибо за предложенный вариант. Строки 6-13, 15 пустые у меня почему-то, при применении данной формулы(
 
=TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(MID(C3;MIN(FIND({0;1;2;3;4;5;6;7;8;9};C3&"0123456789"));99);",";" ");" ";REPT(" ";99);1);99))
Изменено: БМВ - 05.03.2024 11:19:29
По вопросам из тем форума, личку не читаю.
 
Цитата
Тимур Каримов написал:
Строки 6-13, 15
Возможно вы ввели не как массив (Ctrl + Shift + Enter)
 
Цитата
написал:
МасивнаяКод=ПРОСМОТР(99^9;--ПСТР(C3;ПОИСКПОЗ(;ПСТР(C3;СТРОКА($1:$99);1)*0;);СТРОКА($1:$19)))&ЕСЛИ((КОДСИМВ(ПРАВБ(C3))>191)*ЕЧИСЛО(-ЛЕВБ(ПРАВБ(C3;2)));ПРАВБ(C3);"")
Подскажите в какой версии Вы работаете? потому что у меня при обновлении формул выходит #Н/Д
 
Цитата
написал:
Возможно вы ввели не как массив (Ctrl + Shift + Enter)
Точно, большое спасибо)
 
Цитата
написал:
Подскажите в какой версии Вы работаете? потому что у меня при обновлении формул выходит #Н/Д
Вопрос снимаю, как массив заработало все, огромное спасибо
 
Цитата
написал:
=TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(MID(C3;MIN(FIND({0;1;2;3;4;5;6;7;8;9};C3&"0123456789"));99);",";" ");" ";REPT(" ";99);1);99))
Ваш вариант тоже работает. Спасибо большое
 
Тимур Каримов, Мой вариант, еще надо в СЖПРОБЕЛЫ() завернуть, не увидел что некоторые варианты в конце проходят с пробелом.
Код
=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(СЦЕП(ЕСЛИОШИБКА(ПСТР(C3;ПОИСК({"скважина";"скв."};C3)+{9;4};ЕСЛИОШИБКА(ПОИСК(" ";C3;ПОИСК({"скважина";"скв."};C3)+{9;4});ДЛСТР(C3))-ПОИСК({"скважина";"скв."};C3)-{8;3});""));",";""))
 
До кучи
=ТЕКСТ(СЖПРОБЕЛЫ(ПРАВБ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ЗАМЕНИТЬ(C3;2-ПРОСМОТР(;-ПОИСК({1:2:3:4:5:6:7:8:9:0}&"? ";C3&" "));999;);".";" ");" ";ПОВТОР(" ";99));99));"#;;;@")
 
И ещё
Код
=ФИЛЬТР.XML("<t><s>"&ПОДСТАВИТЬ(СТРОЧН(СЖПРОБЕЛЫ(ПОДСТАВИТЬ(C3;".";". ")));" ";"</s><s>")&"</s></t>";"//s[starts-with(preceding::*[1],'скв')]")
 
UDF
Код
Function iDigits(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "\d+[А-Я]?"
     If .Test(cell) Then
       iDigits = .Execute(cell)(0)
       If IsNumeric(iDigits) Then
         iDigits = CDbl(iDigits)
       End If
     Else
       iDigits = ""
     End If
 End With
End Function
 
Kuzmich, а вроде без букв находит, или показалось?


позволил себе изменить вашу функцию
Код
Function iDigits(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "(?:важина |скв\.)(\d+[ЁА-Я]?)"
     If .Test(cell) Then
     iDigits = .Execute(cell)(0).Submatches.Item(0)
     End If
 End With
End Function
Изменено: nilske - 05.03.2024 23:10:46 (добавлен код)
Страницы: 1
Наверх