Страницы: 1
RSS
Как оставить из текста только числа, но так чтобы они суммировались
 
41389,34+1244,08 Самойлова Ирина Георгиевна - КУМ
66447,78 Ефимов Мари Викторовна - Тик

как оставить только числа в соседнюю ячейку, но так чтобы они суммировались a) 41389,34+1244,08 ее результат сложения b) 66447,78
Изменено: Goldenito - 11.05.2018 13:50:33
 
смотрите в файле в диспетчере имен
Код
Лень двигатель прогресса, доказано!!!
 
Сергей, спасибо огромное
 
Цитата
оставить только числа в соседнюю ячейку, но так чтобы они суммировались
UDF
Код
Function iSumma(cell As String) As Double
Dim mo As Object
Dim n As Integer
 With CreateObject("VBScript.RegExp")
   .Global = True
   .IgnoreCase = True
   .MultiLine = True
   .Pattern = "\d+,?\d+"
     If .test(cell) Then
       Set mo = .Execute(cell)
         For n = 0 To mo.Count - 1
           iSumma = iSumma + mo(n)
         Next
     End If
 End With
End Function
Изменено: Kuzmich - 11.05.2018 15:53:26
 
еще вариант: заменить в функции строку
Код
    Extract_Number_from_Text = sInsertWord
на строку
Код
    Extract_Number_from_Text = Application.Evaluate(Replace(sInsertWord, ",", "."))
 
Цитата
webley написал:
заменить в функции строку
прикольно получилось, спасибо
 
Kuzmich, спасибо. отлично вышло
 
Kuzmich, n As Integer, а числа дробные.
 
vikttur, n счетчик количества таких чисел
 
Цитата
Kuzmich написал:
оставить только числа в соседнюю ячейку, но так чтобы они суммировались
=iSumma(C19) если пустая ячейка показывает 0 как добавить в код строку, чтобы было пусто
 
Goldenito, изменил код в сообщении 4
 
Kuzmich, вылазит
#ЗНАЧ!
Изменено: Goldenito - 11.05.2018 15:27:05
 
Kuzmich, я понял... Не так прочитал..
 
Код
Function Nolik(txt, Optional s1 = 0, Optional s2 = "")
    Nolik = Replace(txt, s1, s2)
End Function
добавил, теперь работает так =Nolik(iSumma(C17))
 
Цитата
если пустая ячейка показывает 0 как добавить в код строку, чтобы было пусто
Исходный текст в столбце А, суммирование в столбце В
Код
Sub iSumma_()
Dim mo As Object
Dim n As Integer
Dim i As Long
Dim iLastRow As Long
Dim temp As Double
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("B1:B" & iLastRow).ClearContents
 With CreateObject("VBScript.RegExp")
   .Global = True
   .IgnoreCase = True
   .MultiLine = True
   .Pattern = "\d+,?\d+"
  For i = 1 To iLastRow
     If .test(Cells(i, 1)) Then
       Set mo = .Execute(Cells(i, 1))
           Cells(i, 2).NumberFormat = "#,##0.00"
         For n = 0 To mo.Count - 1
           temp = temp + mo(n)
         Next
         Cells(i, 2) = temp
     Else
        Cells(i, 2).NumberFormat = "@"
        Cells(i, 2) = ""
     End If
     temp = 0
  Next
 End With
End Sub
 
Kuzmich, а это функцией можно?
 
Goldenito,написал
Цитата
а это функцией можно?
В функции iSumma имеет тип Double, а вы при нуле хотите записать пустое значение, а это String.
Так что либо оставляете 0, либо используйте макрос
 
Kuzmich, понятно, тогда огромное спасибо
 
вариант к #4 чуть короче в столбце D данные в столбце  C
Код
Function bbb#(t$)
   Dim i&
With CreateObject("VBScript.RegExp"): .Pattern = "\d+,?(?:\d+)?": .Global = True
   For i = 0 To .Execute(t).Count - 1: bbb = bbb + .Execute(t)(i): Next
End With
End Function
Изменено: кузя1972 - 12.05.2018 05:29:28
 
кузя1972, спасибо
Страницы: 1
Наверх