2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Excel пользовательская функция
Сообщение23.07.2024, 17:55 


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

 Профиль  
                  
 
 Re: Excel пользовательская функция
Сообщение23.07.2024, 20:57 
Заслуженный участник
Аватара пользователя


03/06/08
2319
МО
Наверное, прямо так и сделать
Код:
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 
Заслуженный участник
Аватара пользователя


03/06/08
2319
МО
Нет, так не работает. Функция
Код:
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 


17/10/16
4793
пианист
Да, у меня тоже не работает.

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

 Профиль  
                  
 
 Re: Excel пользовательская функция
Сообщение24.07.2024, 08:33 
Заслуженный участник
Аватара пользователя


03/06/08
2319
МО
Надо на stackoverflow покопаться, наверняка этот вопрос там задавался.

 Профиль  
                  
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 01:49 


05/09/16
12056
пианист в сообщении #1647200 писал(а):
Код:
Worksheets("Лист1").Cells(1, 1) = x


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

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


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

 Профиль  
                  
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 06:28 
Заслуженный участник
Аватара пользователя


03/06/08
2319
МО
wrest
Нет. Такое Excel сам додумывает.

 Профиль  
                  
 
 Re: Excel пользовательская функция
Сообщение25.07.2024, 10:58 


05/09/16
12056
В общем, пишут что пользвателькие функции, вызываемые из ячейки, не могут изменить другие ячейки. By design. Но если они вызываются со строны (из макросов) то всё норм.
Есть обходные пути, но они вам не понравятся :mrgreen:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group