回归的范围

我想用Excel来运行一组回归。 由于回归的数量非常大,我想使用VBA自动化该过程。 许多回归将运行在一组不同的variables上,所以我必须自动化回归数据的范围。

我用VBA录音机来获取调用Excel回归工具的VBA版本。 logging仪的结果如下所示:

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

然后,计划使用间接(address())将$ C $ 38:$ C $ 49replace为:

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

单元格B27具有值38 。 但是,当我尝试运行y1的代码时,我收到一条错误消息。 如果我用一个数字replacey1,即代替y1我把38 ,代码运行。

任何想法如何解决使用y1的问题?

正如罗恩上面所说的行ActiveSheet.Range("indirect(address(y1,3)):$C$49")不会简单地解决,因为它不是有效的VBA语法。

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

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

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

我find的答案如下:

  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(因variables),而独立variables是x1-x4。

B列中的值(y1-x4)用于查找回归中使用了多less个variables。 例如,如果使用5个具有100个观察值的variables,则y1将是5(obs从第5行开始),y2将是3(obs在C列中),y3将会105(100 obs总数),并且y4将是3再次。

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

我很确定,这不是最有效或最时尚的方法,但它的工作原理和展现一些模块化。 请发布任何改善这个问题的答案。