2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Excel пользовательская функция
Сообщение23.07.2024, 17:55 
Допустим, у меня в ексель есть лист с расчетами. Я хочу сделать из него пользовательскую функцию. Как это сделать, если я не хочу дублировать все эти расчеты на языке VBA (где с созданием пользовательских функций вроде все понятно), а хочу, чтобы они остались в виде набора формул в ячейках на листе? Пусть пользовательская функция обращается к этому листу, подставляет в нужные ячейки заданные аргументы и считывает результат с конечной ячейки.

 
 
 
 Re: Excel пользовательская функция
Сообщение23.07.2024, 20:57 
Аватара пользователя
Наверное, прямо так и сделать
Код:
Function foo(x)
    Worksheets("Лист1").Cells(1, 1) = x
    foo = Worksheets("Лист1").Cells(1, 2)
End Function

В $A1$ аргумент, в $B1$ результат.

-- Вт июл 23, 2024 22:15:17 --

Смотря для чего, конечно.
Возможно, Вам на самом деле нужна таблица данных.

 
 
 
 Re: Excel пользовательская функция
Сообщение24.07.2024, 07:53 
Аватара пользователя
Нет, так не работает. Функция
Код:
Function foo(x)
    Worksheets("Лист1").Cells(1, 1) = x
    foo = Worksheets("Лист1").Cells(1, 2)
End Function

вызывается только в редакторе, а при вызове с листа получаем ошибку. Собс-но, не срабатывает строчка
Код:
Worksheets("Лист1").Cells(1, 1) = x

код просто виснет.

 
 
 
 Re: Excel пользовательская функция
Сообщение24.07.2024, 08:26 
пианист
Да, у меня тоже не работает.

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

 
 
 
 Re: Excel пользовательская функция
Сообщение24.07.2024, 08:33 
Аватара пользователя
Надо на stackoverflow покопаться, наверняка этот вопрос там задавался.

 
 
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 01:49 
пианист в сообщении #1647200 писал(а):
Код:
Worksheets("Лист1").Cells(1, 1) = x


код просто виснет.

А так
Код:
Worksheets("Лист1").Cells(1, 1).Value = x


Но надо быть аккуратным с настройкой автопересчёта формул. Эксель может виснет от того что по кругу считает постоянно...

 
 
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 06:28 
Аватара пользователя
wrest
Нет. Такое Excel сам додумывает.

 
 
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 10:58 
В общем, пишут что пользвателькие функции, вызываемые из ячейки, не могут изменить другие ячейки. By design. Но если они вызываются со строны (из макросов) то всё норм.
Есть обходные пути, но они вам не понравятся :mrgreen:

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group