Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматический подбор параметров расчёта - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматический подбор параметров расчёта (Макросы/Sub)
Автоматический подбор параметров расчёта
SBK Дата: Вторник, 19.09.2017, 21:28 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Мне нужно автоматически подобрать параметр в ячейках (P2;P10) (16), изменяя значения параметра в ячейках (J2;J10) (10) соответственно.
У меня есть программа-макрос подбора параметра в ячейках (G6;G46) (7) при изменении значения параметра в ячейках (D6;D46) (4) соответственно.

[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[a5].CurrentRegion
    Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
    For Each cell In tbl.Cells
        cell.Offset(, 6).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 3)
    Next
End Sub
[/vba]

Эта программа рабочая. Я записал эту программу под свои данные:

[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[a5].CurrentRegion
    Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
    For Each cell In tbl.Cells
        cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)
    Next
End Sub
[/vba]

Но она не желает работать. Debug выделяет область
[vba]
Код
cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)
[/vba]
Неверная ссылка ошибка 1004.
Не могу найти ошибку.
Саму программу могу представить только в зипованном виде, поскольку она «весит» 258 кб. Но если устроит зипованная, я её выложу.
 
Ответить
СообщениеМне нужно автоматически подобрать параметр в ячейках (P2;P10) (16), изменяя значения параметра в ячейках (J2;J10) (10) соответственно.
У меня есть программа-макрос подбора параметра в ячейках (G6;G46) (7) при изменении значения параметра в ячейках (D6;D46) (4) соответственно.

[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[a5].CurrentRegion
    Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
    For Each cell In tbl.Cells
        cell.Offset(, 6).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 3)
    Next
End Sub
[/vba]

Эта программа рабочая. Я записал эту программу под свои данные:

[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[a5].CurrentRegion
    Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
    For Each cell In tbl.Cells
        cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)
    Next
End Sub
[/vba]

Но она не желает работать. Debug выделяет область
[vba]
Код
cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)
[/vba]
Неверная ссылка ошибка 1004.
Не могу найти ошибку.
Саму программу могу представить только в зипованном виде, поскольку она «весит» 258 кб. Но если устроит зипованная, я её выложу.

Автор - SBK
Дата добавления - 19.09.2017 в 21:28
RAN Дата: Вторник, 19.09.2017, 22:59 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
я её выложу.

Если так, как тут, то можно не трудиться.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
я её выложу.

Если так, как тут, то можно не трудиться.

Автор - RAN
Дата добавления - 19.09.2017 в 22:59
InExSu Дата: Вторник, 19.09.2017, 23:55 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
[vba]
Код
Sub recountWatch()
  Set tbl = ActiveSheet.[a5].CurrentRegion
  Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
  Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1)).Select
  Stop
  СтрокоКомпенсатор = -5
  For Each cell In tbl.Cells
    cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)
    cell.Offset(СтрокоКомпенсатор, 15).Select
    Stop
    cell.Offset(СтрокоКомпенсатор, 9).Select
  Next
End Sub
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение[vba]
Код
Sub recountWatch()
  Set tbl = ActiveSheet.[a5].CurrentRegion
  Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))
  Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1)).Select
  Stop
  СтрокоКомпенсатор = -5
  For Each cell In tbl.Cells
    cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)
    cell.Offset(СтрокоКомпенсатор, 15).Select
    Stop
    cell.Offset(СтрокоКомпенсатор, 9).Select
  Next
End Sub
[/vba]

Автор - InExSu
Дата добавления - 19.09.2017 в 23:55
SBK Дата: Среда, 20.09.2017, 00:15 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
RAN'y
А что там не так? Я же потому и ищу, чтобы понять, что не так?


Сообщение отредактировал SBK - Среда, 20.09.2017, 00:19
 
Ответить
СообщениеRAN'y
А что там не так? Я же потому и ищу, чтобы понять, что не так?

Автор - SBK
Дата добавления - 20.09.2017 в 00:15
SBK Дата: Среда, 20.09.2017, 00:18 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
InExSu'y
Это будет работать в exsel 2003?
Я почему спрашиваю? На русском "строкоКомпенсатор". Эта функция есть в 2003?
 
Ответить
СообщениеInExSu'y
Это будет работать в exsel 2003?
Я почему спрашиваю? На русском "строкоКомпенсатор". Эта функция есть в 2003?

