Страницы: 1
RSS
Функция на vba суммпроизв(мас1;мас2)/сумм(мас2)
 
Уважаемые знатоки!
Как прописать в vba функцию из двух массивов (например срвз(мас1;мас2) которая выдает результат    =суммпроизв(мас1;мас2)/сумм(мас2)
где мас1 и мас2 разные массивы данных состоящих из n количества строк и 1го столбца.

Другими словами посчитать средневзвешенное значение.
 
Здравствуйте.
Ну, во-первых, можно макрорекордером записать ввод вашей формулы для двух диапазонов данных (например для диапазонов А1:А5, В1:В5) и потом код подогнать под нужды реального файла.
Что-то типа такого:

Код
Range("C5").FormulaLocal="=СУММПРОИЗВ(A1:A5;B1:B5)/СУММ(B1:B5)"
 

А потом уж из ячейки брать полученное значение в переменную, делить ее, умножать, есть с кашей без соли (а ячейку очистить, чтобы враг не подглядел).

Это так, навскидку.
Изменено: Пытливый - 23.01.2015 23:33:50
Кому решение нужно - тот пример и рисует.
 
Код
Function срвз(r1 As Range, r2 As Range)
  срвз = Application.SumProduct(r1, r2) / Application.Sum(r2)
End Function
ps это не совсем полный аналог встроенных функций - например, не работает с массивами констант типа {1:2:3} или {1;2;3}, но, насколько я понимаю, это и не нужно? ;)
зато диапазоны могут быть как вертикальными, так и горизонтальными.
Изменено: ikki - 24.01.2015 01:31:40 (ps)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki,да именно то, что нужно.
Я правильно понял для встроенных формул при написание функции надо просто вставить Application
 
лучше - WorksheetFunction
тогда Вы сможете воспользоваться возможностями IntelliSense
и заодно убедиться - не все функции рабочего листа есть в этой объектной модели
нет тех, аналоги которых есть в простом VBA - например, ПСТР

хотя по факту работает и с Application

пс. кроме того, надо учитывать, что некоторые функции листа, вызванные в VBA, ведут себя иначе в случае ошибки.
они не присваивают значение ошибки переменной (хотя в языке есть встроенные константы типа xlErrNA), а инициируют исключительную ситуацию - ошибку времени выполнения.
Изменено: ikki - 24.01.2015 10:21:43
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Наверх