2015-04-02 2 views
0

У меня есть цель Seek Macro:Цель Seek Macro с перемещением цели и Seek переменные

Sub GOALSEEK() 
    Range("K25").GOALSEEK Goal:=0, ChangingCell:=Range("K10") 
End Sub 

Это работает для 2015Q4, клетки K25 0%.

Я хочу адаптировать макрос для перемещения переменных Goal и Seek.

Подвижная цель будет храниться в C25 (0, 0,01, 0,05 и т.д.), а также перемещение Seek будет зависеть от C6 (Q2, Q3, Q4, который будет отображаться в I25, J25, K25, соответственно) ,

enter image description here

EDIT

После некоторого мастерить, я обнаружил, что движущаяся цель может быть реализована путем изменения Goal:=0 в Goal:=Range("Cell"):

Sub GOALSEEK() 
    Range("K25").GOALSEEK Goal:=Range("C25"), ChangingCell:=Range("K10") 
End Sub 

До сих пор не знаю, как сделать движение перемещения.

+0

У вас есть вопрос? У вас возник вопрос, подумайте, а затем отправьте свой ответ как ваш EDIT? – FreeMan

+0

Я просто поправлялся после того, как я разместил вопрос и понял, как настроить цель. Но я до сих пор не знаю, как настроить движущийся Seek. – emehex

+0

Посмотрите, поможет ли это: http://stackoverflow.com/questions/16240176/automatic-goal-seek-over-range-of-cells – FreeMan

ответ

1

Поместите некоторую условную логику в свой код, как показано ниже, чтобы принять решение «на лету» на основе того, какой квартал введен в ячейку C6.

Sub GOALSEEK() 

Dim gseek, chngcell as Range 

If Range("C6") = "Q2" Then 
    Set gseek = Range("I25") 
    Set chngcell = Range("I10") 
Elseif Range("C6") = "Q3" Then 
    Set gseek = Range("J25") 
    Set chngcell = Range("J10") 
Elseif Range("C6") = "Q4" Then 
    Set gseek = Range("K25") 
    Set chngcell = Range("K10") 
End If 

gseek.GOALSEEK Goal:=Range("C25"), ChangingCell:=chngcell 

End Sub 

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

+0

Почти! Но K10 также должен подстраиваться под «Q2» Затем «I10», «Q3» Затем «J10» – emehex

+0

Это работает! Спасибо @Kyle – emehex

1

Вы можете попробовать следующий подход:

Определить новый именованный диапазон называют его, например SeekCell и Обращается Для ввода:

=INDEX($I$25:$K$25,1,MATCH("2015"&$C$6,$I$9:$K$9)) 

Определить новый именованный диапазон назвать его, например, ChangeCell и относится к введите:

=INDEX($I$10:$K$10,1,MATCH("2015"&$C$6,$I$9:$K$9)) 

Определить новый именованный диапазон называют его, например GoalCell и Обращается для ввода:

=$C$25 

При использовании кода VBA:

Range("SeekCell").GOALSEEK Goal:=Range("GoalCell"), ChangingCell:=Range("ChangeCell")