2017-11-11 61 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

相關問題