У меня есть массив значений в VBAscript, которые рассчитываются по двум диапазонам, предоставленным функции. Мне нужно выполнить расчет только для подмножества значений в этом массиве, удовлетворяющих пороговому условию. Пока у меня есть рабочий код:
Public Function CalculateCVar(exposure_v As Range, pdd_m As Range, a As Double) As Double
Dim ret_v_tail() As Double
Dim l, i As Integer
ret_v = Application.WorksheetFunction.MMult(exposure_v, _
Application.WorksheetFunction.Transpose(pdd_m))
value_at_risk = Application.WorksheetFunction.Percentile_Inc(ret_v, a)
l = 1
For i = 1 To UBound(ret_v)
If ret_v(i) <= value_at_risk Then
ReDim Preserve ret_v_tail(l)
ret_v_tail(l) = ret_v(i)
l = l + 1
End If
Next i
CalculateCVar = Application.WorksheetFunction.Average(ret_v_tail)
End Function
Однако мне было интересно, существует ли лучшая или более рациональная альтернатива для выбора подмножества массива в VBA, удовлетворяющего определенному условию, то есть нарезки массива основанный на условии. Псевдокод будет выглядеть следующим образом:
ret_v = [1., 2., 3., 4., 2., 4., 1., ...]
ret_v_tail = ret_v[ret_v <= 2.]
Мой текущий рабочий код также имеет недостаток, заключающийся в том, что он довольно медленный, так как мне приходится использовать эту функцию около 500 раз для другого ввода.