Страницы: 1 2 След.
RSS
Сложение чисел с разделителем, по условию, Сложение чисел с разделителем, по условию
 
Добрый день! Прошу помощи, всю голову сломал. Необходимо просуммировать значения по условию. Информация во вложенном файле.  
 
Вариант с дополнительным столбцом.
В ячейку O4 вставьте формулу и протяните до ячейки P24:
Код
=ЕСЛИОШИБКА(ЗНАЧЕН(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ($D4;"/";ПОВТОР(" ";10));10*(СТОЛБЕЦ(A:A)-1)+1;10)));0)
В ячейку D29 вставьте формулу:
Код
=СУММЕСЛИМН($O$4:$O$24;$A$4:$A$24;$A29)&"/"&СУММЕСЛИМН($P$4:$P$24;$A$4:$A$24;$A29)
 
Sonicreality, если до и после слеша только цифры, то можно так =SUMPRODUCT(($A$4:$A$24=$A29);IFERROR(--LEFT($D$4:$D$24;1);0))&"/"&SUMPRODUCT(($A$4:$A$24=$A29)*IFERROR(--RIGHT($D$4:$D$24;1);0))
 
Цитата
написал:
=SUMPRODUCT(($A$4:$A$24=$A29);IFERROR(--LEFT($D$4:$D$24;1);0))&"/"&SUMPRODUCT(($A$4:$A$24=$A29)*IFERROR(--RIGHT($D$4:$D$24;1);0))
Почти работает! Только получилось 0/9, правая часть считается нормально!
 
Цитата
написал:
Вариант с дополнительным столбцом.
Благодарю за вариант! Только ввод дополнительного столбца крайне не желателен. Таблица очень огромная. Желательно ее не утяжелять. Оно и так-то бог его знает как будет работать.
 
Цитата
Sonicreality написал:
получилось 0/9
замените перед первым ЕСЛИОШИБКА ; на *

Код
=СУММПРОИЗВ(($A$4:$A$24=$A29)*ЕСЛИОШИБКА(--ЛЕВСИМВ($D$4:$D$24;1);0))&"/"&СУММПРОИЗВ(($A$4:$A$24=$A29)*ЕСЛИОШИБКА(--ПРАВСИМВ($D$4:$D$24;1);0))
Изменено: bigorq - 03.04.2026 12:58:15
 
Не все корректно считает  
 
Цитата
Sonicreality написал:
Не все
я писал выше    
Цитата
bigorq написал:
если до и после слеша только цифры
11 и 15 уже число :)

до 5 значных чисел
Код
=SUMPRODUCT(($A$4:$A$24=$A29)*IFERROR(--TRIM(LEFT(SUBSTITUTE($D$4:$D$24;"/";REPT(" ";10));5));0))&"/"&SUMPRODUCT(($A$4:$A$24=$A29)*IFERROR(--TRIM(RIGHT(SUBSTITUTE($D$4:$D$24;"/";REPT(" ";10));5));0))
Изменено: bigorq - 03.04.2026 13:24:11
 
Код
Option Explicit
'v2
Function СУММЕСЛИДРОБЬ(диапазон_суммирования As Range, диапазон_условия As Range, условие As Variant) As String
    Const delimeter = "/"
    
    Dim aSumm As Variant, aCond As Variant
    aSumm = диапазон_суммирования.Value
    aCond = диапазон_условия.Resize(диапазон_суммирования.Rows.Count).Value
    
    Dim ya As Long, xb As Long, arr As Variant, brr As Variant
    For ya = 1 To UBound(aSumm, 1)
        If aCond(ya, 1) = условие Then
            arr = Split(aSumm(ya, 1), delimeter)
            If IsEmpty(brr) Then
                ReDim brr(LBound(arr) To UBound(arr))
            ElseIf UBound(arr) > UBound(brr) Then
                ReDim Preserve brr(LBound(brr) To UBound(arr))
            End If
            For xb = LBound(arr) To UBound(arr)
                If IsNumeric(arr(xb)) Then
                    brr(xb) = CLng(brr(xb)) + CLng(arr(xb))
                End If
            Next
        End If
    Next
    СУММЕСЛИДРОБЬ = Join(brr, delimeter)
End Function

Изменено: МатросНаЗебре - 03.04.2026 13:56:20 (Сделал для произвольного количества элементов 1/2/3...)
 
