Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 10:19:23

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Можно ли функцию из таблицы автоматически импортировать в функцию VBA?
Страниц: [1]   Вниз
Печать
Автор Тема: Можно ли функцию из таблицы автоматически импортировать в функцию VBA?  (Прочитано 1796 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alev
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 17


Nobody's perfect. I am Nobody.


Просмотр профиля E-mail
« : 16.05.2022, 19:48:40 »

У меня такая проблема:
Имеется таблица экспериментальных значений некоторой функции и теоретическое уравнение, описывающее эту зависимость, в которое нелинейно входят несколько параметров.
Задача состоит в том, чтобы найти значения параметров, для которых среднеквадратичное отклонение экспериментальных точек от теоретической кривой было минимальным.

Я решал эту задачу так:
В Excel делал таблицу со значениями аргумента (1-ая колонка) и функции (2-ая колонка); в 3-ей колонке теоретическая формула, зависящая от параметров (еще несколько клеток в таблице) и от аргумента, в 4-ой колонке – квадраты разностей экспериментальных и теоретических значений функции и корень из среднего значения квадратов (невязка).

Затем я написал процедуру, которая считывала из таблицы значения параметров и невязки, варьировала параметры, записывала назад в таблицу их новые значения и считывала новое значение невязки, и так до тех пор, пока невязка не достигала минимума.

Все это не очень хорошо: обмен информацией между процедурой и таблицей – медленная операция. Было бы лучше, если бы работала не процедура, а функция, которая только один раз считывала бы из таблицы массив аргументов и функции, а также формулу, по которой вычисляются теоретические значения функции. Тогда варьировались бы не параметры в таблице, а соответствующие внутренние переменные функции. А в конце работы функция возвращала бы в таблицу найденные значения параметров.

Вопрос: это возможно? Т.е. может ли программа функции «импортировать» формулу из таблицы? И если да, то как это сделать?
« Последнее редактирование: 16.05.2022, 19:55:02 от Alev » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 17.05.2022, 08:11:01 »

Вообще ничего не понятно, кроме того, что что-то хочется из таблицы куда-то импортировать. На основании подобного описания советовать практически нечего, т.к. совершенно непонятны взаимозависимости расчетов от физической таблицы и можно ли их вообще перенести в "память". Вы видите перед собой свою таблицы - мы нет. И давать советы, опираясь на "в 3-ей колонке теоретическая формула" - ну вообще не вариант.
В общем случае массивы должны помочь, все расчеты вынести в функции, которые будут это делать уже опираясь не на саму таблицу, а на массив, полученный из неё. При этом можно для расчетов использовать встроенные функции, но выполнять их не на листе, а при помощи Application.WorksheetFunction(это коллекция встроенных в Excel функций). Хотя если есть возможность и очень важна скорость - то лучше делать все на чистом VBA.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Alev
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 17


Nobody's perfect. I am Nobody.


Просмотр профиля E-mail
« Ответ #2 : 17.05.2022, 14:46:01 »

Чтобы было понятнее, посылаю тестовый Excel-файл "Approximation.xlsm"
Там работает процедура Sub Solution().
Перед ее вызовом нужно в таблице маркировать клетки с параметрами уравнения (в данном случае Н2:Н5), а потом клетку с невязкой (в данном случае D18).
Процедура вызывается горячей клавишей Control  s.
Для достижения удовлетворительного результата процедуру нужно вызывать много раз. Качество аппроксимации улучшается с киаждым еызовом процедуры.

В 3-ей колонке находятся формулы, которые вычисляют теоретические значения Y при табличных значениях Х. Формулы используют параметры из клеток Н2:Н5.

Хотелось бы написать функцию, которая импортировала бы внутрь себя формулу из колонки С.
« Последнее редактирование: 17.05.2022, 14:50:49 от Alev » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru