Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Оптимизация наполнения контейнера vba - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация наполнения контейнера vba (Макросы/Sub)
Оптимизация наполнения контейнера vba
vlad0912 Дата: Вторник, 12.01.2016, 14:08 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Здравствуйте, столкнулся с некой логистической задачей, не могу придумать как ее решить
В приложении файл с примером.

В колонке AY - объем (m3), который занимает артикул (одна строка один артикул)
В колонке AW - пары артикулов, которые нужно положить вместе в один контейнер
В колонке H нужно проставить номер упакованного контейнера - 1,2 и тд.

Контейнер считается заполненным, когда в сумме объем достигает от 67 до 70,5 m3
Если пара (например pair 1) занимает объем меньший чем 67 m3 то соответственно в этот контейнер можно положить другие пары, е а так же артикула без пар, если в сумме объме не будет превышать 70,5
Если пара (например pair 10) занимает в сумме обьъем больше чем 70,5 то в таком случае ее нужно разбить на 2 контейтера, добавив соответственно артикулов до объема от 67 до 70,5

Очень надеюсь что вы сможете помочь мне с этим.
К сообщению приложен файл: DRS_booking_1.xls(75Kb)
 
Ответить
СообщениеЗдравствуйте, столкнулся с некой логистической задачей, не могу придумать как ее решить
В приложении файл с примером.

В колонке AY - объем (m3), который занимает артикул (одна строка один артикул)
В колонке AW - пары артикулов, которые нужно положить вместе в один контейнер
В колонке H нужно проставить номер упакованного контейнера - 1,2 и тд.

Контейнер считается заполненным, когда в сумме объем достигает от 67 до 70,5 m3
Если пара (например pair 1) занимает объем меньший чем 67 m3 то соответственно в этот контейнер можно положить другие пары, е а так же артикула без пар, если в сумме объме не будет превышать 70,5
Если пара (например pair 10) занимает в сумме обьъем больше чем 70,5 то в таком случае ее нужно разбить на 2 контейтера, добавив соответственно артикулов до объема от 67 до 70,5

Очень надеюсь что вы сможете помочь мне с этим.

Автор - vlad0912
Дата добавления - 12.01.2016 в 14:08
китин Дата: Вторник, 12.01.2016, 14:14 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3685
Репутация: 573 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
а здесь и тут посмотрите.может поможет


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениеа здесь и тут посмотрите.может поможет

Автор - китин
Дата добавления - 12.01.2016 в 14:14
vlad0912 Дата: Вторник, 12.01.2016, 14:31 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
китин, задачи похожи, но тем не менее не идентичны.
В уровне VBA не дошел еде до уровня написания таких сложных алгоритмов, поэтому надеюсь на помощь с написанием кода)
Заранее благодарю гениального человека.
 
Ответить
Сообщениекитин, задачи похожи, но тем не менее не идентичны.
В уровне VBA не дошел еде до уровня написания таких сложных алгоритмов, поэтому надеюсь на помощь с написанием кода)
Заранее благодарю гениального человека.

Автор - vlad0912
Дата добавления - 12.01.2016 в 14:31
vlad0912 Дата: Среда, 13.01.2016, 14:01 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
друзья помогите
 
Ответить
Сообщениедрузья помогите

Автор - vlad0912
Дата добавления - 13.01.2016 в 14:01
SLAVICK Дата: Четверг, 14.01.2016, 11:26 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 1922
Репутация: 650 ±
Замечаний: 0% ±

2007,2010,2013,2016
Как-то так. Наверное можно и оптимальнее, но для поиска решений - очень много переменных - не вытянул. Поэтому формулами.
Обратите внимание на сортировку.
К сообщению приложен файл: DRS_booking_1-1.xlsx(62Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеКак-то так. Наверное можно и оптимальнее, но для поиска решений - очень много переменных - не вытянул. Поэтому формулами.
Обратите внимание на сортировку.

Автор - SLAVICK
Дата добавления - 14.01.2016 в 11:26
vlad0912 Дата: Пятница, 15.01.2016, 12:00 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
SLAVICK, огромное спасибо, это что-то невероятное!)
Выглядит очень круто, жалко пока не могу ничего понять)

Все правильно считается, условия сюблюдаются, просто бомба.
Единственное, не соблюдаеатся одно условие, что в случае если объем не дотягивает до 67 m3, то номер контейнера всеравно проставляется (как например контейнер 13 и 14), хотя в этом случае он не должен заполнять контейнер, так как он не укладывается по объему.

