2017-11-11 141 views
-2

基本解释。我正在一个电子表格中收集所有多个发票数据。可以说我有只有两个单独的每个不同的发票列:VBA-条件Sum列B到列A中值的变化

Serial ID. Value 

ABC001  $5.00 
ABC001  $5.00 
ABC001  $5.00 
CBA100  $6.00 
CBA100  $4.00 
CBA100  $5.00 

我想VBA的解决方案,将遍历列,在columnB和值,直到有在columnA的变化,然后会把那笔在列A中的变化之前的列C最后一行中的值。该outpoot应该是这样的:

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 ADRESS总和在EXACT行数最接近其中所述变化发生(在此之前),它会像这样运行:

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 

我相信,我做我的问题清楚。但为了以防万一,串行标识将始终保留在同一列中,所以值。不会执行排序。如果整个范围的总和对我来说也不好,因为可能有重复的发票,并且如果函数使用范围(A:A)查找条件序列号,则会产生错误结果。提前感谢您,如果有一些方法可以改善我的问题(如果我得到正确的答案并希望能够更容易地找到具有相同问题的其他人),请提出建议。

回答

0

请试试这个...

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 
+0

谢谢你,先生,给了一次进入这个解决方案。这工作正如预期的那样。 –

+0

@DominykasCyras不客气!请花一点时间接受答案,将您的问题标记为已解决。 :) – sktneer

0

你可以试试下面的公式。

=IF(A2<>A1,SUMIF(A:A,A2,B:B),"") 

把公式C2单元格如截图所示。

Screenshot

+0

然后将单元格格式化为'货币'以显示美元符号($) – harun24hr

相关问题