Автор - SBK
Дата добавления - 20.09.2017 в 00:18
InExSu Дата: Среда, 20.09.2017, 09:58 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365

Не знаю. В Excel будет. Функции нет, это переменная.
Код написан, чтобы вы в процессе отладки увидели, где у Вас кончаются данные ...


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
Не знаю. В Excel будет. Функции нет, это переменная.
Код написан, чтобы вы в процессе отладки увидели, где у Вас кончаются данные ...

Автор - InExSu
Дата добавления - 20.09.2017 в 09:58
SBK Дата: Среда, 20.09.2017, 14:16 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
InExSu,
У меня Ваша программка зависла на той же строке
[vba]
Код
cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)
[/vba]
т.е. на выполнении самой операции подбора параметров и то же заявление об ошибке.
С другой стороны, я одну ошибку у себя нашёл в прежнем макросе. Я использовал числовой формат данных, а оказывается нужно было в общем формате считать Кроме того, я заменил [a5] [a6] на [a1] [a2] соответственно. При этом старая программка посчитала первые 20 строк и остановилась, хотя строки не прерывались. Вручную подбор работает в любой строке. Не подскажете почему это может быть?


Сообщение отредактировал SBK - Среда, 20.09.2017, 14:26
 
Ответить
СообщениеInExSu,
У меня Ваша программка зависла на той же строке
[vba]
Код
cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)
[/vba]
т.е. на выполнении самой операции подбора параметров и то же заявление об ошибке.
С другой стороны, я одну ошибку у себя нашёл в прежнем макросе. Я использовал числовой формат данных, а оказывается нужно было в общем формате считать Кроме того, я заменил [a5] [a6] на [a1] [a2] соответственно. При этом старая программка посчитала первые 20 строк и остановилась, хотя строки не прерывались. Вручную подбор работает в любой строке. Не подскажете почему это может быть?

Автор - SBK
Дата добавления - 20.09.2017 в 14:16
Pelena Дата: Среда, 20.09.2017, 14:23 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19176
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Файл с примером не покажете?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеФайл с примером не покажете?

Автор - Pelena
Дата добавления - 20.09.2017 в 14:23
SBK Дата: Среда, 20.09.2017, 14:36 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena,
сам не пойму как, честное слово...
 
Ответить
СообщениеPelena,
сам не пойму как, честное слово...

Автор - SBK
Дата добавления - 20.09.2017 в 14:36
SBK Дата: Среда, 20.09.2017, 14:56 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena
Могу только в зипованном виде. Весит больше допустимого 200 кб.
Если этот вариант устроит, то файл в прикрепке
К сообщению приложен файл: 5235019.rar (79.8 Kb)


Сообщение отредактировал SBK - Среда, 20.09.2017, 15:02
 
Ответить
СообщениеPelena
Могу только в зипованном виде. Весит больше допустимого 200 кб.
Если этот вариант устроит, то файл в прикрепке

Автор - SBK
Дата добавления - 20.09.2017 в 14:56
InExSu Дата: Среда, 20.09.2017, 14:59 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
зависла на той же строке

Вы знаете, "что" вы хотите вычислить, но не знаете как.
Мы знаем "как" вычислить, но не знаем "что" Вы вычисляете, как Вы расставили данные.
Ошибка Вам пишет, что кончились данные для GoalSeek.


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac

Сообщение отредактировал InExSu - Среда, 20.09.2017, 15:00
 
Ответить
Сообщение
зависла на той же строке

Вы знаете, "что" вы хотите вычислить, но не знаете как.
Мы знаем "как" вычислить, но не знаем "что" Вы вычисляете, как Вы расставили данные.
Ошибка Вам пишет, что кончились данные для GoalSeek.

Автор - InExSu
Дата добавления - 20.09.2017 в 14:59
SBK Дата: Среда, 20.09.2017, 15:05 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Ошибка Вам пишет, что кончились данные для GoalSeek.

Я добавил пример.rar.
Можно ли расширить данные? Таблица расчёта по обеим столбцам сплошная, вручную всё считается. Где может быть "стоп"? Может нужно в исходный файл добавить нижнюю строку расчёта? Как это сделать грамотно?


Сообщение отредактировал SBK - Среда, 20.09.2017, 15:06
 
Ответить
Сообщение
Ошибка Вам пишет, что кончились данные для GoalSeek.

