Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 回归范围_Vba_Excel_Regression - Fatal编程技术网

Vba 回归范围

Vba 回归范围,vba,excel,regression,Vba,Excel,Regression,我想使用Excel运行一组回归。因为回归的数量相当大,我想使用VBA自动化这个过程。许多回归将在不同的变量集上运行,因此我必须自动化回归数据的范围 我使用VBA记录器获取调用Excel回归工具的VBA版本。记录器的结果如下所示: Sheets("Sheet2").Select Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range("$C$38:$C$49"), _ ActiveSheet.Range("$D$38:$F$

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

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

 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
    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
然后计划使用间接(address())将$C$38:$C$49替换为:

  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运行代码时,我收到一条错误消息。如果我将y1替换为一个数字,也就是说,我将y1替换为
38
,代码将运行


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

正如Ron在上面的
ActiveSheet.Range行(“间接(地址(y1,3)):$C$49”)
都无法解决,因为它不是有效的VBA语法

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

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

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

我找到的答案如下:

 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
    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)中的值用于确定回归中使用了多少变量。例如,如果使用5个具有100个观测值的变量,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列结束)


我很确定这不是最有效或最时尚的方式,但它可以工作,并表现出一定的模块性。请发布任何对此有所改进的答案。

如果您共享错误消息的文本,肯定会有所帮助。但是,请注意,
Range(“间接(地址(y1,3)):$C$49”)
的语法不正确,无法解析为Range对象。使用即时窗口检查此项。我无法测试此项,但可能值得尝试ActiveSheet.Range(“间接(地址(“&y1&”,3)):$C$49”),谢谢Ron和Tom。@罗恩:你能解释一下为什么它不能分解成射程物体吗?请注意,我不是vba的专家。还有,什么是即时窗口?我设法用单元格解决了这个问题,我不知道这是否是最有效或最好的方法,但它是有效的:)。我可以理解为引号中的所有内容“间接(地址(y1,3)):$C$49”只是一个字符串,它字面上包含的字符“y1”作为地址的一部分没有意义。您需要从字符串中取出y1,以确保它被解释为变量。在VisualBasic中按Ctrl-G可以获得即时窗口,其中有很多有用的东西,如手表(关于变量的作用)和调试输出。非常感谢您的回复。它清楚地解释了为什么我最初做的不是正确的语法。y1=38只是一个例子,我必须运行许多回归,我需要一种方法来自动化事情。谢谢你的帮助。