VBA 用于插入值的 Linest 函数

VBA Linest function to interpolate a value

您好,我正在尝试使用 Worksheet 函数 LinEst 作为给定 X 的估算器。首先找到了一个函数,该函数可以为我提供数字 1 到 n 的列表以用作幂。然后尝试合并到函数中。但我确信我犯了很多错误。最终,我想输入一个 x 范围和一个 y 范围、我的线性估计的多项式阶数和一个 x 以获得估计结果。


Option Explicit

Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant

    Dim lngCounter  As Long
    Dim arrReturn   As Variant

    ReDim arrReturn(N - M)

    For lngCounter = 0 To N - M
        arrReturn(lngCounter) = M + lngCounter
    Next lngCounter

    ReturnArrayAtoB = arrReturn

End Function


Function PolyFit(rX As Range, rY As Range, Xinput, Optional PolyOrder = 3)
Dim varLinEst As Variant
Dim arrReturn As Variant
Dim i As Integer
Dim a As Long

arrReturn = ReturnArrayAtoB(1, PolyOrder)

varLinEst = WorksheetFunction.LinEst(rY, ((rX) ^ (arrReturn)), True, False)

a = 0
For i = 1 To PolyOrder
    a = Xinput ^ varLinEst(i) + a
Next i
a = a + varLinEst(0)

    PolyFit = a

PolyFit = varLinEst

End Function

您需要后期绑定公式并使用Application.Power

我修复了一些其他逻辑问题。

Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant
    Dim arrReturn   As Variant
    ReDim arrReturn(N - M)

    Dim lngCounter  As Long
    For lngCounter = 0 To N - M
        arrReturn(lngCounter) = M + lngCounter
    Next lngCounter

    ReturnArrayAtoB = arrReturn

End Function


Function PolyFit(rX As Range, rY As Range, Xinput As Double, Optional PolyOrder = 3)
    Dim arrReturn As Variant
    arrReturn = ReturnArrayAtoB(1, PolyOrder)

    Dim varLinEst As Variant
    varLinEst = Application.LinEst(rY, Application.Power(rX, arrReturn))

    Dim a As Double
    a = 0#

    Dim i As Long
    For i = 1 To PolyOrder + 1
        a = (Xinput ^ (PolyOrder + 1 - i)) * varLinEst(i) + a
    Next i

    PolyFit = a
End Function

只是因为,如果有 Sequence():

=SUMPRODUCT(INDEX(LINEST(B1:B8,(A1:A8^SEQUENCE(,E2))),SEQUENCE(E2+1)),E1^(SEQUENCE(E2+1,,E2,-1)))