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

Страницы: 1
Разложить товары по пакетам
 
up
Разложить товары по пакетам
 
up
Изменено: loctev - 19.04.2018 20:05:56
Разложить товары по пакетам
 
Inexsu
А можно это как то в макросе запрограммировать?
Как это можно сделать?
Я в программировании ку-ку ((

Спасибо
Разложить товары по пакетам
 
Цитата
Inexsu написал:
Кому верить?
Привет)
Верить файлу, так как данные по количеству товаров каждой категории всегда варьируются.
Цитата
Inexsu написал:
Под Ваши условия есть модель.
Какая модель, не подскажете?
Разложить товары по пакетам
 
Добрый день!
Есть список с количеством продуктов по категориям, каждый из которых нужно разложить в пакеты так, чтобы:
а) в пакете было всего 6 категорий по одной штуке из каждой категории
б) себестоимость пакета в целом не  сильно разнилась от одного варианта к другому
Цель: Разложить все продукты (без остатка) в пакеты согласно описанным выше правилам
Реализовать нужно через макрос, который при нажатии кнопки отработает все возможные варианты пакетов без единого остатка штук товара
Пример:
Дано - 100 000 штук каждой категории
У каждой штуки своя себестоимость, которая при сборке пакета войдет в общую стоимость (например, себестоимость пакета - 300 рублей)
Задача: собрать все возможные варианты пакетов, чтобы ни осталось ни одной штуки, при этом чтобы себестоимость пакета не сильно варьировалась (то есть чтобы не было пакетов себестоимостью в 700 рублей)
У кого то подслушал, что это похоже на задачу о рюкзаке, но совсем не знаю как ее реализовать с помощью макроса ((
Пример файлика приложил, как считал вручную (V1, V2, V3 - варианты сборки пакета)
Спасибо заранее.
Макрос на суммирование значений по критерию с помощью циклов
 
Hugo
Пробовал, но получилось не то.
Он просто копирует все категории в отдельные поля, не суммирует
Макрос на суммирование значений по критерию с помощью циклов
 
Цитата
Nordheim написал:
Нужно смотреть пример кода, я так не смогу сказать. Я не ориентируюсь на ваши записи.
Вот код:
Код
  Dim sum As Double
    For j = 5 To 7
    sum = 0
        For i = 2 To 1000    
            If Cells(i, 1) = Cells(1, j) Then
            sum = sum + Cells(i, 2) 
            End If  
    Next i
    Cells(2, j) = sum
    Next j
    End Sub
Nordheim
Но как я и говорил нужно допилить код с возможностью появления новой категории с заголовком и суммой в отдельной ячейки  
Изменено: loctev - 04.02.2018 13:19:50
Макрос на суммирование значений по критерию с помощью циклов
 
Nordheim
Спасибо большое! Вроде работает.
Касательно вопроса по новой категории: А если в тот же цикл добавить приравнивание новой категории к ячейке +1? то есть если для итоговых ячеек - Шапки [E2], Брюки [F2], Шарфы [G2] добавится новая например Пиджаки [H2], то есть columnindex + 1?? Возможно?
Макрос на суммирование значений по критерию с помощью циклов
 
Цитата
Nordheim написал:
А это
sum = 0  For j = 5 To 7      For i = 2 To 32
запишите так
For j = 5 To 7sum = 0      For i = 2 To 32
А как сделать конец цикла не фиксированным, а до последней заполненной строки?
То есть не To 32 а To "последняя заполненная строчка"
И можно ли учесть в этом вложенном цикле еще и возможность появления новой категории и также вывести сумму по ней в следующей ячейке с наименованием (без ручного ввода)?
Макрос на суммирование значений по критерию с помощью циклов
 
Hugo, Nordheim для более наглядного представления вкладываю пример файла.
Заранее спасибо!
Изменено: loctev - 03.02.2018 22:46:27
Макрос на суммирование значений по критерию с помощью циклов
 
А тут в чем ошибка?
Код
Sub Macro1()
 
Dim sum As Double
 
sum = 0
 
For j = 5 To 7 
    For i = 2 To 32         
        If Cells(i, 1) = Cells(i + 1, 1) Then         
             sum = sum + Cells(i, 2)        
        End If       
    Next i
 
   Cells(2, j) = sum 
Next j 
End Sub
Макрос на суммирование значений по критерию с помощью циклов
 
Да, конечно.
I, j - счетчики, на них нет ограничений
Есть ограничение на sum, в том смысле как на переменную, хранящую промежуточную сумму в выполнении цикла.
Я к тому что, не должно быть столько sumов сколько и категорий. Должна быть одна промежуточная переменная sum.
Например у нас 3 категории и для суммирования каждой категории я сделал на каждую категорию по одной переменной то есть, например sumShapkи, sumSharfy, sumBryuki) что не есть правильно. А потом просто взял эти 3 суммы присвоил ячейкам, где должен быть результат по каждой категории :) .
Вот кусок этого кода:
Код
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
Сразу задается вопрос, а если будет 20 новых категорий? нужно будет на каждую категорию прописывать новую переменную и задавать новый цикл?
Надеюсь верно изложил мысль.
Макрос на суммирование значений по критерию с помощью циклов
 
разрешаются вложенные циклы, условия if then, массивы.

Есть еще ограничение по промежуточной переменной sum - она должна быть одна. Я так полагаю поэтому и разрешается использовать вложенные циклы.
сейчас пробую сделать так, но почему то неправильно считает:
Код
Sub Macro1()
Dim sum As Double

   sum = 0

   For j = 5 To 7
       For i = 2 To 32     
           If Cells(i, 1) = Cells(i + 1, 1) Then        
               sum = sum + Cells(i, 2)        
           End If      
        Next i

        Cells(2, j) = sum
   Next j
End Sub
Изменено: loctev - 04.02.2018 00:05:39
Макрос на суммирование значений по критерию с помощью циклов
 
Я понимаю:) Все можно сделать и с помощью pivota
Но суть задачи в использовании циклов, такое ограничение к сожалению ((
Макрос на суммирование значений по критерию с помощью циклов
 
А возможно сделать без использования объектов и библиотек?
Мне подсказали, что можно выполнить с помощью вложенных циклов, но я не знаю как ((
Макрос на суммирование значений по критерию с помощью циклов
 
Доброго времени суток.
Пользователи форума попросили ясно выразить суть проблемы. Думаю следующее объяснение будет понятно :)
Нужно с помощью 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
Наверх