Не могу написать макрос в Excel

P

prosims

Не могу составить макрос для Excel. Бьюсь головой уже неделю.

Дано:

носки 45
трусы 43
штаны 75
майки 28
шубы 67
чай 56
кофе 54
сало 32


на машину помещается максимум 150 вещей. Нужно чтобы макрос брал из этого списка вещи и сортировал по 150 штук (по машинам), разбивая остаток на следующую машину.

то есть вот так:

Машина 1:

носки 45
трусы 43
штаны 62

Машина 2

штаны 13
майки 28
шубы 67
чай 52

Машина 3

чай 4
кофе 54
сало 32

Есть у кого-нибудь идея как проще всего это осуществить.

Заранее спасибо.
 

As_War

Местный
Регистрация
24 Май 2004
Сообщения
10
Реакции
1
Credits
29
Пишешь макрос в модуле книги и цепляешь его например на кнопку на нужном листе. В макросе в цикле по количеству строкначинаешь суммировать кол-во вещей. выводишь на другой лист построчно. Как только сумма больше 150, то вычитаешь из последней строки превышение и повторяешь эту вещь с полученным превышением уже для новой машины. Снова суммируешь, но прибавляешь к остатку. И так до конца строк.
 
P

prosims

Спасибо за ответ, если бы еще мини пример, было бы супер. А то я теоритически то понял, а вот практически не догоняю.
 

ZeVS

Специалист
Местный
Регистрация
2 Окт 2005
Сообщения
220
Реакции
77
Credits
10
Объявите переменные для:
  1. Счетчика строк списка товаров (i).
  2. Счетчика машин (m).
  3. Текущего количества товаров в машине (t).
  4. Счетчика строк формирумого списка (j).
Далее:
  1. Ставим все счетчики в 1, кол-во товаров в 0.
  2. Вывод заголовка "Машина № " + m в ячейку (j,4).
  3. Цикл while ... wend с условием на непустость ActiveSheet.Cells(i,1). Внутри цикла:
    • Добавляем кол-во товара в i-ой строке к t.
    • Если t<150, то выводим в строку j, в столбцы 4 и 5 название товара и его кол-во из ячеек i-ой строки столбцов 1 и 2, затем j=j+1. Иначе:
      • Выводим название и Cells(i,2)-(t-150),
      • j=j+1,
      • m=m+1,
      • вывод заголовка "Машина № " + m,
      • j=j+1,
      • если t>150, то вывод названия товара и t-150 в 4-ый и 5-ый столбцы, j=j+1,
      • в счетчик товаров заносим t-150.
  4. i=i+1
 
P

prosims

Спасибо огромное! Помогли очень. Буду пробовать. Сам я в VBA туп как дерево, буду разбираться. Дай вам бог всего за отзывчивость и помощь!
 
P

prosims

Вот неплохой вариант реализации. Подсказали на одном форуме. Люди, ламерский вопрос, не корите, только учусь, подскажите, что нужно добавить, чтобы этот макрос работал не на весь лист, а обраватывал только конкретный диапазон строк например с 25-й по 64ю.

i = 4
Sum = 0
Do While Cells(i, 2) <> ""
razn = 192 - Sum
If Cells(i, 3) < razn Then
Sum = Sum + Cells(i, 3)
ElseIf Cells(i, 3) > razn Then
Rows(i + 1).Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Cells(i + 2, 1) = Cells(i, 1)
Cells(i + 2, 2) = Cells(i, 2)
Cells(i + 2, 3) = Cells(i, 3) - razn
Cells(i, 3) = razn
i = i + 1
Sum = 0
ElseIf Cells(i, 3) = razn Then
Rows(i + 1).Select
Selection.Insert Shift:=xlDown
i = i + 1
Sum = 0
End If
i = i + 1
Loop
 

ZeVS

Специалист
Местный
Регистрация
2 Окт 2005
Сообщения
220
Реакции
77
Credits
10
Заменить
Код:
Do While Cells(i, 2) <> ""
...
Loop
на
Код:
For j = 25 To 64
...
Next j
Только тогда кидать все надо на другой лист или в столбцы правее. С Selection.Insert Shift:=xlDown работать нормально не будет.
 
P

prosims

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

Заранее спасибо, всем кто помогает.
 

ZeVS

Специалист
Местный
Регистрация
2 Окт 2005
Сообщения
220
Реакции
77
Credits
10
Код:
Public Sub copy()
Dim i As Integer, j As Integer
j = 1
While Worksheets(2).Cells(j, 1) <> ""
  j = j + 1
Wend
i = 1
While Worksheets(1).Cells(i, 1) <> ""
  Worksheets(2).Cells(j, 1) = Worksheets(1).Cells(i, 1)
  i = i + 1
  j = j + 1
Wend
End Sub
 
P

prosims

Спасибо огромное за помощь. Разобрался вы мне очень помогли.
Еще один мини вопрос, если можно:

Есть макрос который удаляет лист из книги. При удалении выскакивает постоянно эта тупая табличка типа "вы уверены что хотите удалить этот лист, тут могут содержаться зависимые ячейки, бла-бла-бла".

Вопрос, что нужно дописать в макрос, чтоб эта табличка не выскакивала.
 

Porterbery

