2014 dxdy logo

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

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




 
 VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение15.10.2018, 21:01 
Добрый день всем. В Excel есть функции, возвращающие не одно значение, а матрицу. При этом мы выделяем массив под конечный результат, вводим функцию, аргументы и жмём ctrl + shift + enter. Так устроены скажем функция мумнож() или мобр().

Я начал разбираться с тем, как писать функции на VBA. Пишут, что такая функция возвращает одно значение. А если я хочу написать типа свой мобр()? Как мне Каким должен быть заголовок функции и как правильно возвратить наружу матричный выходной аргумент? Заранее спасибо

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение15.10.2018, 21:18 
У VBA есть объект Selection, который является ссылкой на текущий выделенный диапазон. Заполняйте его значениями прямо внутри функции. Правда, с функциями, возвращающими матрицу, я не работал, возможно, есть другой способ.

-- 15.10.2018, 22:22 --

Стандартные функции, доступные для использования в ячейках, в VBA содержатся в объекте WorksheetFunction. Можете поискать их в библиотеке объектов, там можно найти сигнатуры.

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение15.10.2018, 21:31 
rockclimber в сообщении #1346526 писал(а):
У VBA есть объект Selection, который является ссылкой на текущий выделенный диапазон.


Точно! Надо попробовать так.

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение16.10.2018, 02:17 
Вообще, программирование на VB в Excelе стоит начинать с включения режима записи и выполнения действия руками. Потом можно посмотреть код и подправить. Selection сопряжён с визуальными эффектами, что лишнее, имхо. Лучше использовать, кажется, Range.

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение16.10.2018, 09:38 
iifat в сообщении #1346593 писал(а):
Вообще, программирование на VB в Excelе стоит начинать с включения режима записи и выполнения действия руками.
Это да, но до самых интересных и мощных штук в экселе так не доберешься, к сожалению.
iifat в сообщении #1346593 писал(а):
Selection сопряжён с визуальными эффектами, что лишнее, имхо.
Не совсем так. Если просто записать макрос, то вы увидите там слишком много лишних движений - выделение каждой ячейки (что-нибудь вроде Range("A1").Select), включение режима копирования и прочее. Все это совершенно не нужно в итоге (и рано или поздно вы к этому придете). И именно это и вызывает все "визуальные эффекты". Вот недавний топик - «Старый Excel-файл со старым макросом [Excel 2003]» - там ка раз приведен макрос, который "просто записали и всё". А объект Selection - это просто ссылка на диапазон выделенных ячеек. И кстати, по сути тот же Range.
Ну и конечно, все визуальные эффекты отключаются строчкой
Код:
Application.ScreenUpdating = False
в начале макроса. Это ускоряет выполнение в несколько раз даже самого оптимизированного макроса (конечно, сила эффекта зависит от того, насколько активно вы перезаписываете ячейки).

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение16.10.2018, 15:49 
Про последнее спасибо. :appl:

 
 
 
 Re: VBA: матричная ф-ция, реагирующая на ctrl+shift+enter
Сообщение16.10.2018, 15:52 
arseniiv в сообщении #1346750 писал(а):
Про последнее спасибо


Присоединяюсь

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


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