Excel 定义X和Y将发生变化的回归范围
我需要使用数据分析工具包创建一个简单的回归。问题是,Y和X输入的范围总是不同的。为了说明我想说的,下面是我需要处理的表格示例:Excel 定义X和Y将发生变化的回归范围,excel,regression,data-analysis,vba,Excel,Regression,Data Analysis,Vba,我需要使用数据分析工具包创建一个简单的回归。问题是,Y和X输入的范围总是不同的。为了说明我想说的,下面是我需要处理的表格示例: A B C D E F G H I J K L 1 Y T T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 2 19 1 3 13 2 19
A B C D E F G H I J K L
1 Y T 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
在本例中,Y输入的范围为A12:A21,这是因为表格最后一列的第一个条目(单元格L12中的“19”)在第12行,表格第一列的最后一个条目(单元格A21中的“16”)在第21行;此外,出于同样的原因,X输入将是区域B12:L21
在进行第一次回归之后,我需要从表中删除两列,然后再进行另一次回归。例如,如果我需要删除J列和L列,该表如下所示:
A B C D E F G H I J
1 Y T 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
现在回归将是输入Y(A11:A21),因为表格最后一列的第一个条目(“J11单元格中的19”)在第11行,表格第一列的最后一个条目(“A21单元格中的16”)在第21行。同样地,出于同样的原因,X输入将是(B11:J21)
我试过一百种不同的方法,但没有成功。这是我最接近于创建我所需要的,但我仍然迷路,因为它不会执行回归:
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
此用户定义函数(又名UDF)将把范围返回到
应用程序中。运行“ATPVBAEN.XLAM!regresse”
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
我仍然担心如果从回归范围中删除列,Range(“S1”)
可能会发生什么变化(即右移)。此外,它没有明确引用的父工作表
从原始数据块开始的输出:
$A$12:$L$21
$A$11:$J$21
所以,您希望运行一个回归,修改数据,然后运行第二个回归并报告两个结果?几乎,我只需要它来运行回归。我需要对数据进行修改,因为我需要删除的列并不总是相同的,它们总是在变化,这就是为什么我不能创建一个代码来简单地说明固定到某个区域的范围,范围需要根据我在问题中所述进行更改。听起来好像您实际上需要一个函数,该函数返回可以放入原始
应用程序的范围或范围地址。作为参数运行。列删除对范围(“S1”)
有何影响?我只需要使回归应用程序的列具有动态范围,因为我删除的列并不总是相同的。每次我进行新的回归时,范围(“S1”)都会向右移动,但我并不为此烦恼。如果我看起来很幼稚,我很抱歉,但是我如何才能将该代码集成到回归应用程序代码中?嗯,我想你是对的。。。如果S1(最初)是第一行的最后一个数字、日期或文本,我如何在每次进行新的回归时将输出范围(“S1”)更改为另一个范围,而不删除最后一个回归数据?(顺便说一句,你帮了我的忙,我无法描述你对我的帮助有多高兴。)(即没有数字或日期或其右边,然后单元格(1,Columns.count)。End(xlToLeft)
每次都会捕获它。这就像走到第1行的最右边并点击Ctrl键一样+← 因此,即使删除了A和S之间的列,它也始终是正确的单元格。缺少明确的父工作表仍然让我担心。我试图使您编写的代码正常工作,但它总是告诉我有一个错误:“回归-输入X范围必须是一个连续引用”我不知道我做错了什么:(我真的不知道它是一个range.address还是它期望的range.address。它应该是range($a$12:$a$21))
$A$12:$L$21
$A$11:$J$21