Страницы: 1
RSS
Помогите дописать код макроса
 
Уважаемые участники форума, Вы меня уже не раз выручали, и вот мне опять необходима Ваша помощь. Задача решена, но лишь наполовину. Очень нуждаюсь в помощи дописать имеющийся макрос, либо написать новый, если кому не лень ))).  
 
Итак, на лист «Cust service request» вставляется выгрузка с артикулами и кол-вом товара.  
На лист «Invoice» переносятся эти данные и лукапятся дополнительные данные – характеристики с листа «Articles» и цены с листа «Prices». На листе «Result» после запуска макроса появляется результат обработки.  
 
А теперь сама суть обработки:  
1) если в заказе присутствуют одновременно товары с «type of products2»  - zx, zс, zv, zb и одинаковой «Series» (!!!), то к этим артикулам применяется скидка 3%. Исключение – серия «vic», к ней применяется скидка 2%. При этом артикул с «type of products2» - zvzb = zv +zb, т.е. вместо двух типов zv и zb может быть type of products2» - zvzb.  
 
Аналогия: чтобы получить скидку клиент должен купить – стол (zv), стул (zc), полку (zx)  и тумбу (zb). Но он может купить полку (zx), стул (zc) и стол со встроенной тумбой (zvzb). Т.е. набор фактически из тех же 4 предметов и скидка тоже будет действовать (не забываем про одну и ту же серию).  
 
2) При этом применяется принцип минимальности количества и цен. Если в заказе:  
* 5 столов со встроенной тумбой по цене 100 (zvzb)  
* 3 стола по цене 60 (zv)  
* 6 стульев по цене 40 (zc)  
* 1 стул по цене 30 (zc)  
* 6 полок по цене 10 (zx)  
* 4 тумб по цене 50 (zb)  
* 1 тумба по цене 45 (zb)  
 
Max(zx) = 6, max(zc) = 6+1 =7, max(zv) = 3+zvzb = 8, max(zb) = 4+1+5 = 10. MIN = 6  
Результат после макроса:  
zx = 6  шт по цене 10  
zc = 1 шт по цене 30 и 5 шт по 40  
zvzb = 3 шт по 100  
zv =  3 шт по 60  
zc = 1 по 45 и 2шт по 50  
 
zvzb имеет приоритет, так как всегда(!!!) цена встроенного комплекта меньше, чем сумма цен деталей по отдельности.  
 
Все, что было описано выше, уже сделано и работает в макросе (за исключением серии «vic», скидка 2% ставится формулой, а не макросом (на листе Results).  
 
Что необходимо:  
1)если в заказе выполняется условие комплектности (type of products2) и присутствует артикул той же серии с type “of products1” = tap, то скидка должна быть 5% вместо 3%, а для серии vic 4% вместо 3%. При этом артикул с типом1=taps так же включается в результат c такой же скидкой  
2)Для серий «front» и «elem» отсутствует type of products2 = zx. Таким образом для них идет скидка 10%, если есть комплект из zc,zv,zvzb. (tap не влияет, даже если присутствует  
3)Сейчас в макросе идет расчет для любого бренда. Хотелось бы ограничить только для бренда «qwerty». Но это не важная часть, т.к. если остальные бренды убрать с листов articles и prices, то в invoice буду #N/D, которые макрос в расчет не примет или их можно удалить из расчета  
 
Файл с макросом и результатом одного заказа в приложении. На листе results нарисовал табличку как должно быть в столбцах с L по T.    
 
Спасибо за внимание.
 
{quote}{login=valeria_j}{date=10.11.2011 01:10}{thema=Помогите дописать код макроса}{post}  
2)Для серий «front» и «elem» отсутствует type of products2 = zx. Таким образом для них идет скидка 10%, если есть комплект из zc,zv,zvzb. (tap не влияет, даже если присутствует  
3)Сейчас в макросе идет расчет для любого бренда. Хотелось бы ограничить только для бренда «qwerty». Но это не важная часть, т.к. если остальные бренды убрать с листов articles и prices, то в invoice буду #N/D, которые макрос в расчет не примет или их можно удалить из расчета  
 
Файл с макросом и результатом одного заказа в приложении. На листе results нарисовал табличку как должно быть в столбцах с L по T.    
 
Спасибо за внимание.{/post}{/quote}  
 
Прошу прощения, тяжелый день и час ночи влияют на опечатки:  
2) Для серий «front» и «elem» отсутствует type of products2 = zx. Таким образом для них идет скидка 10%, если есть комплект из zc,zv,zb, zvzb. (tap не влияет, даже если присутствует  
3) Сейчас в макросе идет расчет для любого бренда. Хотелось бы ограничить только для бренда «qwerty». Но это не важная часть, т.к. если остальные бренды убрать с листов articles и prices, то в invoice буду #N/D, которые макрос в расчет не примет.  
 
Файл с макросом и результатом одного заказа в приложении. На листе results нарисовала табличку как должно быть в столбцах с L по T.
 
Гуру Excel помогите, пожалуйста, дописать имеющийся макрос. На листе "invoice" имеется выгрузка. Далее из этой выгрузки формируются наборы, сортируется и т.д. Все это уже прописано в макросе. Механиз описан выше. Необходимо подправить макрос, чтобы: если в наборе (с одинаковой серией) есть "Type of product 2 = Taps", то этот артикул тоже должен быть включен в набор, но он не является обязательным, как все остальные типы. Если что-то непонятно, задавайте вопросы, механизм довольно трудно описать очень четко, но в примере описал что должно получиться. Также предполагаю, что может потребоваться функция вычисления минимума 4 аргументов. Добавлена в макросе в конце.
 
