[英]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.