Турист
Регистрация
13 Июл 2009
Сообщения
7
Реакции
0
Credits
14
Пожалуйста помогите. Я про макросы узнал совсем недавно(стыдно), но мне надо очень срочно сделать определенную работу.
есть 2 столбца(мне нужных). В одном числа, а в соседнем значения(слова,грубо говоря). Т.е.
21 Персики
12 Персики
11 Персики
11 ананасы
2 ананасы
134 анансы
12 абрикосы
12 киви

Мне нужен макрос, ктороый в "пустом" столбике пишет стороки с колличеством Персиков, ананасов, абрикосов и т.д. всего что у меня есть. Я отсортировал эти наименования, т.е. сначала все персики, потом все ананасы и т.д.
нужено чтобы макрос созлдавал столбик вида
21 Персики 44
12 Персики
11 Персики
11 ананасы 147
2 ананасы
134 анансы
12 абрикосы 12
12 киви 12
Очень срочно, я перерыл весь инет ничего не могу найти, уже начал руками делать, но это ОЧЕНЬ долго и муторно+это нужно делать раз в неделю, а каждую неделю это делать просто смерть.
Очень прошу помочь.
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Если по тупому (я excel не юзаю), то делай счетчик по условию. Типа:
=ЕСЛИ(A1=A2;B1+1;1)
подразумевая, что в столбце B счетчик, а в A идентификаторы (или значения - без разницы, если нет ошибок, если есть, то сделав два столбца со счетчиками, их можно сравнить).
Можно еще рядом завести столбец, как-то отмечающий, что товар последний, чтобы потом быстро по фильтру показать только значения.

P.S. С узбеков твоих причитается, а то б ждали еще пол года, пока ты их урюк сосчитаешь ))))

P.P.S. Если хочешь тоже самое, но красиво и правильно, рой куда-нить в сторону
=БДСУММ()

P.P.P.S. Надеюсь понятно, что это не макрос, а формула, и что ее надо правильно вписать в одну ячейку, а потом распространить (dblClick на правый нижний угол).
 
Последнее редактирование модератором:

Porterbery

Турист
Регистрация
13 Июл 2009
Сообщения
7
Реакции
0
Credits
14
Если по тупому (я excel не юзаю), то делай счетчик по условию. Типа:
=ЕСЛИ(A1=A2;B1+1;1)
подразумевая, что в столбце B счетчик, а в A идентификаторы (или значения - без разницы, если нет ошибок, если есть, то сделав два столбца со счетчиками, их можно сравнить).
Можно еще рядом завести столбец, как-то отмечающий, что товар последний, чтобы потом быстро по фильтру показать только значения.

P.S. С узбеков твоих причитается, а то б ждали еще пол года, пока ты их урюк сосчитаешь ))))

P.P.S. Если хочешь тоже самое, но красиво и правильно, рой куда-нить в сторону
=БДСУММ()

P.P.P.S. Надеюсь понятно, что это не макрос, а формула, и что ее надо правильно вписать в одну ячейку, а потом распространить (dblClick на правый нижний угол).

Все понятно, но ничего не понимаю чем это может помочь. Я сделал именно такой счетчик, т.е. эту формулу '=ЕСЛИ(D1=D2;C1+1;1)' прогнал её по всем ячейкам вниз и получил какие-то непонятные числа...что они мне дают??? Непойму что сравнивается?
мне нужно чтобы все значения в одном столбце(поле) которые относятся к одинаковые "идентификаторам" в другом суммировались в третий столбец напротив первого из идентичных "идентификаторов". Вроде бы несложная задача, но не знаю я как можно сделать, чтобы суммировались значения в зависимости от текста в соседнем поле???
Что такое БДСУММ???

Добавлено через 6 минут
Все понятно, но ничего не понимаю чем это может помочь. Я сделал именно такой счетчик, т.е. эту формулу '=ЕСЛИ(D1=D2;C1+1;1)' прогнал её по всем ячейкам вниз и получил какие-то непонятные числа...что они мне дают??? Непойму что сравнивается?
мне нужно чтобы все значения в одном столбце(поле) которые относятся к одинаковые "идентификаторам" в другом суммировались в третий столбец напротив первого из идентичных "идентификаторов". Вроде бы несложная задача, но не знаю я как можно сделать, чтобы суммировались значения в зависимости от текста в соседнем поле???
Что такое БДСУММ???

Пардон. С этим разобрался. Я про формулу для нахождения кто на кого похож.Только сделал так =ЕСЛИ(D1=D2;1;0) - т.е. если одинаковые наименования, то ставится 1, если разные - то 0, почему-то правда получается где одинаковые, но в первый раз - 0, а дальше 1. Но как мне теперь написать макрос, чтобы суммы получить все равно не понятно, изменил грубо говоря надписи на числа, а что дальше делать?
 
Последнее редактирование модератором:

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
... получил какие-то непонятные числа...что они мне дают??? Непойму что сравнивается?
Скачайте Аристотеля, учите логику.


Что такое БДСУММ???
RTFM (функция такая есть в excel).


С этим разобрался.
Аристотеля, наверное, скачали.


...изменил грубо говоря надписи на числа
Абсолютно бесполезное занятие - excel делает приведение типов автоматически. С таким же успехом могли одним числам поставить в соответствие другие и работать с ними.


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