在VBA中滚动总和

我正在尝试使用vb在excel中创build一个滚动的十二个月总和。 数据的最后一列是dynamic的,所以我创build了一个variables来存储每次列号。 然后我尝试创build一个循环,输出前12个单元格的总和,并移动到下一个单元格,直到达到12个计算单元格。 但是,这是行不通的…有什么明显的,我做错了? 谢谢!

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 

可以做一个整洁的方式,但这个工程

 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的列而倒下。我build议使用Offset

但是,在excel公式中也可以很容易地完成滚动总数。 假设你的第一个值在列A ,你的date在第一行中,在第二行中input列A =SUM($A$1:A1)并沿着你的范围的其余部分拖动

赠送:

结果

公式: 公式

下面的代码将在一行中为第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 Sheet中的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 

首先,我build议你不要为此使用VBA。 相反,像这样使用内置的OFFSETfunction。 我已经在偏移量中使用了宽度参数,但是可以使用差异方向的高度

你的代码是相当复杂的,但也许你应该使用xlToRight而不是xlToLeft来find最后一列。

如果你想使用VBA,你可以尝试使用WorkSheetFunction.offset,把它放入一个范围variables,然后总结该范围。