2013-04-15 76 views
0

我想累積4值維度(4,1)的Excel列中的值的總和。無法累積與VBA數組元素的總和

所以,我構造了下面的代碼。對於結果一側的列中的第一行,應該保持與原始數組中相同的值。 但是,一旦它大於第一行,它應該得到結果(i-1)的前一個元素並將其添加到當前列元素(i)。

VBA告訴我下標超出範圍:/我無法弄清楚爲什麼...所以我甚至不知道我的代碼是否做我想要的。

Sub CumulativeSum() 
    Dim i As Integer 
    Dim j As Integer 
    Dim rColumn() As Variant 
    Dim result() As Variant 
    ReDim result(1 To 4) 
    rColumn = Worksheets("Sheet1").Range("E1:E4").Value2 

    For i = 1 To 4 
     result(1) = rColumn(1, 1) 
     For j = 2 To 3 
      result(j) = rColumn(j, 1) + result(j - 1) 
     Next j 
    Next i 
    Dim dest As Range 
    Set dest = Worksheets("Sheet1").Range("F1") 
    dest.Resize(4, 1).Value = result 
End Sub 
+0

此代碼不會編譯。你遺漏了一些東西。 – RBarryYoung

+0

除非通過使用Option Base 1或在陣列Dim vArray(1到5)的聲明中指定,否則所有數組都從索引0開始。您還需要初始化陣列,因爲它們目前沒有元素。你也錯過了「結束如果」 – Sorceri

+0

我有一個新的代碼,並且我添加了選項庫1 .. – seigna

回答

1
Sub CumulativeSum() 

    Dim dest As Range 
    Dim i As Integer 
    Dim j As Integer 
    Dim rColumn() As Variant 
    Dim result() As Variant 
    ReDim result(1 To 4) 
    rColumn = Worksheets("Sheet1").Range("E1:E4").Value2 

    result(1) = rColumn(1, 1) 
    For j = 2 To 4 
     result(j) = rColumn(j, 1) + result(j - 1) 
    Next j 

    Set dest = Worksheets("Sheet1").Range("F1") 
    dest.Resize(4, 1).Value = Application.Transpose(result) 

End Sub 
+0

有一個問題...如果我決定我想通過使用Range(Cells( 5,1),Cells(5,4))。價值,這是否有效?因爲我在文件上試過它,並返回類型不匹配...:S – seigna

1

沒有足夠的代表,以添加評論,但..爲什麼你會得到一個錯誤的原因是因爲語法細胞是細胞([行],[專欄])。您將其輸入爲單元格([列],[行])。代替

嘗試範圍(單元格(1,5),單元格(4,5))。