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

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Не могу составить макрос для 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

Member
Joined
May 24, 2004
Messages
10
Reaction score
1
Пишешь макрос в модуле книги и цепляешь его например на кнопку на нужном листе. В макросе в цикле по количеству строкначинаешь суммировать кол-во вещей. выводишь на другой лист построчно. Как только сумма больше 150, то вычитаешь из последней строки превышение и повторяешь эту вещь с полученным превышением уже для новой машины. Снова суммируешь, но прибавляешь к остатку. И так до конца строк.
 

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Спасибо за ответ, если бы еще мини пример, было бы супер. А то я теоритически то понял, а вот практически не догоняю.
 

Zevs

Member
Joined
Oct 2, 2005
Messages
220
Reaction score
77
Age
21
Объявите переменные для:
  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
 

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Спасибо огромное! Помогли очень. Буду пробовать. Сам я в VBA туп как дерево, буду разбираться. Дай вам бог всего за отзывчивость и помощь!
 

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Вот неплохой вариант реализации. Подсказали на одном форуме. Люди, ламерский вопрос, не корите, только учусь, подскажите, что нужно добавить, чтобы этот макрос работал не на весь лист, а обраватывал только конкретный диапазон строк например с 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

Member
Joined
Oct 2, 2005
Messages
220
Reaction score
77
Age
21
Заменить
Code:
Do While Cells(i, 2) <> ""
...
Loop
на
Code:
For j = 25 To 64
...
Next j
Только тогда кидать все надо на другой лист или в столбцы правее. С Selection.Insert Shift:=xlDown работать нормально не будет.
 

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Спасибо, проблемму решил. Еще один чайниковский вопрос если можно. Дано: Два листа одной книги. На кажном листе по нескольку строк с данными. Количество строк в обоих листах заранее неизвестно. Нужно чтобы макрос брал строки из первого листа и переносил их во второй лист начиная с последней строки второго листа.
Как написать такой макрос не догоняю.

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

Zevs

Member
Joined
Oct 2, 2005
Messages
220
Reaction score
77
Age
21
Code:
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
 

prosims

Member
Joined
Dec 28, 2004
Messages
24
Reaction score
0
Спасибо огромное за помощь. Разобрался вы мне очень помогли.
Еще один мини вопрос, если можно:

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

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

Porterbery

Member
Joined
Jul 13, 2009
Messages
7
Reaction score
0
Age
37
Пожалуйста помогите. Я про макросы узнал совсем недавно(стыдно), но мне надо очень срочно сделать определенную работу.
есть 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
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Если по тупому (я excel не юзаю), то делай счетчик по условию. Типа:
=ЕСЛИ(A1=A2;B1+1;1)
подразумевая, что в столбце B счетчик, а в A идентификаторы (или значения - без разницы, если нет ошибок, если есть, то сделав два столбца со счетчиками, их можно сравнить).
Можно еще рядом завести столбец, как-то отмечающий, что товар последний, чтобы потом быстро по фильтру показать только значения.

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

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

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

Porterbery

Member
Joined
Jul 13, 2009
Messages
7
Reaction score
0
Age
37
Если по тупому (я 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. Но как мне теперь написать макрос, чтобы суммы получить все равно не понятно, изменил грубо говоря надписи на числа, а что дальше делать?
 
Last edited by a moderator:

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
... получил какие-то непонятные числа...что они мне дают??? Непойму что сравнивается?
Скачайте Аристотеля, учите логику.


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


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


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


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

Porterbery

Member
Joined
Jul 13, 2009
Messages
7
Reaction score
0
Age
37
интервал CMKOL
2.00 Отсутствует
10.00 Отсутствует
2.00 Отсутствует
2.60 Отсутствует
9.00 Отсутствует цемент за колонной
2.00 Сплошной
15.20 Сплошной
8.20 Сплошной
1.80 Сплошной
9.60 Сплошной
21.40 Сплошной
6.60 Сплошной
2.00 Сплошной
20.80 Сплошной
2.40 Сплошной
46.60 Сплошной
2.80 Сплошной
17.80 Сплошной
7.20 Сплошной
11.60 Сплошной
6.60 Сплошной
6.80 Сплошной
4.00 Сплошной
16.80 Сплошной
4.60 Сплошной
2.20 Сплошной
6.40 Сплошной
7.40 Сплошной
1.60 Частичный
41.40 Частичный
2.60 Частичный
3.20 Частичный
1.60 Частичный
1.60 Частичный
2.20 Частичный
4.80 Частичный
7.20 Частичный
7.40 Частичный
1.00 Частичный
1.40 Частичный
1.00 Частичный
3.80 Частичный
2.40 Частичный
2.00 Частичный
2.20 Частичный
49.40 Частичный
17.00 Частичный
9.40 Частичный
19.80 Частичный
4.80 Частичный
2.60 Частичный
1.20 Частичный
2.00 Частичный
левый столбец - это интервал в метрах, правый - это контакт цемента с колонной. Нужно посчитать сумму интервалов для каждого контакта.
 

Porterbery

Member
Joined
Jul 13, 2009
Messages
7
Reaction score
0
Age
37
похоже что никто ничем мне помочь не может:(
все равно спасибо за попытку...
 

Abraxas

ex-Team DUMPz
Premium Member
Platinum
GOLD
Joined
Sep 16, 2022
Messages
1,247
Reaction score
1,561
похоже что никто ничем мне помочь не может
фтыкай в формулы в столбце Д
_http://aleksandra.hotbox.ru/primer.xls
 

Porterbery

Member
Joined
Jul 13, 2009
Messages
7
Reaction score
0
Age
37
фтыкай в формулы в столбце Д
_http://aleksandra.hotbox.ru/primer.xls

Блин в экселе есть и такое?:) Спасибо. Теперь можно будут сделать мою работу быстрее, но мне уже поставили задачу намного сложнее этой....буду читать. Надо написать прогу, чтобы в экселе была кнопочка загрузить файл *.dbf и в этом файле некоторая последовательность действий...результат заносился в таблицу...АД!:bac:
Все равно, Огромное спасибо.
 

Abraxas

ex-Team DUMPz
Premium Member
Platinum
GOLD
Joined
Sep 16, 2022
Messages
1,247
Reaction score
1,561
буду читать
правильное решение. Ибо с новым заданием без макроса уже не обойтись, поэтому надо поискать ответы в специальной литературе или на специализированных форумах программистов.
 
Top