通过Linest函数VBA循环

时间:2017-06-29 00:40:47

标签: excel vba

我有3列自变量(MSCI)跟随因变量列(没有设置数字),如下所示:

MSCI Growth  MSCI Value MSCI Small Cap     Fund A    Fund B  Fund C  etccc
xxx           yyyy         zzzz                xxx     yyyy  zzz        
xxx           yyyy         zzzz                xxx     yyyy  zzzz
xxx           yyyy         zzzz                xxx     yyyy  zzzz
xxx           yyyy         zzzz                xxx     yyyy  zzzz
xxx           yyyy         zzzz
xxx           yyyy         zzzz
xxx           yyyy         zzzz

我需要使用Linest函数对每个依赖项回归每个自变量,并将结果值制成表格。我将始终有3个独立变量但可变数量的因变量(基金)

我的问题如下:

1)以下数据将产生9个结果值(每条线的斜率)。我想把它们放到一个表中,我可以将它写入循环中还是必须单独完成?示例结果表

      MSCI Growth  MSCI Value MSCI Small Cap
Fund A  Coeff       Coeff      Coeff
Fund B  Coeff       Coeff      Coeff
Fund C  Coeff       Coeff      Coeff

2)如果是这种情况,某些基金的行数与MSCI(自变量)的行数不同,则行功能不起作用,但我需要在表格中生成错误信息并继续下一个基金。我不确定如何在循环中反映这一点。

我有一个有效的Linest功能,并为每个独立变量设置我的范围

Sub NestedLoops()

Dim LastRow As Long
Dim Sht As Worksheet
Dim StartCell As Range
Dim gRange As Range

Set StartCell = Range("B9")

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

Set gRange = Range(StartCell, Cells(LastRow, 2)) 'range for MSCI Growth
Set vRange = Range("c9", Cells(LastRow, 3)) 'range for MSCI value
Set cRange = Range("D9", Cells(LastRow, 4)) 'range for MSCI small Cap


Range("M13").value = Application.LinEst(gRange, Range("G9:G112")) 

从这里开始,我不确定在编写嵌套循环方面要去哪里。理想情况下,我希望Range(“G9:”G112“)每次都将列号增加一个 - 如果它具有相同数量的数据行,则执行Linest,如果没有则产生错误消息 - 制表结果和进入下一个基金。 重复此过程,直到列为空(不再有资金)。然后重新开始,但使用下一个自变量(vRange)。

非常感谢任何有关最佳/最有效方式的帮助/建议。

1 个答案:

答案 0 :(得分:1)

代替使用名称范围尝试使用范围对象的偏移方法跨列移动