2017-06-28 41 views
0

我正在使用VBA,我非常喜歡新手。我基本上有3列數據作爲獨立變量(MSCI價值,增長和小盤),然後是一個空白列,後面是包含基金數據(因變量)的許多列。其中大部分具有相同的行數,但有一些不具備。在嵌套循環中使用最小函數

我期待在Excel中使用Linest函數分別生成每個基金的係數(beta)和每個獨立變量(MSCI growth,Value,Small cap)。我不確定什麼是設置我的數據和vba的最佳方式。想法/想法將不勝感激。

目前我的想法是一個嵌套循環。因此,我使用Linest函數將第一個自變量(MSCI增長,第2列)與第一個因變量(第6列)進行比較,並且該範圍內的該列號每次增加,直到該列爲空(沒有更多資金),當發生這種情況時,它會循環回第一筆資金,但會變爲下一個獨立變量(MSCI值,第3列)。重複這個過程直到最後一個自變量(MSCI增長,第4列)對最後一個基金進行迴歸。

我到目前爲止的問題一直是1)使用命名範圍創建一個Linest函數 2)創建一個表格放置循環的結果。

Set StartCell = Range("B9") 

LastRow = Cells(Rows.Count, 1).End(xlUp).Row 

Set gRange = Range(StartCell, Cells(LastRow, 2)) 'MSCI growth range 

Range("M21").value = Evaluate("Linest(gRange,G9:G112)") 'column G contains the first fund. 

此代碼不運行,我認爲它與數組公式有關,我只需要係數,因此不需要運行整個數組。

我嘗試使用單元格引用,但是當我跑的代碼我#VALUE

Range("M22").value = Evaluate("Linest(Range((cells(9,2):cells(112,2)),Range(cells(9,7):cells(112,7)))") 

也許我要對這個錯誤的方式,我想創建一個全球性的宏觀我可以在其他表使用,但我不確定如何處理任務。

回答

1

您需要從引號中刪除vba部分並連接。

ActiveSheet.Range("M21").value = ActiveSheet.Evaluate("Linest(" & gRange.Address(0,0) & ",G9:G112)")(1) 

第二個:

With ActiveSheet 
    .Range("M22").value = .Evaluate("Linest(" & .Range(.cells(9,2),.cells(112,2)).Address(0,0) & "," & .Range(.cells(9,7),.cells(112,7)).Address(0,0) & ")")(1) 
End With 

這也將錯誤,如果兩個範圍是不一樣的尺寸。所以確保他們是。