我想在两个excel vba数组之间进行线性回归,然后将预测值复制到电子表格中。
到目前为止,我有两个数组,我正在尝试使用excel趋势函数,但电子表格数组多次填充一个值。
Worksheets("Summary").Range("M3").Resize(daycount, 1).FormulaArray = Application.WorksheetFunction.Trend(yvalues, xvalues)
我的输出位于M列:
-64.1022
-64.1022
-64.1022
-64.1022
-64.1022
什么时候应该是不同的值。
知道问题是什么吗?谢谢你的帮助。
答案 0 :(得分:0)
您插入的值不是公式;因此使用“.Value”而不是“.FormulaArray”。
Worksheets("Summary").Range("M3").Resize(daycount, 1).Value = Application.WorksheetFunction.Trend(yvalues, xvalues)
修改强>
谨防阵列的分歧。 为了能够将数组直接插入范围,必须具有(1到n,1到1)数组维数。 TREND 工作表函数接受一维数组(1到n)和2维数组(1到n,1到1)作为参数。重要的是要注意,TREND函数提供的数组与 yvalues 和 xvalues 具有相同的维度阵列。
为什么这有效:
...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues))
因为Application.WorksheetFunction.Trend(yvalues, xvalues)
传递了一个单向数组,然后当它作为参数传递给Array(..)函数时,它变成了一个二维数组。
答案 1 :(得分:0)
可能接收到该值的范围有问题。尝试将其分配给范围对象,然后应用公式本身。
目标/ X / Y范围是否都具有相同的尺寸?不确定他们是否会工作。
刚试过下面的代码并且工作正常(即目标范围得到十进制值,如预期的那样)。
仅供参考,我将范围A1:A5设置为[1 2 3 4 5],将B1:B5设置为[100 10 5 2 1]。
Sub TestTrend()
Dim oRange As Excel.Range
Dim oRangeX As Excel.Range
Dim oRangeY As Excel.Range
Set oRange = Worksheets("MySheet").Range("C1:C5")
Set oRangeX = Worksheets("MySheet").Range("A1:A5")
Set oRangeY = Worksheets("MySheet").Range("B1:B5")
oRange.FormulaArray = Application.WorksheetFunction.Trend(oRangeX, oRangeY)
End Sub
答案 2 :(得分:0)
我已经明白了!!
正确的电话是
...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues))
然后vba从函数返回一个数组,而不只是一个值。