Arrays 在excelvba中使用公式数组和趋势

Arrays 在excelvba中使用公式数组和趋势,arrays,excel,vba,formula,Arrays,Excel,Vba,Formula,我想在两个excel vba数组之间进行线性回归,然后将预测值复制到电子表格中 到目前为止,我有两个数组,我正在尝试使用excel趋势函数,但电子表格数组多次填充一个值 Worksheets("Summary").Range("M3").Resize(daycount, 1).FormulaArray = Application.WorksheetFunction.Trend(yvalues, xvalues) 我的输出在M列中: -64.1022 -64.1022 -64.1022 -64.

我想在两个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的数组维度。 趋势工作表函数接受一维数组1到n以及二维数组1到n、1到1作为参数。重要的是要注意,趋势函数提供的数组将与yvalues和xvalues数组具有相同的维度

那么,为什么这样做有效:

...=Array(Application.WorksheetFunction.Trend(yvalues, xvalues)) 

由于Application.WorksheetFunction.Trendyvalues是一维数组,因此xvalues将其作为参数传递给数组。。函数,它变成了一个二维数组。

可能接收值的范围有问题。尝试将其指定给范围对象,然后应用公式本身

两个目标/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从函数返回一个数组,而不仅仅是一个值

我尝试改用.Value,但得到了相同的结果。还有其他想法吗?我已经检查了我的数组yvalues和xvalues,它们看起来是正确的。@sar:您的数组是垂直排列的吗?数组的索引应该是:y值1到daycount,1到1,而不是y值1到1,1到daycount嘿,伙计们,我认为问题在于我使用的数组存储在vba中,而不是电子表格中。数据取自spreasheet,经过处理,然后用于构建趋势线,因此我使用的yvalues和xvalues不会显示在电子表格中。我希望这是清楚的。我已经尝试过这两种解决方案,当您使用电子表格中的范围时,它们确实有效,但当您输入vba数组时,它们就不起作用。我仍然认为您遇到的问题是,您将值应用到唯一的范围M3中,然后调整其大小。如果将RangeM3.Resizedaycount,1范围设置为特定的范围对象,然后在不使用数组的情况下指定趋势值,则其效果可能与下面的示例相同。