繁体   English   中英

在Excel VBA中使用公式数组和趋势

[英]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函数提供的数组将与yvaluesxvalues数组具有相同的尺寸

那么为什么这样起作用:

...=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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM