在excel vba中使用公式数组和趋势

时间:2011-02-21 12:11:52

标签: 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.1022
-64.1022

什么时候应该是不同的值。

知道问题是什么吗?谢谢你的帮助。

3 个答案:

答案 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从函数返回一个数组,而不只是一个值。