Sub 第一步插入空行()
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = lastRow To 3 Step -1
If ws.Cells(i, 1).Value <> ws.Cells(i - 1, 1).Value Then
ws.Rows(i).Insert
End If
Next i
End Sub
Sub 第二步求和()
Dim arr
Set ws = ActiveSheet
' 获取L列最后一个非空行的行号
最后行 = ws.Cells(ws.Rows.Count, "L").End(xlUp).Row
' 从第2行开始处理
i = 2
' 当行号小于等于最后一行时循环
Do While i <= 最后行
' 初始化数组和计数器
ReDim arr(1 To 1)
' 收集连续非空单元格的值
Do While ws.Range("L" & i).Value <> "" And i <= 最后行
k = k + 1
' 调整数组大小以容纳新元素
ReDim Preserve arr(1 To k)
' 将当前单元格值存入数组(只处理数值)
If IsNumeric(ws.Range("L" & i).Value) Then
arr(k) = ws.Range("L" & i).Value
Else
arr(k) = 0 ' 非数值按0处理
End If
i = i + 1
Loop
' 如果收集到了数据,则计算总和并写入下一个空白单元格
If k > 0 Then
' 计算数组中所有元素的总和
For j = LBound(arr) To UBound(arr)
总和 = 总和 + arr(j)
Next j
' 将结果写入当前空白单元格(L列i行)
ws.Range("L" & i).Value = 总和
总和= 0 '对变量“总和”清零
End If
' 移动到下一行继续处理
i = i + 1
Loop
MsgBox "求和完成!", vbInformation
End Sub