2011-07-14 50 views
1

一種工作項目的要求是按天計算若干類別的總結每小時的值加在一起。這些值存儲在一個長列中的電子表格中;爲了獲得價值觀,我每24行彙總一個新的一天。這可以通過電子表格循環和通過24.增量自動填充範圍由可變數目

增加值爲每個環路例如來完成:

first = 1 
second = 24 
i = 0 
While Worksheets("Data").Range("A1").offset(i, 0) <> "" 
    Worksheets("Data").Range("C1").offset(i, 0).Formula = "=SUM(B" & first & ":B" & second & ")") 
    first = first + 24 
    second = second + 24 
Wend 

凡塔A是類別和列B是每小時數據。列B將A列的長度* 24

這產生的結果類似...

=SUM(B1:B24) 
=SUM(B25:B48) 
=SUM(B49:B72) 

..等等。

這個效果很好,但速度很慢。我希望做的是使用自動填充整個範圍,但我不知道如何把它寫在這樣一種方式,它會由25每次遞增值。到目前爲止,我只能夠得到它的增量遞增爲每個值,其中

=SUM(B1:B24) 

成爲

=SUM(B2:B25) 

是否有使用自動填充功能上的範圍中,將通過一個遞增的方式可變數字 - 在這種情況下,24?

在此先感謝。

+0

是你的實際代碼嗎?你在哪裏遞增我? –

+0

難道根本不可能使用Excel小計嗎?它會很容易地做到這一點(只要你有一天的專欄)。 –

+0

@Tim:不,它是展示這個想法的示例代碼。我現在看到我應該進一步審查它。在循環中,我會增加一個。 –

回答

0

可能有很多方法可以做到這一點,無論是使用或不使用VBA。

我向你展示了一個只使用Excel的解決方案,但可以遷移到VBA以避免其他列的使用(我相信必須有一種方法可以在不使用支持列的情況下進行,社區中的其他人可能會記住,最終)。

嗯,這裏的技巧是使用INDIRECT公式。

我會假設你申請總和的公式列C.

在列d和E,你會存儲行索引。然後,我們將有:

|D  |E  | 
|-------|-------| 
|1  |24  | 
|=D1+24 |=E1+24 | 
|=D2+24 |=E2+24 | 

現在,在C列,而不是使用金額直接值,使用:

=SUM(INDIRECT("B"&D1):INDIRECT("B"&E1)) 
=SUM(INDIRECT("B"&D2):INDIRECT("B"&E2)) 
=SUM(INDIRECT("B"&D3):INDIRECT("B"&E3)) 

該代碼可以被拖累,只要你想盡可能多的,如只要您將列C,D和E一起拖動即可。

同樣,它也可以使用VBA票友方式(也許在一個更聰明的方法只使用Excel的,嘿嘿及),但就是這樣走過來對我的腦海裏的方式進行。無論如何,我在這裏看到的關於簡單VBA實現的大多數問題都是針對個人使用的,所以使用其他列不會成爲問題。

如果您更喜歡(或需要)使用VBA,請撰寫您的代碼,我們將幫助您解決問題。

希望它有幫助。

+0

蒂亞戈,這不是一個壞主意。明天早上我會首先給你一個機會,讓你知道。非常感謝。 –

+0

這似乎已經成功了。感謝蒂亞戈! –

1

如果你與你目前的做法唯一的抱怨是它的速度,那麼你也許可以讓它顯著更快通過暫停計算,而你插入公式:

Application.Calculation = xlCalculationManual 
'do your thing 
Application.Calculation = xlCalculationAutomatic 
+0

Tim,謝謝對於這個建議。我有一種方法可以在我的電子表格中啓動每個進程,並且在這個「main」方法的開始和結尾處都有這些行。 –