Страницы: 1
RSS
Суммирование чисел из ячейки с текстом
 
Всем доброго времени суток.  Подскажите пожалуйста, в столбце E находится компонентный состав, сумма этих компонентов должна быть равна 100, как посчитать только числа и вывести сумму в столбец F?
 
И вам доброго
пробуйте
 
Код
=СУММ(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ(E2;";";"");" ";"</i><i>")&"</i></j>";"//i"))
 
Для Excel 365:
=LET(x;ТЕКСТРАЗД(E2;{";";" "});СУММ(ФИЛЬТР(--x;ЕЧИСЛО(--x))))
или
=СУММ(ЕСЛИОШИБКА(--ТЕКСТРАЗД(E2;{";";" "});0)
Изменено: Бахтиёр - 17.04.2024 10:37:16
 
Всем спасибо, пример Павел \Ʌ/ помог.
 
Здравствуйте Вариант с UDF
Код
Function Summa(Txt$)
Dim Sum1#, Sim$, i&, n&, Fl As Boolean: Const Zap$ = ",", Dob$ = "A"
Txt = Txt & Dob
For i = 1 To Len(Txt)
Sim = VBA.Mid(Txt, i, 1)
If VBA.IsNumeric(Sim) Or Sim = Zap Then
If Not Fl Then If i > n Then n = i: Fl = True
Else: If Fl Then Sum1 = Sum1 + VBA.CDbl(VBA.Mid(Txt, n, i - n)): Fl = False
End If
Next
Summa = Sum1
End Function
 
Цитата
посчитать только числа и вывести сумму в столбец F
Код
Sub GetSum()
Dim mo As Object
Dim n As Integer
Dim i As Long
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  Range("F2:F" & iLastRow).ClearContents
With CreateObject("VBScript.RegExp")
  .Global = True
  .Pattern = "\d+,\d+"
  For i = 2 To iLastRow
    If .Test(Cells(i, "E")) Then
      Set mo = .Execute(Cells(i, "E"))
      For n = 0 To mo.Count - 1
        Cells(i, "F") = Cells(i, "F") + CDbl(mo(n))
      Next
    End If
  Next
End With
End Sub
 
Такой вариант UDF должен быть шустрее, чем в сообщении 6
Код
Function Summa2(Text$) As Double
Dim Ar1() As Byte, Ar2() As Byte, i&, n&, Fl As Boolean: Const Dob$ = "A"
Ar1 = VBA.StrConv(Text & Dob, vbFromUnicode)
ReDim Ar2(UBound(Ar1))
For i = 0 To UBound(Ar1)
If (Ar1(i) >= 48 And Ar1(i) <= 57) Or Ar1(i) = 44 Then
Ar2(n) = Ar1(i): n = n + 1: Fl = True
Else
If Fl Then
Summa2 = Summa2 + VBA.CDbl(VBA.StrConv(Ar2, vbUnicode))
ReDim Ar2(UBound(Ar1)): Fl = False: n = 0
End If: End If: Next i
End Function
Страницы: 1
Наверх