首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一列中的VBA求和范围,直到另一列中的非空行

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

Stack Overflow用户
提问于 2016-08-03 05:18:59
回答 1查看 711关注 0票数 0

我有一个包含事务列表和每个事务的可变行数的工作表。我使用下面的代码对每笔交易的行数进行求和。

列A是事务处理标题(事务处理之间的空白单元格)列H是事务处理行金额列E是我想要的事务处理总数

因此,如果A列<> "“,则开始添加H列,直到A列再次为<> "”。

除了最后一个事务之外,代码运行得很好。如果它有两行以上的行,它只会将第一行和最后一行的数量相加。我也不知道为什么。

有什么想法吗?

Here's a screenshot of my workbook

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 05:35:46

最终的.Sum只添加了两个单元格:Cells(alRowFormula(lN), 8)Cells(alRowFormula(lN), 8).End(xlDown)

你真的想要

代码语言:javascript
复制
Cells(alRowFormula(lN), 5).Value = WorksheetFunction _
.Sum(Range(Cells(alRowFormula(lN), 8), Cells(alRowFormula(lN), 8).End(xlDown)))

附注:您的其他值也可以通过以下代码使用.Sum函数来计算

代码语言:javascript
复制
'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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38730634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档