2015-09-05 50 views
3

我需要使用數據分析工具包創建簡單迴歸。事情是,Y和X輸入的範圍總是不同的。爲了說明什麼,我想說,這裏的表的一個例子,我需要在工作:定義X和Y將發生變化的迴歸範圍

 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 
+0

那麼您正在尋找運行迴歸,修改數據,然後運行第二個迴歸和報告兩個結果? – brettdj

+0

幾乎,我只需要它來運行迴歸。數據修改需要由我來完成,因爲我需要擦除的列不總是相同的,它們總是在變化,這就是爲什麼我不能創建一個代碼來簡單地說明固定到某個區域的範圍,範圍需要改變根據我在問題中所述。 – Alexzuqui

+0

聽起來好像你實際上需要一個返回範圍或範圍地址的函數,它可以作爲參數放入原始的'Application.Run'中。 'Range(「S1」)'是如何影響列刪除的? – Jeeped

回答

2

該用戶定義函數(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 
+0

對不起,如果我看起來天真,但我該如何將該代碼集成到迴歸應用程序代碼中? – Alexzuqui

+0

嗯,我認爲你是正確的...我怎麼能使輸出範圍'(範圍(「S1」)'改變到另一個範圍每次我做一個新的迴歸沒有它擦拭最後的迴歸數據?(順便說一下,你對我的幫助很棒,我無法形容你在幫助中給我帶來的快樂) – Alexzuqui

+0

如果S1(最初)是最後一個數字,那麼日期或文字會沿着第一排(即沒有數字或日期或權利,那麼'Cells(1,Columns.count).End(xlToLeft)'會每次捕獲它,就像進入第1行的最右邊並點擊Ctrl +←,即使A和S被刪除,它將永遠是正確的單元格。缺少明確的父級工作表仍然關注我 – Jeeped

相關問題