Цитата |
---|
nono4ka написал: нельзя через формулу массива сделать? |
удобнее с помощью VBA.
Код |
---|
Function GetNum(ByVal rVal As Range, Optional ByVal rCrit) As Double()
'возвращает одномерный массив типа Double из значений столбца rVal,
'если второй аргумент опущен,
'или из значений столбца rVal, соответствующих числовым rCrit
'можно передавать столбцы целиком
Dim v(), c(), d#(), i&, k&, x
If IsMissing(rCrit) Then
v = Intersect(rVal, rVal.Worksheet.UsedRange).Value2
ReDim d(1 To UBound(v))
For Each x In v
If VarType(x) = vbDouble Then k = k + 1: d(k) = x
Next
Else
c = Intersect(rCrit, rCrit.Worksheet.UsedRange).Value2
v = rVal(1).Resize(UBound(c)).Value2
ReDim d(1 To UBound(v))
For Each x In c
i = i + 1
If VarType(x) = vbDouble Then k = k + 1: d(k) = v(i, 1)
Next
End If
If k < UBound(d) Then ReDim Preserve d(1 To k)
GetNum = d
End Function
|
Поскольку функция возвращает массивы-строки, а не столбцы, массив степеней в ЛИНЕЙН должен быть столбцом:
Код |
---|
=ТРАНСП(ЛИНЕЙН(GetNum(B:B);GetNum(A:A;B:B)^{1:2:3:4})) |