+ таблица с данными будет постоянно изменяться, и все вплоть до той таблицы, которую я изначально приложил, считается при помощи макроса (удаляются лишние строки, выделяются пары артикулов и тд). То есть все столбцы будут распологаться в том же порядке что и сейчас, но данные о парах, объемах и тд всегда будут разные.

Я знаю что количетсво строк в любом случае не будет превышать 20 000, и можно было бы допустим оставить страницу с формулами перед запуском макроса как бы на отдельной вкладке (например SHEET(FORMULA) где формула начинается с колонки BB в данном случае, а когда он прокручивает его до финального шага он бы копировал просто хаполненный массив данных во вкладку formula и все бы считалось. Как сделать чтобы это работало таким образом?
 
Ответить
СообщениеSLAVICK, огромное спасибо, это что-то невероятное!)
Выглядит очень круто, жалко пока не могу ничего понять)

Все правильно считается, условия сюблюдаются, просто бомба.
Единственное, не соблюдаеатся одно условие, что в случае если объем не дотягивает до 67 m3, то номер контейнера всеравно проставляется (как например контейнер 13 и 14), хотя в этом случае он не должен заполнять контейнер, так как он не укладывается по объему.

+ таблица с данными будет постоянно изменяться, и все вплоть до той таблицы, которую я изначально приложил, считается при помощи макроса (удаляются лишние строки, выделяются пары артикулов и тд). То есть все столбцы будут распологаться в том же порядке что и сейчас, но данные о парах, объемах и тд всегда будут разные.

Я знаю что количетсво строк в любом случае не будет превышать 20 000, и можно было бы допустим оставить страницу с формулами перед запуском макроса как бы на отдельной вкладке (например SHEET(FORMULA) где формула начинается с колонки BB в данном случае, а когда он прокручивает его до финального шага он бы копировал просто хаполненный массив данных во вкладку formula и все бы считалось. Как сделать чтобы это работало таким образом?

Автор - vlad0912
Дата добавления - 15.01.2016 в 12:00
SLAVICK Дата: Пятница, 15.01.2016, 12:55 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 1922
Репутация: 650 ±
Замечаний: 0% ±

2007,2010,2013,2016
если объем не дотягивает до 67 m3, то номер контейнера всеравно проставляется

А как Вы хотели - оставить пусто на все товары, которые в этих контейнерах?
То есть все столбцы будут распологаться в том же порядке что и сейчас, но данные о парах, объемах и тд всегда будут разные

Это не страшно - главное выполнить сортировку от Я до А по объему - а потом от Я до А по парам.
Также нужно менять количество столбцов справа таблицы - увеличивая их количество до количества нужных контейнеров + запас.
количества нужных контейнеров = Сколько контейнеров нужно для 20000 товаров из расчета:
Код
количества нужных контейнеров = сумма объема всех товаров / 70,5
Запас - произвольная величина - если честно даже не знаю сколько контейнеров нужно запаса для 20000 товаров %) .

а когда он прокручивает его до финального шага он бы копировал просто хаполненный массив данных во вкладку formula и все бы считалось
Проще всего создать копию этого листа и просто вставлять данные в левую часть, потом сортировать , потом протягивать формулы до последней строки. Количество столбцов для контейнеров нужно или сразу поставить с запасом(Если будет очень много - возможны тормоза), или макросом протягивать.

Как сделать чтобы это работало таким образом?
Это уже другой вопрос = другая тема.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
если объем не дотягивает до 67 m3, то номер контейнера всеравно проставляется

А как Вы хотели - оставить пусто на все товары, которые в этих контейнерах?
То есть все столбцы будут распологаться в том же порядке что и сейчас, но данные о парах, объемах и тд всегда будут разные

Это не страшно - главное выполнить сортировку от Я до А по объему - а потом от Я до А по парам.
Также нужно менять количество столбцов справа таблицы - увеличивая их количество до количества нужных контейнеров + запас.
количества нужных контейнеров = Сколько контейнеров нужно для 20000 товаров из расчета:
Код
количества нужных контейнеров = сумма объема всех товаров / 70,5
Запас - произвольная величина - если честно даже не знаю сколько контейнеров нужно запаса для 20000 товаров %) .

а когда он прокручивает его до финального шага он бы копировал просто хаполненный массив данных во вкладку formula и все бы считалось
Проще всего создать копию этого листа и просто вставлять данные в левую часть, потом сортировать , потом протягивать формулы до последней строки. Количество столбцов для контейнеров нужно или сразу поставить с запасом(Если будет очень много - возможны тормоза), или макросом протягивать.

Как сделать чтобы это работало таким образом?
Это уже другой вопрос = другая тема.

