在VBA中编写索引和LinEst公式

时间:2019-08-27 16:27:35

标签: excel vba

如何将下一个场景复制到VBA

enter image description here

我的问题是使用VBA脚本编写公式。

我已经做了以下事情:

Sub CALC()
        Dim X(1 to 10) as Double
        Dim Y(1 to 10) as Double
        Dim QUA_A as Double
    '--------
        For N = 1 to 10
            X(N) = Cells(N, 1).Value
            Y(N) = Cells(N, 2).Value         
        Next N
    '--------
        QUA_A = WorksheetFunction.Index(WorksheetFunction.LinEst(X, Y ^ [1,2]), 1)
End Sub

但是,我在QUA_A = ...行上遇到语法错误

我想念什么?谢谢。

注意:

我想我在追求中误导了你们。 首先,我不是打算使用范围。真正的问题涉及到更大的数组,并且如果我编写数组(甚至在xlVeryHidden表上),将花费很长时间才能运行整个过程。我只是用这张纸(图片上的)来解释这个问题。 其次,当我使用命令

QUA_A = WorksheetFunction.Index(WorksheetFunction.LinEst(X, Y), 1) 

没有错误提示,并且值等于它的等效值

=INDEX(LINEST(A1:A10;B1:B10);1)

因此,在我看来,两个公式都很好地处理了数组而不是范围。

2 个答案:

答案 0 :(得分:2)

将X设为二维数组,然后在公式之前做数学部分:

Sub CALC()
        Dim X(1 To 2, 1 To 10) As Double
        Dim Y(1 To 10) As Double
        Dim QUA_A As Double
    '--------
        For n = 1 To 10
            X(1, n) = Cells(n, 2).Value
            X(2, n) = Cells(n, 2).Value ^ 2
            Y(n) = Cells(n, 1).Value
        Next n
    '--------
        QUA_A = WorksheetFunction.Index(WorksheetFunction.LinEst(Y, X), 1)
        Debug.Print QUA_A
End Sub

答案 1 :(得分:0)

虽然我得到的结果与您不同,但是您可以尝试以下方法。

(请注意,您的位置设置可能与我的位置设置不同,因此您可能需要将,的{​​{1}}切换为;

Sub calc2()
Dim rng1 As Range, rng2 As Range
Dim QUA_A as Variant
Set rng1 = Range("A1:A10")
Set rng2 = rng1.Offset(0, 1)

QUA_A = Evaluate("=INDEX(LINEST(" & rng1.Address & "," & rng2.Address & "^{1,2}),1)")

Range("D2").Value = QUA_A

End Sub

(我得到0.677035912999494