Точно, мой косяк. Не придал значения, в потоке информации, сему факту  :(  
 
МатросНаЗебре! Огромное спасибо! Все работает как нужно!  
 
Подскажите вот, что еще пожалуйста.
Какие правки в макрос нужно внести, что бы он работал по строкам?
 
вариант:
в D29:
=СУММПРОИЗВ(($A$4:$A$24=$A29)*ТЕКСТ(ЛЕВБ(D$4:D$24;ПОИСК("/";D$4:D$24&"/")-1);"0;;0;\0"))&"/"&СУММПРОИЗВ(($A$4:$A$24=$A29)*ТЕКСТ(ПСТР(D$4:D$24;ПОИСК("/";D$4:D$24&"/")+1;9);"0;;0;\0"))
в N4:
=СУММПРОИЗВ(-ТЕКСТ(ЛЕВБ(D4:M4;ПОИСК("/";D4:M4&"/")-1);"-0;;0;\0"))&"/"&СУММПРОИЗВ(-ТЕКСТ(ПСТР(D4:M4;ПОИСК("/";D4:M4&"/")+1;9);"-0;;0;\0"))
 
В этом варианте считает и для строк. Плюс добавилась возможность обработки более двух элементов 1/2/3...
Код
'v3
Function СУММЕСЛИДРОБЬ(диапазон_суммирования As Range, диапазон_условия As Range, условие As Variant) As String
    Const delimeter = "/"
    
    Dim aSumm As Variant, aCond As Variant
    aSumm = диапазон_суммирования.Value
    aCond = диапазон_условия.Resize(диапазон_суммирования.Rows.Count, диапазон_суммирования.Columns.Count).Value
    
    Dim ya As Long, xa As Long, xb As Long, arr As Variant, brr As Variant
    For ya = 1 To UBound(aSumm, 1)
        For xa = 1 To UBound(aSumm, 2)
            If aCond(ya, xa) = условие Then
                arr = Split(aSumm(ya, xa), delimeter)
                If IsEmpty(brr) Then
                    ReDim brr(LBound(arr) To UBound(arr))
                ElseIf UBound(arr) > UBound(brr) Then
                    ReDim Preserve brr(LBound(brr) To UBound(arr))
                End If
                For xb = LBound(arr) To UBound(arr)
                    If IsNumeric(arr(xb)) Then
                        brr(xb) = CLng(brr(xb)) + CLng(arr(xb))
                    End If
                Next
            End If
        Next
    Next
    СУММЕСЛИДРОБЬ = Join(brr, delimeter)
End Function
Изменено: МатросНаЗебре - 03.04.2026 14:30:50
 
Немного непонятно выразился. Прикладываю пример.
 
Цитата
Немного непонятно выразился. Прикладываю пример. Прикрепленные файлы tест2.xlsx  (13.1 КБ)
те же "гвозди" только поперёк:
диапазоны сделать по строкам и закрепить по столбцу
Sonicreality, справитесь?
 
Да это понятно. Макрос при транспонировании таблицы и попытке провернуть тоже самое, но не по столбцам, а по строкам выдает пустое значение. Ну то есть /.
 
Цитата
написал:
е же "гвозди" только поперёк
Немного не те же все-таки  
 
=СУММПРОИЗВ(($A$3:$Y$3=Z$3)*ТЕКСТ(ЛЕВБ(A$4:Y$4;ПОИСК("/";A$4:Y$4&"/")-1);"0;;0;\0"))&"/"&СУММПРОИЗВ(($A$3:$Y$3=Z$3)*ТЕКСТ(ПСТР(A$4:Y$4;ПОИСК("/";A$4:Y$4&"/")+1;9);"0;;0;\0"))
 
Макрос из #14 выдаёт 4/13.
Какую формулу в ячейку написали?
 
У меня выдает 1/4 или не выдает ничего и просто показывает формулу, как-будто вкл отображение формул
 
Для 2021+
Код
=СУММ(ФИЛЬТР.XML("<l><i>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ("/";1;ФИЛЬТР($A4:$Y4;$A$3:$Y$3=Z$3;0));"/";"</i><i>")&"</i></l>";"//i[position() mod 2 = 1]"))&"/"&СУММ(ФИЛЬТР.XML("<l><i>"&ПОДСТАВИТЬ(ОБЪЕДИНИТЬ("/";1;ФИЛЬТР($A4:$Y4;$A$3:$Y$3=Z$3;0));"/";"</i><i>")&"</i></l>";"//i[position() mod 2 = 0]"))
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sonicreality написал: как-будто вкл отображение формул
Формат ячейки измените на Общий и введите формулу заново
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
У меня выдает 1/4 или не выдает ничего
Цитата
написал:
Макрос из #14
Пристально вглядываемся в строку после "из"
:D

Цитата
написал:
и просто показывает формулу, как-будто вкл отображение формул
Уберите Текстовый формат у ячейки.
 
Цитата
написал:
Для 2021+
К сожалению 2016 =(
Изменено: Sonicreality - 03.04.2026 16:18:27
 
Я про версию Excel, начиная с которой будет работать моя формула.
Про 2026-ю не слышал, но в любом случае она младше 2021, так что вариант рабочий.
Вы даже не попробовали, видимо
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Я про версию Excel, начиная с которой будет работать моя формула. Про 2026-ю не слышал, но в любом случае она младше 2021, так что вариант рабочий. Вы даже не попробовали, видимо
Опечатка 2016
 
Цитата
написал:
Пристально вглядываемся в строку после "из"
Точно! Прошу прощения! На тестовом файле работает. А на рабочем, вероятно из-за наличия формул в диапазоне вычислений, нет! Это может быть как-то связано?  
 
Цитата
написал:
но в любом случае она младше 2021, так что вариант рабочий
Я даже не берусь этого отрицать! Огромное спасибо!
 
Цитата
написал:
на рабочем, вероятно из-за наличия формул в диапазоне вычислений, нет! Это может быть как-то связано?  
Не должно. Приложите неработающий пример. Достаточно одну строку.
Страницы: 1 2 След.
Читают тему
Наверх