如何将下一个场景复制到VBA
?
我的问题是使用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)
因此,在我看来,两个公式都很好地处理了数组而不是范围。
答案 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
)