我有一个工作表,其中包含一个事务列表和每个事务的可变行数。我使用下面的代码按交易总计行金额。
A列是事务标题(事务之间的空白单元格) H列是交易行金额 E列是我想要的交易总额
因此,如果列A<> ""然后开始添加列H,直到列A为<> ""试。
除最后一笔交易外,代码完美无缺。如果它有两行以上,则只会累加第一行和最后一行。我无法弄清楚原因。
有什么想法吗?
Here's a screenshot of my workbook
Option Explicit
Option Base 1
Sub SumColumnH()
Dim dSum As Double
Dim li As Long
Dim lj As Long
Dim lN As Long
Dim alRowFormula() As Long
Dim rng As Range
'Clear column 5
Intersect(Columns(5), Range(Rows(6), Rows(Rows.Count))).ClearContents
'Get row Index where to write formulas
For Each rng In Intersect(Columns(1), Range(Rows(6), Rows(Rows.Count))) _
.Cells.SpecialCells(xlCellTypeConstants)
lN = lN + 1
ReDim Preserve alRowFormula(lN)
alRowFormula(lN) = rng.Row
Next rng
'Sum rows
For li = 1 To lN - 1
dSum = 0
For lj = alRowFormula(li) To alRowFormula(li + 1) - 1
dSum = dSum + Cells(lj, 8).Value
Next lj
Cells(alRowFormula(li), 5).Value = dSum
Next li
'Final sum row
Cells(alRowFormula(lN), 5).Value = WorksheetFunction _
.Sum(Cells(alRowFormula(lN), 8), Cells(alRowFormula(lN), 8).End(xlDown))
End Sub
答案 0 :(得分:0)
你的最终.Sum只是添加了两个单元格:Cells(alRowFormula(lN), 8)
和Cells(alRowFormula(lN), 8).End(xlDown)
。
你真的想要
Cells(alRowFormula(lN), 5).Value = WorksheetFunction _
.Sum(Range(Cells(alRowFormula(lN), 8), Cells(alRowFormula(lN), 8).End(xlDown)))
P.S。您也可以使用.Sum函数使用以下代码计算其他值
'Sum rows
For li = 1 To lN - 1
Cells(alRowFormula(li), 5).Value = WorksheetFunction _
.Sum(Range(Cells(alRowFormula(li), 8), Cells(alRowFormula(li + 1)-1, 8)))
Next li