2015-10-20 93 views
0

我想使用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 

該計劃是然後用間接的(地址())來代替$ 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的問題?

+0

如果您共享錯誤消息的文本,它肯定會有所幫助。但是,請注意'Range(「indirect(address(y1,3)):$ C $ 49」)'是不恰當的語法,不會解析爲範圍對象。使用立即窗口來檢查這一點。 –

+0

我不能測試這個,但它可能值得嘗試ActiveSheet.Range(「間接(地址(」和Y1&「,3)):$ C $ 49」), –

+0

感謝羅恩和湯姆。 @羅恩:你能解釋一下爲什麼它不會轉移到範圍對象中嗎?請注意我不是vba的專家。另外,什麼是直接窗口?我設法使用單元格解決了這個問題,我不知道這是否是最有效或最好的方式,但它的工作原理是:)。 – km1234

回答

2

羅恩行ActiveSheet.Range("indirect(address(y1,3)):$C$49")上述,因爲它不是有效的VBA語法不會簡單地解決。

我知道你說你解決它使用的細胞,但你也可以解決這個問題是這樣的:

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

不過,我不明白爲什麼你甚至設置y1如果只是將是一個常數範圍地址。如果您試圖根據某種因素使其變得可變,請說明這一點,也許有更好的方法來實現您的目標。

+0

非常感謝Scott的回覆。它清楚地解釋了爲什麼我最初做的是不正確的語法。 y1 = 38只是一個例子,我必須運行很多回歸,而且我需要一種自動化的方法。謝謝您的幫助。 – km1234

0

我發現回答是下列:

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列結束)。

我敢肯定,這是不是最有效的還是時尚的方式做到這一點,但它的工作原理,並表現出了一定的模塊。請發佈任何改善這個問題的答案。