簡體   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