一列中的VBA求和范围,直到另一列中的非空行

时间:2016-08-02 21:18:59

标签: excel vba excel-vba

我有一个工作表,其中包含一个事务列表和每个事务的可变行数。我使用下面的代码按交易总计行金额。

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

1 个答案:

答案 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