[英]using formula array and trend in excel vba
我想在两个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
什么时候应该使用不同的值。
知道是什么问题吗? 谢谢您的帮助。
您要插入的值不是公式; 因此,请使用“ .Value”而不是“ .FormulaArray”。
Worksheets("Summary").Range("M3").Resize(daycount, 1).Value = Application.WorksheetFunction.Trend(yvalues, xvalues)
编辑:
当心数组的渗透。 为了能够将数组直接插入范围,必须将数组放在(1到n,1到1)数组中。 TREND工作表函数接受一个1维数组(1到n)和两个2维数组(1到n,1到1)作为参数。 重要的是要注意,TREND函数提供的数组将与yvalues和xvalues数组具有相同的尺寸 。
那么为什么这样起作用:
...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues))
因为Application.WorksheetFunction.Trend(yvalues, xvalues)
传递了一个单维数组,然后将其作为参数传递给Array(..)函数,所以它变成了一个二维数组。
接收值的范围可能有问题。 尝试将其分配给范围对象,然后再应用公式本身。
目标/ 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
我想通了!
正确的电话是
...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues))
然后vba从函数返回一个数组,而不仅仅是一个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.