Sub try_this()
Dim wb As Workbook, ws As Worksheet
Dim x As Long, y as Long, lastrow As Long, lastcolumn As Long
Dim last_subtotal as long
Set wb = ActiveWorkbook
Set ws = wb.ActiveSheet
With ws
lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
For x = 2 To lastcolumn
last_subtotal = 1
For y = 2 To lastrow
If Right(.Cells(y, 1).Value, 5) = "Total" Then
.Cells(y, x).Formula2 = "=sum(" & .Cells(last_subtotal + 1, x).Address & ":" & .Cells(y - 1, x).Address & ")"
last_subtotal = y
End If
Next
Next
End With
End Sub
1条答案
按热度按时间rslzwgfq1#
你已经标记了vba,并且你已经要求vba来做这件事......所以这里有一个使用vba的解决方案。有些人(大多数!)可能会认为这是矫枉过正。
下面的代码在开始之前扫描工作表并寻找表的边缘。因此,除了这个表之外,A列和第1行需要为空--就像你的屏幕截图一样。
然后,它检查表中的每个单元格,如果最左边的单元格以单词“Total”结尾,它将创建一个公式,从最后一个小计向下求和到公式上方的单元格。
每次运行时,它都会覆盖之前的公式,因此可以用于“纠正”由于用户在错误的位置插入行等而变得不正确的公式。如果您希望完全过度删除,您什至可以使用一个事件来确保它们一直被重写。