Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Разложить товары по пакетам
 
Добрый день!
Есть список с количеством продуктов по категориям, каждый из которых нужно разложить в пакеты так, чтобы:
а) в пакете было всего 6 категорий по одной штуке из каждой категории
б) себестоимость пакета в целом не  сильно разнилась от одного варианта к другому
Цель: Разложить все продукты (без остатка) в пакеты согласно описанным выше правилам
Реализовать нужно через макрос, который при нажатии кнопки отработает все возможные варианты пакетов без единого остатка штук товара
Пример:
Дано - 100 000 штук каждой категории
У каждой штуки своя себестоимость, которая при сборке пакета войдет в общую стоимость (например, себестоимость пакета - 300 рублей)
Задача: собрать все возможные варианты пакетов, чтобы ни осталось ни одной штуки, при этом чтобы себестоимость пакета не сильно варьировалась (то есть чтобы не было пакетов себестоимостью в 700 рублей)
У кого то подслушал, что это похоже на задачу о рюкзаке, но совсем не знаю как ее реализовать с помощью макроса ((
Пример файлика приложил, как считал вручную (V1, V2, V3 - варианты сборки пакета)
Спасибо заранее.
Макрос на суммирование значений по критерию с помощью циклов
 
Доброго времени суток.
Пользователи форума попросили ясно выразить суть проблемы. Думаю следующее объяснение будет понятно :)
Нужно с помощью VBA посчитать суммы по определенным критериям.
Например, есть два поля: Категория и Кол-во. Напротив каждой категории есть кол-во.
Шапки   100 шт
Шарфы 150 шт
Шапки    78 шт
Брюки     20 шт
Шарфы    10 шт
Брюки      18 шт
В результате должно получится три ячейки с суммами по каждой категории, то есть:
Шапки    178
Шарфы   160
Брюки      38
Это своего рода очень похоже на сводную таблицу, но сводной пользоваться запрещено и задачу проделать нужно с помощью макроса с использованием вложенных циклов и предусмотреть возможность добавления новой категории, то есть например если появится новая категория то должна появится новая ячейка с суммой по этой категории (все в точности как в сводной). Специальными функциями в роде worksheet.sum пользоваться нельзя, все только через циклы.
С помощью гугла получилось сделать следующее, но как оказалось промежуточная сумма sum должна быть только одна, а не несколько, плюс я подозреваю тут есть много лишнего:) :
Код
Private Sub CommandButton3_Click()

Dim i As Integer, j As Integer, k As Integer
Dim sumsc As Double
Dim sumc As Double
Dim sumf As Double
Dim iLastRow As Long

sumsc = 0
sumc = 0
sumf = 0
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
    
    With Worksheets("Sheet1")   
       For i = 2 To iLastRow               
           If Cells(i, 1) = [E1] And IsNumeric(Cells(i, 2)) Then        
              sumsc = sumsc + Cells(i, 2)        
           End If
       Next i

       For j = 2 To iLastRow
          If Cells(j, 1) = [F1] And IsNumeric(Cells(j, 2)) Then        
              sumc = sumc + Cells(j, 2)        
          End If      
        Next j   

        For k = 2 To iLastRow
           If Cells(k, 1) = [G1] And IsNumeric(Cells(k, 2)) Then        
               sumf = sumf + Cells(k, 2)        
           End If        
        Next k        
        
       [E2] = sumsc
       [F2] = sumc
       [G2] = sumf                         
    End With
End Sub
Очень надеюсь на вашу помощь.
Спасибо заранее.
Изменено: loctev - 03.02.2018 14:17:49 (Доступное разьяснение проблемы)
Страницы: 1
Наверх