如何对列中的可变行数求和?

时间:2015-05-31 17:24:08

标签: excel vba excel-vba

我有一列整数从上到下按升序排序。每个整数在列中出现多次,但没有整数出现的次数相同。

向下移动列,当整数发生变化时,我想插入一行,显示新行上方相同整数的总和。

当我向下移动列时,我正在使用计数器来计算相同的整数(我的测试显示计数器正在工作), 但是当我将计数器插入R1C1格式(从下面的第三行开始)时,它返回零。因此,结果的总和是将当前行与其上方的行(圆形引用)相加,而不是包含与其上面的行相似的整数的顶行。

我的代码:

{{1}}

2 个答案:

答案 0 :(得分:0)

这是一个解决方案(有条件的"运行总和"),您可以使用/修改与您的案例相关的解决方案。假设为了简单起见,所有10个值都在Excel工作表A列中,那么"运行计数"将出现在B栏和"运行总和"在C栏中:

1   3   3
1   2   2
4   3   12
1   1   1
2   2   4
4   2   8
5   2   10
4   1   4
2   1   2
5   1   5

以下是执行此任务的简单VBA代码段:

Private Sub CommandButton1_Click()
Dim Counter As Integer
Dim lastRow As Integer
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lastRow
    Counter = 0
    x = Cells(i, 1).Value
    For j = i To lastRow
        If x = Cells(j, 1).Value Then
            Counter = Counter + 1
            Cells(i, 2).Value = Counter
            Cells(i, 3).Value = Counter * x
        End If
    Next j
Next i
End Sub

此外,任何数量条目的通用解决方案如下所示:

Private Sub CommandButton1_Click()
Dim Counter As Integer
Dim lastRow As Integer
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lastRow
    Counter = 0
    x = Cells(i, 1).Value
    For j = i To lastRow
        If x = Cells(j, 1).Value Then
            Counter = Counter + 1
            Cells(i, 2).Value = Counter
            Cells(i, 3).Value = Counter * x
        End If
    Next j
Next i
End Sub

希望这可能会有所帮助。最好的问候,

答案 1 :(得分:0)

我发现我需要将名为'counter'的变量传递给名为'subTotal'的子程序。一旦我解决了这个问题,一切正常。