在更改行值时,在另一列中执行一行sumif

时间:2016-07-03 00:34:53

标签: excel vba excel-vba

我希望你能帮我解决我的VBA问题。我想在A列下面使用一个循环。一旦检测到变化,我想在C列中插入一个SUMIF公式,如果将A列分组(右侧的总偏移量)。 A已经排序了。有点像小计,但没有使用小计行。

A B C
1 2
1 6
1 3 11 = SUMIF(A:A,A3,B:B)

2 7
2 8 15 = SUMIF(A:A,A5,B:B)

3 8
3 6 14 = SUMIF(A:A,A7,B:B)

(没有在1& 2和2& 3更改之间添加空行)我相信我是使用以下代码片段的方式的一部分,但我无法一起工作。

        Sub SUMIF_Upon_Change()
      Dim r As Long, mcol As String, i As Long


    ' find last used cell in Column A
      r = Cells(Rows.Count, "A").End(xlUp).Row

     ' get value of  last used cell in column A
      mcol = Cells(r, 1).Value

     ' insert rows by looping from bottom
      For i = r To 2 Step -1
         If Cells(i, 1).Value <> mcol Then
           Cells(n, 3).Formula = _
         "=SUMIF(A:A,RC[-1],B:B)"

    'AND / OR This added at the change row minus one row.

            'Places formula in each adjacent cell (in column "D").
            Range("C2:C" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=SUMIF(A:A,A3,BB)"
         End If
      Next i

End Sub

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

XLMatters,你几乎拥有它。您唯一的主要问题是您似乎混合了公式参考样式(“RC [-1]”和“A3”)。你必须挑选一个或另一个。以下是您的代码的一个工作示例,只需稍作修改:

Sub SUMIF_Upon_Change()
    Dim r As Long, mcol As String, i As Long
    ' find last used cell in Column A
    r = Cells(Rows.Count, "A").End(xlUp).Row
    ' get value of  last used cell in column A
    mcol = Cells(r, 1).Value
        For i = r To 2 Step -1
            If Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
                Cells(i, 3).Formula = "=SUMIF(A:A,A" & i & ",B:B)"
            End If
        Next i
End Sub

如果您的心脏设置为FormulaR1C1风格,请转到:

Sub SUMIF_Upon_ChangeRC()
    Dim r As Long, mcol As String, i As Long
    ' find last used cell in Column A
    r = Cells(Rows.Count, "A").End(xlUp).Row
    ' get value of  last used cell in column A
    mcol = Cells(r, 1).Value
        For i = r To 2 Step -1
            If Cells(i, 1).Value <> Cells(i + 1, 1).Value Then
                Cells(i, 3).FormulaR1C1 = "=SUMIF(C1,RC1,C2)"
            End If
        Next i
End Sub

如果您有任何其他问题,请询问。