在行值更改后,在另一列中返回一行
Posted
技术标签:
【中文标题】在行值更改后,在另一列中返回一行【英文标题】:Upon change in row value, Do a sumif one row back in another column 【发布时间】:2016-07-03 00:34:52 【问题描述】:我希望你能帮助我解决我的 VBA 问题。我想使用沿着 A 列向下的循环。一旦检测到更改,我想在 C 列中插入一个 SUMIF 公式,如果将 A 列分组(向右的总偏移量)分组到 B 列的总数。 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】: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
如果您还有其他问题,请尽管问。
【讨论】:
谢谢,它工作得很好!我知道我很接近,但就像你说的那样,我正在混合公式参考......祝周末愉快!以上是关于在行值更改后,在另一列中返回一行的主要内容,如果未能解决你的问题,请参考以下文章
Excel:如果在另一列中发现重复的单元格值,则突出显示绿色