【问题标题】:Using a Linest Function within a Nested Loop在嵌套循环中使用 Linest 函数
【发布时间】:2017-06-29 06:58:05
【问题描述】:

我正在使用 VBA,而且我还是个新手。我基本上有 3 列数据作为自变量(MSCI 价值、增长和小型股),然后是一个空白列,然后是包含基金数据(因变量)的许多列。其中大多数具有相同的行数,但少数没有。

我希望在 excel 中使用 Linest 函数来分别生成每个基金的系数 (beta) 以及每个独立变量(MSCI 增长、价值、小盘股)。我不确定设置数据和 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)))")

也许我做错了,我想创建一个可以在其他工作表上使用的全局宏,但我不确定如何完成这项任务。

【问题讨论】:

    标签: vba excel


    【解决方案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
    

    如果两个范围大小不同,这也会出错。所以请确保它们是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2017-05-08
      • 2021-03-03
      • 2021-09-29
      • 2014-04-24
      相关资源
      最近更新 更多