2017-08-25 38 views
1

我想在vb中使用excel創建滾動的12個月總和。數據的最後一列是動態的,所以我創建了一個變量來存儲每次列號。然後我嘗試創建一個循環,輸出前12個單元格的總和,並移動到下一個單元格,直到它達到12個計算單元格。但是這不起作用...有什麼顯而易見的,我做錯了?謝謝!在VBA中滾動的總和

Sub OSR_ReportComplete() 
Dim lCol As Long 
Dim p As Integer 
lCol = Cells(7, Columns.Count).End(xlToLeft).Column 
For p = 0 To 12 
    Range(Cells(15, lCol - p)).Value = Application.Sum(Range(Cells(7, lCol - 
    p), Cells(7, lCol - p - 12))) 
Next p 
End Sub 
+1

寫可能不是這裏的問題,但是當使用範圍時,您應該始終指定工作表... –

+0

不工作,不是對問題的很好描述。你會得到什麼錯誤?或者它做了什麼? –

+0

我只發佈了我添加的代碼片段來完成滾動總和。此代碼位於循環中,循環通過工作表並執行多個任務。其餘的代碼工作正常,但是當我添加我發佈的代碼時,它不會做任何不同的事情。我本來期望第15行的一組單元格有總和,但我什麼都沒有。 – johankent30

回答

0

能在一個更合適的方法進行,但這個工程

Sub OSR_ReportComplete() 
    Dim lCol As Long 
    Dim p As Integer 
    lCol = Cells(7, Columns.Count).End(xlToLeft).Column 
    For p = 0 To 12 
     Cells(15, lCol - p) = Application.Sum(Range(Cells(7, lCol - p), Cells(7, lCol - p - 12))) 
    Next p 
End Sub 

此外,如果你的lCol計算爲一個值小於25就摔倒了,雖然在試圖引用列小於1。我'd建議使用Offset來代替

但是,在Excel公式中也可以非常容易地進行滾動總計。說你的第一個值是A柱和你的日期是在1行,在2行中列A=SUM($A$1:A1)和拖動沿着你的範圍

捐贈的其餘部分進入:

Results

公式: Formulas

以下代碼將在一行中爲第1行生成以上公式,而不是執行循環。這是一個例子,因爲我不從你的代碼瞭解您的表的版式

Sub OSR_ReportComplete2() 
    With Range(Cells(1, 1), Cells(1, Columns.Count).End(xlToLeft)) 
     .Offset(1, 0).Formula = "=SUM(" & .Cells(1).Address & ":" & Split(.Cells.Address(RowAbsolute:=False, ColumnAbsolute:=False), ":")(0) & ")" 
    End With 
End Sub 

這種情況很容易在R1C1表示法(但是將在Excel工作表中顯示的A1)

Sub OSR_ReportComplete2() 
    With Range(Cells(1, 1), Cells(1, Columns.Count).End(xlToLeft)) 
     .Offset(1, 0).FormulaR1C1 = "=SUM(" & .Cells(1).Address(ReferenceStyle:=False) & ":R[-1]C)" 
    End With 
End Sub 
+0

好的,謝謝,問題是我的數據從SQL數據庫生成,所以我想在數據結束後自動運行我的分析,它不總是在相同的位置,否則我只會使用一個簡單的公式 – johankent30

+0

您的修改後的代碼是否可以完成這項工作?你也可以編程來填充公式而不是數值 – Tom

0

首先,我建議你不要爲此使用VBA。相反,使用內置的OFFSET功能,就像這樣。 I have used width argument in the offset but one canuse height for a diff direction

您的代碼相當複雜,但也許您應該使用xlToRight而不是xlToLeft來查找最後一列。

如果您想使用VBA,可以嘗試使用WorkSheetFunction.offset,將其放入範圍變量中,然後對該範圍進行求和。

+0

如果存在空單元格,'xlToRight'可能會錯過OPs範圍中的最後一列。因此,使用'xlToLeft' – Tom