корректирование стоимости с учетом скидки

Автор Максим Демьяненко, 01.12.2012, 00:23

« назад - далее »

Максим Демьяненко

Привет всем! Пожалуйста помогите решить очень сложную для меня задачу. Меня попросила моя девушка помочь, ну как тут откажешь. Сижу уже три часа, никак не могу понять как его сделать
Программный код
' зеленым цветом комментарий
If количество < 100 Then
' продажа количества товаров до 100 единиц ( максимум 99 )
Стоимость без скидки = Цена × Количество
'продажа товаров от 100 до 200 единиц
Стоимость без скидки = Цена × 0,98
Else
If  количество <= 300 Then
'продажа количества товара от 201 до 300 единиц
Стоимость без скидки = Цена × Количество × 0,93
Else
'продажа товаров количество которых превышает 300 единиц
Стоимость без скидки = Цена × Количество × 0,9
End If
End If
End If
' корректирование стоимости с учетом скидки для постоянных клиентов
If  Скидка = 0 then
Стоимость = Стоимость без скидка × 0,9
EndIf
End Function
Например, условие
Книжный магазин имеет определенное количество покупателей, если покупатели являются постоянными клиентами магазину, то они имеют постоянную скидку 10%. Если покупатель приобрел товару менее 100 единиц, то он скидки не имеет. Если покупатель приобрел товару от 100 до 200 единиц – скидки 2%. Если покупатель приобрел товару от 201 до 300 единиц, то скидка 7%. Если товару больше как 300 единиц – скидка 10%. Расчетная стоимость приобретения не зависит от скидок и количества.
Вот такое задание, у меня проблема с синтаксисом. Буду очень благодарен даже подсказку, а тот Добрый человек который поможет сделать, приму за Господа Бога))

Максим Демьяненко, в следующий раз давайте теме более осмысленное название. Это раздел по VBA, здесь все о создании макросов.

Poltava

Читаем праила форума ОСОБЕННО внимательно пункт №2 и исправляем ошибку! поверьте с файлом примера вам ответят намного быстрее!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Максим Демьяненко

Вот мое условие:
Книжный магазин имеет определенное количество покупателей, если покупатели являются постоянными клиентами магазину, то они имеют постоянную скидку 10%, если нет то они не получают скидку.
В прикрепленном файле, уже есть макрос, вот только он работает для одной строки, а если у меня их будет 1000.

Poltava

А обязательно макросом? тут простейшими формулами можно обойтись к примеру как в аттаче, зачем зря с макросами мучатся?
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ShAM

Зачем проверять условие (через И), которое уже проверено :)
Достаточно так:
=ЕСЛИ(B2<100;0;ЕСЛИ(B2<=200;2;ЕСЛИ(B2<300;7;10)))
или так:
=ПРОСМОТР(B2;{0;100;201;300};{0;2;7;10})

Poltava

Согласен писал ночью вот и написал первое что пришло в задуренную задень голову! А про ПРОСМОТР вообще из головы вылетело, почему то вместо ПРОСМОТР  вспомнился ВЫБОР он не подходил посему пошел через если,ваш вариант с ПРОСМОТР намного лучше! Но основным вопросом осталось можно ли применить формулы или только макрос!!!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

Максим Демьяненко

#6
Да, обязательно макросом. Формулами я и и сам сделал. Помогите плиз, а то я єтот VBA вообще не знаю.
Вот что на свежую голову написал:
Sub Books()
kilkist = Лист1.Cells(2, 2)
cina = Лист1.Cells(2, 3)
If Лист1.Cells(2, 4) = "Ні" Then
a = kilkist * cina
Лист1.Cells(2, 5) = a
End If
If Лист1.Cells(2, 4) = "Так" Then
a = kilkist * cina * 0.9
Лист1.Cells(2, 5) = a
End If
End Sub

Теперь как мне сделать єто для не для одной строки а для 10 или 20?

kuklp

#7
Sub www()
    Dim a(0 To 3), i&
    For i = 0 To 3
        a(i) = [e2].Resize([b2].End(xlDown).Row - 1, 1).Offset(, -i).Address
    Next
    Range(a(0)) = Evaluate(a(3) & "*" & a(2) & "*IF(" & a(1) & "=""Так"",.9,1)")
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Poltava

#8
Вот еще пара вариантов в аттаче. Мне больше всего нравиться Var1 без использования циклов так как он быстрей!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.