我有一张这样的表:
Acct number Transaction
XXXXXX5030 11.33
XXXXXX5030 37.53
XXXXXX5030 101.30
XXXXXX1133 20.33
XXXXXX1133 21.21
我需要循环的代码,找到所有具有相同编号和所有交易的帐户。然后,它将创建一个新列,该事务的每一行都有总计。像这样:
Acct number Transaction Total
XXXXXX5030 11.33 150.16
XXXXXX5030 37.53 150.16
XXXXXX5030 101.30 150.16
XXXXXX1133 20.33 41.54
XXXXXX1133 21.21 41.54
我尝试过使用sumif,但它不起作用。它返回#VALUE!对于所有细胞。到目前为止我的代码:
Private Sub CommandButton1_Click()
Sheets("Create_CSV").Range("A8").Select '
' Set Do loop to stop when an empty cell is reached.
Do Until IsEmpty(ActiveCell)
Dim ActN As String
ActN = Right(ActiveCell.Value, 4)
Dim TotalAmm
TotalAmm = Application.SumIf(Range("B8:B1000"), Right(ActiveCell.Value, 4), "=ActN")
ActiveCell.Offset(0, 2).Value = TotalAmm
ActiveCell.Offset(1, 0).Select
Loop
End Sub
答案 0 :(得分:2)
您的VBA是不必要的过度杀伤力。只需使用SUMIF。
=SUMIF($A$2:$A$100, $A2, $B$2:$B$100)
答案 1 :(得分:0)
您可以在excel中使用SumIf公式来执行此操作。如果您的帐号在A列中,而在B列中的交易中,您可以将此公式放在C列中并向下拖动。
=SUMIFS($B$1:$B$10,$A$1:$A$10,A2)
我的例子只假设有10个范围
答案 2 :(得分:0)
我需要在vba中这样做,因为它是一个巨大的电子表格,正在做许多其他的事情......我希望能够立即运行它。你们都把我放在正确的道路上。对于vba,以下工作:
TotalAmm = Application.SumIf(Range("A8:A1000"), ActiveCell.Value, Range("B8:B1000"))
答案 3 :(得分:0)
您不需要逐行执行此操作:
Range("C8:C" & Range("A" & rows.count).end(xlup).row).formula = "Sumif(A$8:$A$1000,A8,B$8:B$1000)
Application.calculate
Range("C8:C" & Range("C" & Rows.Count).End(xlUp).row).copy
Range("C8:C" & Range("C" & Rows.Count).End(xlUp).row).pastespecial xlPasteValues
一次性将公式填充到C列(它会自动自动更新参考)
计算
复制单元格
粘贴为值
你会发现这比循环细胞更快。
此代码替换了以下所有内容:
Do Until IsEmpty(ActiveCell)
Dim ActN As String
ActN = Right(ActiveCell.Value, 4)
Dim TotalAmm
TotalAmm = Application.SumIf(Range("B8:B1000"), Right(ActiveCell.Value, 4), "=ActN")
ActiveCell.Offset(0, 2).Value = TotalAmm
ActiveCell.Offset(1, 0).Select
Loop
这适用于您发布的解决方案,我可能会指出这与原始帖子的不同之处在于您的原始帖子仅尝试在acc no的最后4个图表中求和,如果您需要此帖子,我们可以只为公式创建临时辅助列,执行公式,复制并粘贴为值,然后删除辅助列