定义X和Y将发生变化的回归的范围

我需要使用数据分析工具包创build一个简单的回归。 事情是,Y和Xinput的范围总是不同的。 为了说明我想说的话,下面是我需要处理的表格的一个例子:

ABCDEFGHIJKL 1 YT T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 2 19 1 3 13 2 19 4 14 3 13 19 5 16 4 14 13 19 6 17 5 16 14 13 19 7 16 6 17 16 14 13 19 8 20 7 16 17 16 14 13 19 9 10 8 20 16 17 16 14 13 19 10 20 9 10 20 16 17 16 14 13 19 11 11 10 20 10 20 16 17 16 14 13 19 12 11 11 11 20 10 20 16 17 16 14 13 19 13 14 12 11 11 20 10 20 16 17 16 14 13 14 15 13 14 11 11 20 10 20 16 17 16 14 15 17 14 15 14 11 11 20 10 20 16 17 16 16 10 15 17 15 14 11 11 20 10 20 16 17 17 4 16 10 17 15 14 11 11 20 10 20 16 18 15 17 4 10 17 15 14 11 11 20 10 20 19 6 18 15 4 10 17 15 14 11 11 20 10 20 10 19 6 15 4 10 17 15 14 11 11 20 21 16 20 10 6 15 4 10 17 15 14 11 11 22 16 10 6 15 4 10 17 15 14 11 23 16 10 6 15 4 10 17 15 14 24 16 10 6 15 4 10 17 15 25 16 10 6 15 4 10 17 26 16 10 6 15 4 10 27 16 10 6 15 4 28 16 10 6 15 29 16 10 6 30 16 10 31 16 

在这个例子中,Yinput将是范围A12:A21,这是因为表格的最后一列中的第一项(单元格L12中的“19”)在行12中,并且表格的第一列中的最后一项(单元格A21中的“16”)在第21行; 此外,由于相同的原因,Xinput将是区域B12:L21。

在完成第一次回归之后,我需要从表格中删除两列,然后做另一个回归。 所以,如果,例如我需要删除列J和L,表将如下所示:

  ABCDEFGHIJ 1 YT T1 T2 T3 T4 T5 T6 T7 T9 2 19 1 3 13 2 19 4 14 3 13 19 5 16 4 14 13 19 6 17 5 16 14 13 19 7 16 6 17 16 14 13 19 8 20 7 16 17 16 14 13 19 9 10 8 20 16 17 16 14 13 19 10 20 9 10 20 16 17 16 14 13 11 11 10 20 10 20 16 17 16 14 19 12 11 11 11 20 10 20 16 17 16 13 13 14 12 11 11 20 10 20 16 17 14 14 15 13 14 11 11 20 10 20 16 16 15 17 14 15 14 11 11 20 10 20 17 16 10 15 17 15 14 11 11 20 10 16 17 4 16 10 17 15 14 11 11 20 20 18 15 17 4 10 17 15 14 11 11 10 19 6 18 15 4 10 17 15 14 11 20 20 10 19 6 15 4 10 17 15 14 11 21 16 20 10 6 15 4 10 17 15 11 22 16 10 6 15 4 10 17 14 23 16 10 6 15 4 10 15 24 16 10 6 15 4 17 25 16 10 6 15 10 26 16 10 6 4 27 16 10 15 28 16 6 29 10 30 16 

现在回归将是inputY(A11:A21),因为表格的最后一列(单元格J11中的“19”)的第一个入口在行11中,表格的第一列的最后一个入口(“单元格A21中的“16”)在行21中。同样,由于相同的原因,Xinput将是(B11:J21)。

我尝试了一百种不同的方式,但没有运气。 这是我创build我所需要的最接近的,但我仍然失去了,因为它不会执行回归:

 Sub Prueba1() Range("A1").Select Selection.End(xlToRight).Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Application.Run "ATPVBAEN.XLAM!Regress", Range(Selection, Selection.End(xlDown)).Select, _ Range(Selection.Offset(, 1), Selection.End(xlToRight)).Select, False, False, , Range("S1") _ , False, False, False, False, , False End Sub 

这个用户自定义函数(aka UDF)将把范围返回到你的Application.Run "ATPVBAEN.XLAM!Regress"作为参数。

 Function regress_range() Dim strAddr As String, c As Long With Worksheets("Sheet4") '<~~set this worksheet name! With .Cells(1, 1).CurrentRegion Set regress_range = .Range(.Cells(.Cells(1, .Columns.Count).End(xlDown).Row, 1), _ .Cells(Application.Match(1E+99, .Columns(1)), .Columns.Count)) End With End With End Function 

您需要确保它正确地引用第三行中正确的工作表。

这将成为运行命令的一部分,

 Application.Run "ATPVBAEN.XLAM!Regress", regress_range(), False, False, , Range("S1") _ , False, False, False, False, , False 

我仍然担心如果列从回归范围中删除, Range("S1")如何改变(即右移)。 此外,它没有明确引用的父级工作表。

从原始数据块开始输出:

 $A$12:$L$21 $A$11:$J$21