Здравствуйте, Есть столбик, где в каждой, друг за другом, ячейке идёт текст с цифрами. например: сборка = 89458 сек; сек резка = 652671 сек; сек
как сделать, чтобы в ячейке остались только цифры, если: 1. Текст разной длины (т.е. формула ПСТР не подойдёт) 2. В одной ячейке, могут быть несколько цифр
Hugo, я пробовала, но, когда в одной ячейке два предложения (пример прикреплён), то данный метод не работает. мне просто нужно изъять цифры из предложений, чтобы их просуммировать. когда таких строк мало, то, в принципе и руками можно посчитать, но, если из более 600, то тут уже трудновато
Макрос. Выделяете диапазон с данными для преобразования и запускаете макрос. Да, для переноса значений внутри ячейки в макросе используется перенос строки Chr(10) СИМВОЛ(10), можно заменить на пробелы " ".
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