2015-11-05 4 views
0

У меня есть диапазон ячеек, которые в настоящее время отображаются. Мне нужен конечный пользователь, чтобы указать скидку, которую они хотели бы видеть, и нажать кнопку с командой, которая будет применять ее к ценам списка.Рассчитать скидку на диапазон ячеек

  • Диапазон (С27: 39; C41: C42; C44: 45)
  • Скидка% (C127) - конечный пользователь заполнит это
  • Нанести Скидка% к текущему результату в указанном диапазоне
    - - не нарушая текущих формул SUMIFS в ячейках диапазона.

Я уже создал кнопку Command. Я понимаю код для выбора диапазона и заполняю его определенным значением, но я придерживаюсь следующего кода. На мой взгляд, это должно быть так же просто, как:

Range (C27:39; C41:C42; C44:45) * Discount% (C127) 

Я попытался скопировать и вставлять значения из диапазона в другой части книги, применяются скидки, а затем вставить их обратно в исходные клетки диапазона, но то я теряю формулы SUMIFS и нуждаюсь в них там, если исходные входы модели меняются - на другой вкладке.

ScreenShot:

enter image description here

+0

Почему вы не можете просто '= C27 * C127' в D27 и иметь колонку C скрытой? – findwindow

+0

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

+0

Ок ... VBA - это переполнение, но вы можете просто хранить данные в переменных, вычислять и затем отбрасывать их обратно в ячейки, которые вы нужно. Обед, извините. – findwindow

ответ

0

Что-то, как это должно работать

Dim rng As Range 
Dim cel As Range 
With ActiveSheet 
    Set rng = .Range("C27:C39,C41:C42,C44:C45") 
    For Each cel In rng 
     if lcase(left(range(C126),1)) = "y" 
      if instr(cel.formula,"C127") = 0 then cel.formula = cel.formula & "* C127" 
     else 
      cel.formula = split(cel.formula,"*")(0) 
     End if 
    Next 
End With 

Edit: я не понимал, что была формула в клетках. Редактирование поместит новую формулу в ячейки. Он сохраняет старый и добавляет «* C127»

Редактировать 2: Теперь код будет выглядеть на C126 и посмотреть, следует ли применять скидку, если да, то он добавит формулу, если не удалит «* C127» "

Редактировать 3: Добавлена ​​проверка, чтобы скидка не была дважды применена.

Edit 4: Теперь, когда я думаю об этом, почему бы не поставить, если заявление в C137 для всех трех возможных наладчиков:

= If(left(C126,1) = "y",C127,1) * If(left(C130,1) = "y",C131,1) * If(left(C134,1) = "y",C135,1) 

Затем в клетках, которые вы хотите настроить только добавить «* C137» в существующие формулы, и вам никогда не понадобится использовать vba или изменить формулы.

+0

Да ... Я заметил, что как только я побежал. Я ценю предоставляемый вами язык и понимаю, как он сочетается. Возможно, мне нужно скопировать и вставить данные в новый лист для продавцов, чтобы увидеть результат. На данный момент я просто собираюсь выработать массовые заявления IF-THEN, которых я пытался избежать. здание. –

+0

@SarahAnn Я уверен, что сообщество может придумать что-то более быстрое и менее трудоемкое, но вам нужно будет показать образец данных и желаемый результат. –

+0

Является ли снимок экрана листа excel ok или есть другой способ? –

Смежные вопросы