Страницы: 1
RSS
Сумма модулей, как посчитать сумму модулей в одной ячейке
 
Здравствуйте, подскажите пожалуйста как посчитать сумму диапазонов в 1 ячейке через запятую, допустим:
1-2, 2-4,4-10,10-15 в сумме это 14
пробовал через ИИ, не получилось
(нужна формула в эксель)
Изменено: Zagex - 06.03.2026 14:18:50
 
Цитата
написал:
1-2, 2-4,4-10,10-15 в сумме это 14
1-2+2-4+4-10+10-15=-14
Это минус 14.
 
Цитата
написал:
как посчитать сумму диапазонов в 1 ячейке
Например, вставить формулу
Код
=1-2+2-4+4-10+10-15

для модулей
Код
=ABS(1-2)+ABS(2-4)+ABS(4-10)+ABS(10-15)
Изменено: МатросНаЗебре - 06.03.2026 14:22:42
 
Цитата
МатросНаЗебре написал:
1-2+2-4+4-10+10-15=-14
Слишком просто нужно так
Код
=СУММ((1-2);(2-4);(4-10);(10-15))
 
Код
=1+СУММ((2-2);(4-4);(10-10))-15
Или так. Так ещё абсурднее :D  
 
Цитата
Zagex:  посчитать сумму диапазонов в 1 ячейке
Zagex, смотря что вы имеете в виду под "диапазоном"
...считайте что подогнал под ответ))
=СУММПРОИЗВ(ПСТР(ФИЛЬТР.XML("<l><i>"&ПОДСТАВИТЬ(ПОДСТАВИТЬ("1-2, 2-4,4-10,10-15";"-";"         ");",";"</i><i>")&"</i></l>";"//i");{1;9};9)*{-1;1})
 
Вариант вывода суммы модулей в ячейку с помощью пользовательской формы. :D
Код
Option Explicit
'v2
Private Sub CommandButton1_Click()
    ActiveCell.Formula = ConnectText
End Sub

Private Function ConnectText() As String
    Dim cb As Object, ss As String, iCount As Long
    ss = "="
    For Each cb In GetControlColection("TextBox")
        iCount = iCount + 1
        If IsNumeric(cb.Value) Then
            If iCount Mod 2 = 1 Then
                ss = ss & "+ABS("
            End If
            If cb.Value >= 0 Then
                ss = ss & "+" & cb.Value
            Else
                ss = ss & cb.Value
            End If
            If iCount Mod 2 <> 1 Then
                ss = ss & ")"
            End If
        End If
    Next
    ConnectText = ss
End Function

Private Function GetControlColection(sTypeName As String) As Collection
    Dim col As New Collection
    Dim cb As Control
    For Each cb In Me.Controls
        If TypeName(cb) = sTypeName Then
            col.Add cb
        End If
    Next
    Set GetControlColection = col
End Function

Изменено: МатросНаЗебре - 06.03.2026 16:35:12
 
Цитата
написал:
нужна формула в эксель
Добрый день. Вы приложите пример файла и всё станет ясно, что за диапазоны и что с чем складыватью  
 
"Старинный" вариант с диспетчером имен (ИИ уже должен знать).
Изменено: sokol92 - 06.03.2026 19:23:39
Владимир
 
чисто из математки сумма модулей выражений равна модулю суммы этих выражений.
по старинке - так
=SUMPRODUCT(--TEXT((MID(SUBSTITUTE(SUBSTITUTE(","&SUBSTITUTE(A1;" ";);",";REPT(" ";99));"-";REPT(" ";99)&"-");ROW(1:99)*99;99));"-#;#;0;\0"))
По вопросам из тем форума, личку не читаю.
 
Здравствуйте, Михаил!
Ваши формулы можно смело предлагать на международные олимпиады.   :)  
Владимир
 
Цитата
БМВ,  написал:
сумма модулей выражений равна модулю суммы этих выражений
Да ну что вы, это формулируется немного по другому - модуль суммы чисел не может превышать сумму модулей этих чисел. Равенство если все числа положительные.
 
Старичок,  я где то про числа писал? Естесвенно при этих условиях сортировки. но диапазон указывается обычно от меньшего к большему, а не наоборот а тогда
ABS(1-2)+ABS(2-4)+ABS(4-10)+ABS(10-15)=ABS((1-2)+(2-4)+(4-10)+(10-15))
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
=SUMPRODUCT(--TEXT((MID(SUBSTITUTE(SUBSTITUTE(","&SUBSTITUTE(A1;" ";);",";REPT(" ";99));"-";REPT(" ";99)&"-");ROW(1:99)*99;99));"-#;#;0;\0"))
Спасибо Вам огромное, помогло
дело в том что мне нужно посчитать количество пролётов между опорами ВЛ, для установки виброгасителей на них.
я обычно вручную этим занимался, мучался
а если у меня диапазон больше 100 допустим, тогда чет неверно считает
немножко доработал с ИИ, и всё отлично получается
Изменено: Zagex - 07.03.2026 08:14:04
 
Цитата
написал:
я где то про числа писал
off;
А разве математика это не про числа? И разве термин "модуль" можно применить к чему то кроме чисел?
 
Цитата
Zagex написал:
немножко доработал с ИИ, и всё отлично получается
А почему номер строки ИИ "доработал" начиная с 6? Ведь в таком случае расчет будет начиная с 6 модуля (и то частично).
Скрин

И еще непонятно, результат должен быть отрицательным или таки положительным?
Изменено: memo - 07.03.2026 10:54:21
Страницы: 1
Читают тему
Наверх