Я прошу прощения за длину здесь, но мои знания VBA очень ограничены, и я хочу быть ясным.
Попытка сократить и ускорить работу функции Excel VBA, в которой одно из вычислений суммирует серию абсолютных разностей числа «N» между значением цены («Y0») и предыдущим значением цены («Y1»). Арифметическая формула выглядит так:
Sum( ABS(Y0 - Y1) + ABS(Y1 - Y2) + ABS(Y2 - Y3) + . . . )
или
Sum( ABS(Price - Price.Offset(-1, 0)) + Abs(Price.Offset(-1, 0) + . . . )
Кодирование изменений цен по отдельности является громоздким и медленным. В Excel следующая формула массива вычисляет правильный результат для одной ячейки в массиве N = 10:
{ =Sum(Abs($I15:$I24-($I14:$I23))) }
Эта формула вычисляет сумму абсолютных разностей в ценовом ряду в столбце I для N = 10 периодов. Два диапазона в массиве смещены на 1 период.
Значение этого расчета является знаменателем в соотношении, используемом при вычислении функции. Я бы хотел, чтобы VBA вычислял массив абсолютных разностей, а не арифметический ряд.
Мне удалось вернуть адреса для обоих диапазонов для N периодов в массиве, но мне не удалось получить в массиве вычисление суммы абсолютных разностей.
Понятно, что я не использую вычисления массива должным образом, если вообще. Я могу получить сумму массивов, но не намного дальше и не сумму абсолютных разностей по мере необходимости. Любая помощь будет принята с благодарностью.
'Формула волатильности {= SUM (ABS (Y: Yn) - (Y1: Yn1)))}
RRange = Range (RAddress)
R1Range = Range (R1Address)
R = Application.WorksheetFunction.Sum (Abs (RRange - R1Range))
Я бы хотел вычислить следующую формулу массива Excel и массив в VBA-функции .
.
{ =SUM(ABS($I15:$I24-($I14:$I23))) }