在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,然后总结该范围。