VBA循环和变量-查找空行并将行号放入变量中
我正在编写一个宏,它循环遍历Excel数据,该数据按列a排序,如果coulmn的值与上面的值不同,则插入一个空行。这将我的数据按A列分组 然后,我想对分离组的d列的值求和。我的大部分代码都在下面工作,但是我遇到的问题是startCell变量。我知道我想做什么,但逻辑不正确,请有人帮我总结一下这些群体 非常感谢VBA循环和变量-查找空行并将行号放入变量中,vba,excel,Vba,Excel,我正在编写一个宏,它循环遍历Excel数据,该数据按列a排序,如果coulmn的值与上面的值不同,则插入一个空行。这将我的数据按A列分组 然后,我想对分离组的d列的值求和。我的大部分代码都在下面工作,但是我遇到的问题是startCell变量。我知道我想做什么,但逻辑不正确,请有人帮我总结一下这些群体 非常感谢 Sub PutARowInWithFormula() Range("A3").Select Dim startCell As Integer Dim endCell As I
Sub PutARowInWithFormula()
Range("A3").Select
Dim startCell As Integer
Dim endCell As Integer
startCell = 3
endCell = 0
Do Until ActiveCell.Value = ""
If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
ActiveCell.Offset(1, 0).Select
Else
' I need the bottom code to execute only once in the loop
' startCell = ActiveCell.Row
ActiveCell.EntireRow.Insert
' move to column d
ActiveCell.Offset(0, 3).Select
endCell = ActiveCell.Row - 1
ActiveCell.Formula = "=Sum(d" & startCell & ":d" & endCell & ")"
' move back to column a
ActiveCell.Offset(0, -3).Select
'move 2 rows down
ActiveCell.Offset(3, 0).Select
End If
Loop
End Sub
我太想知道,为什么不使用数据透视表,或者只使用工作表函数创建数据透视表,这也是可能的。我也不喜欢这种选择,但这是你的方式,我尊重这一点。这似乎是一个很好的例子,当它可能是一个好主意,使用它们的情况。因为现在,我能想到的任何其他方法,在VBA中实现这一点,似乎都更复杂 下面是您的代码的修复:
Sub PutARowInWithFormula()
Range("A2").Select
Do Until ActiveCell.Value = ""
If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.EntireRow.Insert
'you can use the offset directly
'by using an improved formula, you do not need to know start and end row.
ActiveCell.Offset(0, 3).Formula = _
"=SUMIF(A:A,OFFSET(INDIRECT(""A""&ROW()),-1,0),D:D)"
' move back to column a and move 2 rows down
ActiveCell.Offset(2, 0).Select
End If
Loop
End Sub
编辑
好的,找到了一种更简单的方法来做几乎相同的事情:
Public Sub demo()
UsedRange.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=4
End Sub
此功能也可通过功能区菜单->数据->求和使用
为了避免出现错误消息,您只需要为数据设置一个标题行,如:
日期|名称|计数器|值您能否在问题下方复制一些样本数据(通过更新,而不是通过注释)?我指的是一个屏幕,显示您需要排序/分组的内容以及您期望的答案。为什么不使用一个数据透视表,它可以按天汇总您的总数?