Страницы: 1
RSS
Извлечь цифры из текста
 
Здравствуйте,
Есть столбик, где в каждой, друг за другом, ячейке идёт текст с цифрами.
например: сборка = 89458 сек; сек
                    резка = 652671 сек; сек

как сделать, чтобы в ячейке остались только цифры, если:
1. Текст разной длины (т.е. формула ПСТР не подойдёт)
2. В одной ячейке, могут быть несколько цифр
Изменено: Anastasia_023 - 05.04.2024 18:56:37
 
добрый день, по первому пробелу разделить?
 
Anastasia_023, Пример в файле приложите.
По вопросам из тем форума, личку не читаю.
 
Цитата
Anastasia_023 написал:
как сделать, чтобы в ячейке остались только цифры, если:1. Текст разной длины (т.е. формула ПСТР не подойдёт)
Это можно заменой сделать, ручками в Ctrl+H с *
 
Hugo,  я пробовала, но, когда в одной ячейке два предложения (пример прикреплён), то данный метод не работает.
мне просто нужно изъять цифры из предложений, чтобы их просуммировать.
когда таких строк мало, то, в принципе и руками можно посчитать, но, если из более 600, то тут уже трудновато  
 
БМВ, прикрепила  
 
Код
=СУММ(ЕСЛИОШИБКА(--ПСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"сек; сек";"=");"=";ПОВТОР(" ";99));99*СТРОКА($1:$5);99);0))
Массивная
Алексей М.
 
Макрос. Выделяете диапазон с данными для преобразования и запускаете макрос. Да, для переноса значений внутри ячейки в макросе используется перенос строки Chr(10) СИМВОЛ(10), можно заменить на пробелы " ".
 
Лет 10 назад писал для этого UDF
Код
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray ДИАПАЗОН())
'---------------------------------------------------------------------------------------
' Author       : Alex_ST, v__step, nerv
' URL          : http://www.excelworld.ru/forum/3-1012-97065-16-1401961860
' Topic        : Функция (UDF) "ИЗВЛЕЧЬЦЕЛЫЕ"
' Purpose      : Создать массив из целых чисел, извлечённых из текста произвольно расположенных ячеек
' Notes        : К полученному массиву-результату можно применять любые стандартные формулы листа
'---------------------------------------------------------------------------------------
   Dim rArea, rCell, sStr$, oMatches, i&, Arr()
   On Error GoTo xlErrEXIT
   For Each rArea In ДИАПАЗОН
      For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value)
         sStr = sStr & " " & rCell
      Next rCell
   Next rArea
   With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\d+": Set oMatches = .Execute(sStr): End With
   If oMatches.Count = 0 Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function      ' вернуть ошибку #Н/Д если чисел нет
   '   If oMatches Is Nothing Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function   ' вернуть ошибку #Н/Д если чисел нет
   ReDim Arr(1 To oMatches.Count)
   For i = 0 To oMatches.Count - 1: Arr(i + 1) = CLng(oMatches(i).Value): Next i
   ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr
xlErrEXIT:    If Err Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue)   ' вернуть ошибку #ЗНАЧ! если была ошибка
End Function
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Здравствуйте Макрос для выделенного диапазона. Останутся в ячейке только цифры.
Код
Sub enstaraldfsg()
Dim Tp1, i&, ArByt() As Byte
For Each Tp1 In Selection.Cells
ArByt = VBA.StrConv(Tp1, vbFromUnicode)
For i = 0 To UBound(ArByt)
If ArByt(i) < 48 Or ArByt(i) > 57 Then ArByt(i) = 0
Next i
Tp1.Value = VBA.Replace(VBA.StrConv(ArByt, vbUnicode), vbNullChar, vbNullString)
Next
End Sub
 
Для Excel 365:
=СУММ(--ВЗЯТЬ(ТЕКСТРАЗД(A1;"= ";" сек";;;);;-1))

Страницы: 1
Наверх