我希望你能帮我解决我的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
非常感谢任何帮助。
答案 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
如果您有任何其他问题,请询问。