我正在与VBA合作,我非常喜欢新手。我基本上有3列数据作为自变量(MSCI Value,Growth和Small Cap),然后是一个空白列,后面是包含基金数据(因变量)的众多列。其中大多数行具有相同的行数,但有一些行没有。
我希望在Excel中使用Linest函数分别生成每个基金的系数(beta),每个独立变量(MSCI增长,价值,小盘股)。我不确定什么是设置我的数据和vba的最佳方法。并且非常感谢思想/想法。
目前我的想法是嵌套循环。因此,我使用Linest函数对第一个因变量(第6列)回归第一个自变量(MSCI增长,第2列),并且每次增加该范围内的列数,直到该列为空(没有更多资金) ),当这种情况发生时,它会循环回到第一个基金,但会变为下一个自变量(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)))")
也许我会以错误的方式解决这个问题,我想创建一个我可以在其他工作表上使用的全局宏,但我不确定如何处理这个任务。
答案 0 :(得分: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
如果两个范围的大小不同,这也会出错。所以要确保它们是。