基本解释。我正在一个电子表格中收集所有多个发票数据。假设我只有两列分隔不同的发票:
Serial ID. Value
ABC001 $5.00
ABC001 $5.00
ABC001 $5.00
CBA100 $6.00
CBA100 $4.00
CBA100 $5.00
我想要一个循环遍历列的VBA解决方案,在columnB中汇总值UNTIL在columnA中有一个变化,那么THEN会把这个和值放在columnC上的LAST ROW行之前。结果如下:
Serial ID. Value Total
ABC001 $5.00
ABC001 $5.00
ABC001 $5.00 $15.00
CBA100 $6.00
CBA100 $4.00
CBA100 $5.00 $15.00
到目前为止,我发现最接近的是D Mason
的解决方案但是他的代码中的问题是,columnB地址中值的总和是在EXACT行号WHERE THE CHANGE HAPPENS(不是BEFORE)中,它会像这样运行:
Serial ID. Value Total
ABC001 $5.00 $15.00
ABC001 $5.00
ABC001 $5.00
CBA100 $6.00 $15.00
CBA100 $4.00
CBA100 $5.00
我确信,我明白了问题。但是为了以防万一,Serial Id将始终保持在同一列中,因此值也是如此。不会进行任何排序。如果整个范围的总和对我来说也不好,因为可能存在重复的发票,并且如果函数将采用范围(A:A)来查找条件序列号,则会产生错误的结果。提前谢谢你,如果有一些方法可以改进我的问题(如果我得到一个正确的答案,并希望它更容易找到有相同问题的其他人),写一个建议。
答案 0 :(得分:2)
请试一试......
Sub GetTotal()
Dim rng As Range, cell As Range
Dim lr As Long
Dim Total As Double
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("A2:A" & lr)
For Each cell In rng
If cell = cell.Offset(1) Then
Total = Total + cell.Offset(0, 1)
Else
Total = Total + cell.Offset(0, 1)
cell.Offset(0, 2) = Total
Total = 0
End If
Next cell
Columns("C").NumberFormat = "$#,##0.00"
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)