Excel vba:帐号的总和值,并在该帐户的所有行中输入总计

时间:2015-06-25 20:36:24

标签: excel-vba vba excel

我有一张这样的表:

   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

4 个答案:

答案 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个图表中求和,如果您需要此帖子,我们可以只为公式创建临时辅助列,执行公式,复制并粘贴为值,然后删除辅助列