Страницы: 1
RSS
Автоматизация перебора значений ячейке до выполнения условия УФ, Нахождение функции обратной к заданной
 
Уважаемые коллеги,

Передо мной стоит задача поиска обратной функции для заданной функции двух переменных: Требуется найти зависимость концентрации от температуры и давления тогда как известна зависимость температуры от давления и концентрации...
Реальная функция значительно сложнее, чем представленная в примере. Более того реальная функция реализована как UDF в чужом запароленном модуле (надстройке) - к ней у меня есть только пользовательский доступ.

Для этой цели я определяю область значений функции для каждой из переменных и руками подбираю результат до тех пор пока вычисление известной функции не становится близким к текущему значению переменной.
Например: для давления = 3 функция концентрации определена в диапазоне температур от 24 до 36.
Тогда я ручным перебором нахожу такое значение концентрации (10,4%), при котором вычисленное по прямой формуле значение температуры (23,98) становится достаточно близким к текущему значению температуры (24).
Затем я перехожу к следующей температуре (26) при том же давлении (3) и повторяю операцию перебора до нахождения концентрации (29,3%)
Правильный результат подсвечивается зеленым цветом ячейки при помощи УФ.

К сожалению, мне не удалось спрятать все прямые вычисления внутрь УФ (видимо из-за особенностей реализации чужой UDF) - поэтому потребовалась дополнительная таблица ниже.

Подскажите, пожалуйста, как можно автоматизировать (очевидно при помощи VBA) процесс перебора значений (от 0% до 100%) для всех ячеек заданного диапазона, содержащих числовые значения (или пустых)? Критерием окончания перебора в текущей ячейке является смена цвета ячейки на зеленый или просто выполнение условия из УФ.

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

Заранее благодарен,
Илья
 
IKor, попробуйте включить итерации и записать в p17
=P17+(P23-P24)/10
и это без учета погрешности. ну тут можно просто сделать условие, дополнительное
=P17+IF($D$15<=(ABS(P24-P$23)/P$23);(P23-P24)/10;0)
Изменено: БМВ - 24.04.2019 20:31:52
По вопросам из тем форума, личку не читаю.
 
Михаил,
К сожалению, у меня не получилось.
Что я делаю не так?
 
Трудно сказать можно еще обработку ошибки поставить
см.  файл
По вопросам из тем форума, личку не читаю.
 
Действительно, собака порылась в обработке ошибки. До тех пор пока я использовал свою конструкцию (ЕСЛИ(ЕЧИСЛО(... вычисления возвращали ошибки. С Вашим вариантом результат есть. Попробую сейчас на основном документе.

===============================UPDATE=======================­=======
К сожалению, так и не получилось... приходится делать ручками :(
Вероятно, это связано с особенностью обработки ошибок внутри самой UDF: она также проверяет не выходят ли за границы области определения переданные ей параметры и при необходимости возвращает текстовое описание ошибки вместо числа..!
Изменено: IKor - 25.04.2019 12:18:28
Страницы: 1
Наверх