回归范围

Range of regression

我想 运行 使用 Excel 进行一组回归。因为回归的数量很大,所以我想使用 VBA 来自动化这个过程。许多回归将 运行 用于不同的变量集,因此我必须自动化回归数据的范围。

我使用 VBA 记录器获得调用 Excel 回归工具的 VBA 版本。记录器的结果如下:

 Sheets("Sheet2").Select
 Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range("$C:$C"), _
    ActiveSheet.Range("$D:$F"), False, True, , ActiveSheet.Range( _
    "$F:$N"), False, False, False, False, , False

然后计划使用 indirect(address()) 将 $C$38:$C$49 替换为:

  y1 = ActiveSheet.Range("b27")

  Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range("indirect(address(y1,3)):$C"), _
    ActiveSheet.Range("$D:$F"), False, True, , ActiveSheet.Range( _
    "$F:$N"), False, False, False, False, , False

单元格 B27 的值为 38。但是,当我尝试 运行 带有 y1 的代码时,我收到一条错误消息。如果我用数字替换 y1,即我输入 38 而不是 y1,代码 运行s。

知道如何解决使用 y1 的问题吗?

正如罗恩在上面所说的那样,ActiveSheet.Range("indirect(address(y1,3)):$C") 行不会解析,因为它是无效的 VBA 语法。

我知道你说你用细胞解决了它,但你也可以这样解决:

y1 = .Range("B27").Address
ActiveSheet.Range(y1 & ":$C")

但是,我不明白你为什么要设置 y1 如果它只是一个恒定范围的地址。如果您试图根据某种因素使其可变,请说明这一点,也许有更好的方法来完成您所追求的目标。

我找到的答案如下:

    y1 = ActiveSheet.Range("b27")
    y2 = ActiveSheet.Range("b25") - 1
    y3 = ActiveSheet.Range("b28")
    y4 = ActiveSheet.Range("b25") - 1

    x1 = ActiveSheet.Range("b27")
    x2 = ActiveSheet.Range("b25")
    x3 = ActiveSheet.Range("b28")
    x4 = ActiveSheet.Range("b26")



    Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range(Cells(y1, y2), Cells(y3, y4)), _
    ActiveSheet.Range(Cells(x1, x2), Cells(x3, x4)), False, True, , ActiveSheet.Range( _
    Cells(1, 7), Cells(20, 25)), False, False, False, False, , False

y1-x4 保留使用简单 excel 计算并存储在列 B 中的值。y1-y4 用于回归的 y(因变量),而 x1-x4 用于自变量。

B 列(y1-x4)中的值用于查找回归中使用了多少变量。例如,如果使用具有 100 个观测值的 5 个变量,则 y1 将为 5(obs 从第 5 行开始),y2 将为 3(obs 在 C 列中),y3 将为 105(总共 100 个 obs)并且 y4 将为 3再次.

对于 X 变量,我将有 x1=5(同样,obs 从第 5 行开始)、x2=4(obs 从 D 列开始)、x3=105(我们有 100 个 obs)和 x4=7(假设我们有 3 个独立变量,所以数据集在 F 列结束)。

我很确定这不是最有效或最时髦的方法,但它可以工作并表现出一定的模块化。请 post 任何对此进行改进的答案。