Я добавил пример.rar.
Можно ли расширить данные? Таблица расчёта по обеим столбцам сплошная, вручную всё считается. Где может быть "стоп"? Может нужно в исходный файл добавить нижнюю строку расчёта? Как это сделать грамотно?

Автор - SBK
Дата добавления - 20.09.2017 в 15:05
Pelena Дата: Среда, 20.09.2017, 15:22 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 19176
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Может, так
[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[e2].CurrentRegion
    Set tbl = tbl.Columns(1).Offset(1).Resize(tbl.Rows.Count - 1)
    For Each cell In tbl.Cells
        cell.Offset(, 11).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 5)
    Next
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМожет, так
[vba]
Код
Sub recount()
    Set tbl = ActiveSheet.[e2].CurrentRegion
    Set tbl = tbl.Columns(1).Offset(1).Resize(tbl.Rows.Count - 1)
    For Each cell In tbl.Cells
        cell.Offset(, 11).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 5)
    Next
End Sub
[/vba]

Автор - Pelena
Дата добавления - 20.09.2017 в 15:22
SBK Дата: Среда, 20.09.2017, 16:12 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena,
А Вы знаете? Работает. Получается, что ошибка моя была в том, что в квадратных скобках нужно задавать начало массива, а не столбец а, как стандарт. Правильно я понял?
 
Ответить
СообщениеPelena,
А Вы знаете? Работает. Получается, что ошибка моя была в том, что в квадратных скобках нужно задавать начало массива, а не столбец а, как стандарт. Правильно я понял?

Автор - SBK
Дата добавления - 20.09.2017 в 16:12
Pelena Дата: Среда, 20.09.2017, 17:14 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 19176
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
CurrentRegion - это текущая область. Её можно увидеть, встав в ячейку и нажав Ctrl+* (звёздочка справа на цифровой клавиатуре).
Попробуйте проделать это, встав в A5 или в E2, почувствуйте разницу :)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеCurrentRegion - это текущая область. Её можно увидеть, встав в ячейку и нажав Ctrl+* (звёздочка справа на цифровой клавиатуре).
Попробуйте проделать это, встав в A5 или в E2, почувствуйте разницу :)

Автор - Pelena
Дата добавления - 20.09.2017 в 17:14
rusmir76 Дата: Вторник, 22.02.2022, 16:19 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Может, так


Здравствуйте! Подскажите, а возможно ли задать для подбора не фиксированное значение (как в примере - 1), а разные расположенные например напротив ячейки подбора. Установить в ячейке O7 значение равное S7 Изменяя значение ячейки L7
И так по всем строкам.

Образец прикрепил в файле. Заранее спасибо!
К сообщению приложен файл: ___.xlsx (13.1 Kb)
 
Ответить
Сообщение
Может, так


Здравствуйте! Подскажите, а возможно ли задать для подбора не фиксированное значение (как в примере - 1), а разные расположенные например напротив ячейки подбора. Установить в ячейке O7 значение равное S7 Изменяя значение ячейки L7
И так по всем строкам.

Образец прикрепил в файле. Заранее спасибо!

Автор - rusmir76
Дата добавления - 22.02.2022 в 16:19
Pelena Дата: Вторник, 22.02.2022, 17:02 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 19176
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Изменяя значение ячейки L7

ячейка L7 никак не влияет на O7
Если взять, к примеру, M7, то как-то так
[vba]
Код
Sub recount()
    lrow = Cells(Rows.Count, "O").End(xlUp).Row
    For Each cell In Range("O7:O" & lrow)
        If cell <> "" Then cell.GoalSeek Goal:=cell.Offset(, 4), ChangingCell:=cell.Offset(, -2)
    Next
End Sub
[/vba]
К сообщению приложен файл: 111.xlsm (22.5 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Изменяя значение ячейки L7

ячейка L7 никак не влияет на O7
Если взять, к примеру, M7, то как-то так
[vba]
Код
Sub recount()
    lrow = Cells(Rows.Count, "O").End(xlUp).Row
    For Each cell In Range("O7:O" & lrow)
        If cell <> "" Then cell.GoalSeek Goal:=cell.Offset(, 4), ChangingCell:=cell.Offset(, -2)
    Next
End Sub
[/vba]

Автор - Pelena
Дата добавления - 22.02.2022 в 17:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматический подбор параметров расчёта (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!