Уважаемые участники форума, я уже так близко от цели, остался всего один шаг.  
Очень прошу помощи. Если taps = 0 или больше min(ped, wb, wc+wcwh, cis+wcwh), то все работает корректно. То, что осталось реализовать сводится к:  
если кол-во taps < min(ped, wb, wc+wcwh, cis+wcwh), то должно выводиться 2 диапазона: артикулы с кол-вом taps и второй с оcтатками.  
 
Например заказ:  
ped = 4, wb =  5, wc = 2, cis =2, wcwh = 3, taps = 2  
Без taps min = min (ped 4, wb 5, wc+wcwh 5, cis+wcwh 5) = 4    
taps < 4, =>  
1 диапазон ped = 2, wb =  2, wcwh = 2, taps = 2  
2 диапазон ped = 2, wb =  2, cis = 1, wc = 1, wcwh = 1  
При этом разнесение wcwh, cis, wc уже работает корректно.  
 
Помогите, пожалуйста!!!
 
Добрый вечер, помогите, пожалуйста дописать макрос, который является заключительным к моему первоначальному запросу. Итак, есть лист, в котором в столбцах M:N собираются данные. Необходимо с помощью макроса удалить диапазоны M3:O3 и M5:O5 (со сдвигом вверх), в которых count = 0. У меня получается удалить только полностью строки, но тогда теряются данные в других столбцац, переносить эти данные на другой лист тоже не хотелось бы. Кол-во строк от 0 до 1000. Т.е. если данных нет в диапазоне M2:O1000 то exit sub. Ну и count = 0 тоже не обязателен. Спасибо!
 
Все пункты, находящиеся выше предыдущего моего сообщения решены! Буду благодарная за помощь.
 
Удалите, пожалуйста, тему, все равно тут кроме меня никто не писал :)  
 
Интересно почему?  
1) неинтересные задачи  
2) неправильно сформулированные задачи  
3) такое уже где-то было  
4) много написано, лень читать  
5) задачи трудные, мы не знаем решения  
6) свой вариант
 
Сейчас схожу снег перед гаражом почищу и напишу отдельный макрос  
Sub УдалитьДиапазоныM3_O3_и_M5_O5()
 
Из вопросов заданных в Вашем сообщении (дата 16.11.2011, время 09:33), остановлюсь на ответе под номером 4.  
Хых! Снег без меня почистили :(
 
Макрос кнопке не назначил. Исправил.
 
Извеняйте=Извиняйте
 
Спасибо большое за помощь k61, это то, что было нужно, сама бы век не догадалась. Ну и немного переписала код:  
   While Cells(i, 14) <> ""  
   If Cells(i, 14) = 0 Then  
   Range(Cells(i, 13), Cells(i, 15)).Delete Shift:=xlUp  
   i = i  
   Else  
   i = i + 1  
   End If  
   Wend  
Потому что если подряд шли два 0, то удалялся только один.  
Спасибо, и желаю чтобы всегда кто-то за вас чистил снег )))
 
Пожелание не принято. Мои ворота - мой снег.:)  
Тогда уж лучше бежать снизу вверх не переживая за корректное изменение i:  
Sub Count_равен_0_v2()  
For i = Cells(2, 14).End(xlDown).Row To 2 Step -1  
 If Cells(i, 14) = 0 Then  
 Range(Cells(i, 13), Cells(i, 15)).Delete Shift:=xlUp  
 End If  
Next i  
Beep  
End Sub  
Бонус (без циклов):  
Sub Count_равен_0_v3()  
ЧтоИщем = 0  
Set ГдеИщем = Range(Cells(2, 14), Cells(Cells(2, 14).End(xlDown).Row, 14))  
ГдеИщем.Replace What:=ЧтоИщем, Replacement:="", LookAt:=xlWhole  
Range(ГдеИщем.SpecialCells(xlCellTypeBlanks).Address).Offset(0, -1).Delete Shift:=xlUp  
Range(ГдеИщем.SpecialCells(xlCellTypeBlanks).Address).Offset(0, 1).Delete Shift:=xlUp  
Range(ГдеИщем.SpecialCells(xlCellTypeBlanks).Address).Delete Shift:=xlUp  
Beep  
End Sub  
Видимо Range не примет длину строки более ....  
Помечтаем - а вот если ещё три последние строки объединить......!?
 
{quote}{login=valeria_j}{date=16.11.2011 09:33}{thema=Удалите тему}{post}Удалите, пожалуйста, тему, все равно тут кроме меня никто не писал :)  
 
Интересно почему?  
1) неинтересные задачи  
2) неправильно сформулированные задачи  
3) такое уже где-то было  
4) много написано, лень читать  
5) задачи трудные, мы не знаем решения  
6) свой вариант{/post}{/quote}  
1, 2, 4
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Если 4 то ответы 1 и 2 отпадают автоматически.  
Или, если 1 и 2 то 4 лишнее.  
:)
 
{quote}{login=k61}{date=17.11.2011 10:06}{thema=re: nerv}{post}Если 4 то ответы 1 и 2 отпадают автоматически.  
Или, если 1 и 2 то 4 лишнее.  
:){/post}{/quote}попробую объяснить : )  
1 и 2 прочитал до 2-го пунка 1-го поста "2) При этом применяется принцип минимальности"  
4 дальше лень.  
Плюс ко всему вышеизложенному: открыл файл, посмотрел код - много. Разбираться во всем этом...желания мало, а отпало оно окончательно после этой строки  
Dim a, b, zx, zc, zv, zb, zvzb, count, ind, glob As Integer  
судя по всему неправильное объявление переменных
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
k61 спасибо за помощь, очень и очень помогли!  
nerv, спасибо за мнение, постараюсь в следующий раз все учесть :)
Страницы: 1
Читают тему
Наверх