Страницы: 1
RSS
Автоматизация работы инструмента Подбор параметра для нескольких ячеек последовательно, упрощение записи макрорекодера
 
Уважаемые коллеги,
Прошу помощи в упрощении кода, записанного макрорекодером
Код
Sub Подбор()
'
' Подбор Макрос
' Подбор параметра в трех ячейках последовательно
'

'
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Range("C7").GoalSeek Goal:=0, ChangingCell:=Range("C8")
    Range("D7").Select
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Range("D7").GoalSeek Goal:=0, ChangingCell:=Range("D8")
    Range("E7").Select
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Application.CutCopyMode = False
    Range("E7").GoalSeek Goal:=0, ChangingCell:=Range("E8")
    Range("E11").Select
End Sub
Суть задачи: Нажатием на одну кнопку найти такое значение переменной, чтобы обратить в ноль проверочное значение (добиться заранее заданного результата вычисления целевой функции) последовательно для трех независимых друг от друга функций.

Мне кажется, что текст макроса можно несколько упростить, но сам я за это не возьмусь :) Прошу поддержки.
 
Честно говоря ни понятно, куда еще проще? Лишнее убрать и все
Код
Sub Подбор()
    Application.CutCopyMode = False
    Range("C7").GoalSeek Goal:=0, ChangingCell:=Range("C8")
    Range("D7").Select    
    Application.CutCopyMode = False
    Range("D7").GoalSeek Goal:=0, ChangingCell:=Range("D8")
    Range("E7").Select    
    Application.CutCopyMode = False
    Range("E7").GoalSeek Goal:=0, ChangingCell:=Range("E8")
    Range("E11").Select
End Sub

Изменено: Андрей_26 - 04.02.2020 11:52:10
 
Спасибо - если проще нельзя, то и так прекрасно.
А нужны ли для работы строки вида "Range("D7").Select" - или и без них инструменты будут работать?
 
Select  - можно убрать
Код
Sub Подбор()
    Application.CutCopyMode = False
    Range("C7").GoalSeek Goal:=0, ChangingCell:=Range("C8") 
    Application.CutCopyMode = False
    Range("D7").GoalSeek Goal:=0, ChangingCell:=Range("D8")  
    Application.CutCopyMode = False
    Range("E7").GoalSeek Goal:=0, ChangingCell:=Range("E8")   
End Sub

 
Код
Sub Подбор()
  for c = 3 to 5
    cells(7,c).GoalSeek Goal:=0, ChangingCell:=cells(8,c)
  next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Благодарю, Игорь!
Нет предела совершенству!
Правильно ли я понимаю, что аргументы внутри скобок cells обозначают номера строк и столбцов на активном листе, соответственно?
А на что оказывали влияние утерянные строки "Application.CutCopyMode = False"? Насколько я понимаю отсюда она действительно не нужна...

Позволю себе здесь же задать уточняющий вопрос: если я хочу пропустить выполнение процедуры Подбор для одной из промежуточных ячеек (при любом значении, кроме числа в результате вычисления формулы), то как мне правильнее записать условие:
Код
Sub Подбор()
  for c = 3 to 5
    If IsNumeric(cells(7,c).Value) 'является числом 
       Then cells(7,c).GoalSeek Goal:=0, ChangingCell:=cells(8,c)
       Else 'ничего делать не требуется
    End If
  next
End Sub
Изменено: IKor - 05.02.2020 10:34:50
Страницы: 1
Наверх