Автор - SLAVICK
Дата добавления - 15.01.2016 в 12:55
miver Дата: Суббота, 16.01.2016, 12:47 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
vlad0912, Вот мой вариант. Он не оптимальный и не учтены некоторые особенности ТЗ
- Если пара превышать 70,5 - ничего не происходит
- Объемы без пар, которые никуда не попали в пары, останутся нераспределенными
К сообщению приложен файл: DRS_booking_m.zip(29Kb)
 
Ответить
Сообщениеvlad0912, Вот мой вариант. Он не оптимальный и не учтены некоторые особенности ТЗ
- Если пара превышать 70,5 - ничего не происходит
- Объемы без пар, которые никуда не попали в пары, останутся нераспределенными

Автор - miver
Дата добавления - 16.01.2016 в 12:47
miver Дата: Суббота, 16.01.2016, 12:59 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Добавил разбиение пары при превышении 70,5
К сообщению приложен файл: 0842051.zip(29Kb)
 
Ответить
СообщениеДобавил разбиение пары при превышении 70,5

Автор - miver
Дата добавления - 16.01.2016 в 12:59
SLAVICK Дата: Суббота, 16.01.2016, 15:06 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 1922
Репутация: 650 ±
Замечаний: 0% ±

2007,2010,2013,2016
miver, Так не совсем корректно - по Вашему макросу нужно аж 16 контейнеров :o - у меня по файлу влазит в 14
Если есть желание - можете взять мой алгоритм и подкорректировать свой макрос с его учетом ;)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениеmiver, Так не совсем корректно - по Вашему макросу нужно аж 16 контейнеров :o - у меня по файлу влазит в 14
Если есть желание - можете взять мой алгоритм и подкорректировать свой макрос с его учетом ;)

Автор - SLAVICK
Дата добавления - 16.01.2016 в 15:06
vlad0912 Дата: Понедельник, 25.01.2016, 08:24 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
miver, SLAVICK,
Тут так много контейнеров получилось, потому что не соблюлось условие что минимальная загрузка контейнера должна составлять 67, максимальная 70,5 соблюдается.
Помогите пожалуйста подкорректировать макрос учитывая этот комментарий, пожаалуйста!
 
Ответить
Сообщениеmiver, SLAVICK,
Тут так много контейнеров получилось, потому что не соблюлось условие что минимальная загрузка контейнера должна составлять 67, максимальная 70,5 соблюдается.
Помогите пожалуйста подкорректировать макрос учитывая этот комментарий, пожаалуйста!

Автор - vlad0912
Дата добавления - 25.01.2016 в 08:24
miver Дата: Понедельник, 25.01.2016, 23:51 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
vlad0912, Полностью переделал.
Подбирает как можно ближе к 70,5 жадным методом с учетом наполнения 67
К сообщению приложен файл: DRS_booking_m2.zip(35Kb)


Сообщение отредактировал miver - Вторник, 26.01.2016, 00:05
 
Ответить
Сообщениеvlad0912, Полностью переделал.
Подбирает как можно ближе к 70,5 жадным методом с учетом наполнения 67

Автор - miver
Дата добавления - 25.01.2016 в 23:51
vlad0912 Дата: Вторник, 26.01.2016, 08:45 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
miver, все это очень круто, но к сожалению не до конца верно работает(
так, к примеру, у нас собирается контейнер 14, который в сумме занимает объем 44 (по идее он не должен собираться, так как его объем меньше 67 в сумме и поле должно оставаться пустым), имея при этом небольшие объемы (0,60 и 0,71), которые влезли бы например в догонку в контейнер 11.

Сможете помочь с этим? pray
 
Ответить
Сообщениеmiver, все это очень круто, но к сожалению не до конца верно работает(
так, к примеру, у нас собирается контейнер 14, который в сумме занимает объем 44 (по идее он не должен собираться, так как его объем меньше 67 в сумме и поле должно оставаться пустым), имея при этом небольшие объемы (0,60 и 0,71), которые влезли бы например в догонку в контейнер 11.

Сможете помочь с этим? pray

Автор - vlad0912
Дата добавления - 26.01.2016 в 08:45
miver Дата: Вторник, 26.01.2016, 16:07 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Так?
К сообщению приложен файл: DRS_booking_m3.zip(38Kb)
 
Ответить
СообщениеТак?

Автор - miver
Дата добавления - 26.01.2016 в 16:07
miver Дата: Среда, 27.01.2016, 22:41 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 184
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
А в ответ тишина. Наверно получил, что хотел, и больше не появится <_<
 
Ответить
СообщениеА в ответ тишина. Наверно получил, что хотел, и больше не появится <_<

Автор - miver
Дата добавления - 27.01.2016 в 22:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оптимизация наполнения контейнера vba (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!