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

 

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

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

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

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



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

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



Но она не желает работать. Debug выделяет область

cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)


Неверная ссылка ошибка 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)    NextEnd 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)    NextEnd 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
Цитата SBK, 19.09.2017 в 21:28, в сообщении № 1 ( писал(а)):
я её выложу.

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


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата SBK, 19.09.2017 в 21:28, в сообщении № 1 ( писал(а)):
я её выложу.

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

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

Excel 2010, 365

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



Разработчик Битрикс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  NextEnd 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
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Цитата SBK, 20.09.2017 в 00:18, в сообщении № 5 ( писал(а)):
в exsel

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


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
Цитата SBK, 20.09.2017 в 00:18, в сообщении № 5 ( писал(а)):
в exsel

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

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

Excel 2003
InExSu,
У меня Ваша программка зависла на той же строке

cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)


т.е. на выполнении самой операции подбора параметров и то же заявление об ошибке.
С другой стороны, я одну ошибку у себя нашёл в прежнем макросе. Я использовал числовой формат данных, а оказывается нужно было в общем формате считать Кроме того, я заменил [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
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация: 4634 ±
Замечаний: ±

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
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Цитата SBK, 20.09.2017 в 14:16, в сообщении № 7 ( писал(а)):
зависла на той же строке

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


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

Сообщение отредактировал InExSu - Среда, 20.09.2017, 15:00
 
Ответить
Сообщение
Цитата SBK, 20.09.2017 в 14:16, в сообщении № 7 ( писал(а)):
зависла на той же строке

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

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

Excel 2003
Цитата InExSu, 20.09.2017 в 14:59, в сообщении № 11 ( писал(а)):
Ошибка Вам пишет, что кончились данные для GoalSeek.

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


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

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

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

Excel 365 & Mac Excel
Может, так

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



"Черт возьми, Холмс! Но как??!!"
Ю-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)    NextEnd 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19521
Репутация: 4634 ±
Замечаний: ±

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% ±

Цитата Pelena, 20.09.2017 в 15:22, в сообщении № 13 ( писал(а)):
Может, так


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

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


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

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

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

Excel 365 & Mac Excel
Цитата rusmir76, 22.02.2022 в 16:19, в сообщении № 16 ( писал(а)):
Изменяя значение ячейки L7

ячейка L7 никак не влияет на O7
Если взять, к примеру, M7, то как-то так

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

К сообщению приложен файл: 111.xlsm (22.5 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Цитата rusmir76, 22.02.2022 в 16:19, в сообщении № 16 ( писал(а)):
Изменяя значение ячейки 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)    NextEnd Sub
[/vba]

Автор - Pelena
Дата добавления - 22.02.2022 в 17:02
  • Страница 1 из 1
  • 1
Поиск:

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