Сравнение списков с суммированием уникальных значений

Автор Dimchiko, 05.07.2023, 01:28

« назад - далее »

Dimchiko

Коллеги, подскажите, пожалуйста, как сравнить два списка: один общий со вторым, состоящим из уникальных значений первого?
Первый список - это перечень товаров и услуг с их количественными характеристиками, причем и товары, и услуги постоянно повторяются, с другими количественными характеристиками.
А второй список - должен быть результирующим от первого (по внешнему виду как на вкладке "нужная форма счета").
При этом:
Производство, Монтажи, Замеры, Доставка и Такелажные работы просто суммируются, а используемые материалы должны попасть в счет с количеством и ценой за ед.

Помогите, пожалуйста!

Serge 007

Здравствуйте

Не совсем понял задачу, попробую предположить (см. вложение)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Сергей, спасибо за помощь!
К сожалению, формулами нерационально. Лист "итог" - это лист, собирающий данные со многих смет (помните, чуть ранее Вы помогли мне с этим?). Мы уже пользуемся им, он отлично работает, но записей в нем может быть около 2 тыс.
Нужен макрос.

Алгоритм, как я понимаю, такой:
Ищем первую запись "Производство:" на листе "итог" в столбце B, начиная с ячейки B17. После того, как нашли - ищем ниже первую пустую ячейку в этом столбце и присваиваем значение в ячейке столбца F переменной. Скажем proizv.
Далее, ищем следующую запись "Производство:" на листе "итог" в столбце B. Найдя, снова ищем первую после этого пустую ячейку в столбце B и плюсуем к значению proizv зyачение ячейки в столбце. И так далее, пока не дойдем до последней заполненной строчки на листе "итог".
Значение proizv заносим в ячейку на листе "нужная форма счета" в ячейку F2.
С монтажами, замерами, доставками и такелажными работами - подход такой же.

С материалами - ситуация иная.
В итоговый счет они должны попадать не общей суммой, а порознь: материал 1, 50 м2 по цене 10 000 р/м2, итого 50 0000 р за материал 1....
И так по каждому материалу.
Тут вообще не понимаю...
По идее можно создать коллекцию с уникальными значениями материалов, занести их в счет сразу, а потом начать суммирование соответствующих значений из листа "итог"...Но вот как это облечь в код - понятия не имею...

Serge 007

Цитата: Dimchiko от 05.07.2023, 16:17Ищем первую запись "Производство:" на листе "итог" в столбце B, начиная с ячейки B17. После того, как нашли - ищем ниже первую пустую ячейку в этом столбце и присваиваем значение в ячейке столбца F переменной. Скажем proizv.
Далее, ищем следующую запись "Производство:" на листе "итог" в столбце B. Найдя, снова ищем первую после этого пустую ячейку в столбце B и плюсуем к значению proizv зyачение ячейки в столбце. И так далее, пока не дойдем до последней заполненной строчки на листе "итог".
Значение proizv заносим в ячейку на листе "нужная форма счета" в ячейку F2
Типа так?
    Sub Dimchiko()
    Dim LR&, proizvS$, proizvD&, proizvR&, rR1 As Range, rr2 As Range
    LR = Cells(Rows.Count, "A").End(xlUp).Row
    proizvS = "Производство:"
        For Each rR1 In Sheets("Итог").Range("b24:b" & LR)
            If rR1 = proizvS Then
            proizvD = rR1.Row
                For Each rr2 In Sheets("Итог").Range("b" & proizvD & ":b" & LR)
                    If IsEmpty(rr2) Then
                    proizvR = rr2.Offset(0, 4) + proizvR
                Exit For
                Else
                End If
                Next rr2
            End If
        Next rR1
        Sheets("нужная форма счета").Range("f2") = proizvR
End Sub
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Наверно)
У меня при выполнении этого макроса значение производства обозначилось равным 0....

Serge 007

Запускайте макрос, когда активен лист "Итог"
В этом случае будет не ноль в ячейке F2 листа "нужная форма счета", а сумма всех строк "Производство:" с учётом смещения вниз до первой пустой ячейки в столбце В и смещения вправо до столбца F
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Разобрался)
Почти
Сделал явно ссылку на 1 и 3 листы:
Sub Dimchiko()
    Dim LR&, proizvS$, proizvD&, proizvR&, rR1 As Range, rr2 As Range
    LR = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
    proizvS = "Производство:"
        For Each rR1 In Sheets(1).Range("b17:b" & LR)
            If rR1 = proizvS Then
            proizvD = rR1.Row
                For Each rr2 In Sheets(1).Range("b" & proizvD & ":b" & LR)
                    If IsEmpty(rr2) Then
                    proizvR = rr2.Offset(0, 4) + proizvR
                Exit For
                Else
                End If
                Next rr2
            End If
        Next rR1
        Sheets(3).Range("f2") = proizvR
End Sub

Но вылезла другая проблема: он выдает округленную до единиц сумму....
А надо без округлений - с копейками...

Dimchiko

сорри)
Variant поставил и все ок!
так....уже кое что!!!
Спасибо!!!
А с материалами подскажете как подсчитать и занести?

Serge 007

Это уже завтра
На мобильнике нет VBA, комп на работе
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko


Dimchiko

Еще момент: а если в ячейке будет написано, не "Замеры", а "Замеры "? с лишним пробелом. Как искать не по точному соответствию, а по...содержанию. Не знаю, как сказать. По символам, что ячейка содержит. Тот же вопрос про регистр букв. Если написать не "Замер", а "замер", то искать не будет...

Serge 007

Dimchiko, давайте новые вопросы оформлять отдельными темами
Правило: Одна тема - один вопрос
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Dimchiko

Цитата: Serge 007 от 06.07.2023, 08:46Dimchiko, давайте новые вопросы оформлять отдельными темами
Правило: Одна тема - один вопрос
Вас понял!
Оформлю отдельной темой!