許多朋友都有這樣的難題。就是一個(gè)EXCEL表,有N多頁,內(nèi)容都是連續(xù)的,但卻需要在每一頁上加一個(gè)小計(jì)。
一般情況下,需要手工在每一頁的下方加一行小計(jì),但這樣既浪費(fèi)時(shí)間,又不方便以后的工作。
從網(wǎng)上搜索到這段代碼,可以輕松的實(shí)現(xiàn)分頁小計(jì)。在此,也謝謝寫這段代碼的兄弟/姐妹,雖然不知是哪位大俠。
使用方面:打開EXCEL,打開VBA編輯器,把這段代碼復(fù)制進(jìn)去。然后在EXCEL上添加一個(gè)按鈕,指定宏即可。
代碼:
Dim rCurrentCell As Range ' 每一頁之分頁小計(jì)所在單元格
Dim r1stSubCell As Range ' 小計(jì)區(qū)域第一個(gè)單元格
Sub 刪除原有的分頁小計(jì)行()
Set r1stSubCell = Range("A5") ' 本例名單從 A5 單元格開始
For Each rCurrentCell In Range(r1stSubCell, r1stSubCell.End(xlDown))
If rCurrentCell = "小計(jì)" Then rCurrentCell.EntireRow.Delete
Next
End Sub
Sub 新建分頁小計(jì)()
Dim iSubCol As Integer, rSubArea As Range
Dim hb As HPageBreak
ActiveWindow.View = xlPageBreakPreview ' 進(jìn)入 分頁瀏覽 模式, 以便 EXCEL 正確計(jì)頁
Set r1stSubCell = Range("A5") ' 本例名單從 A5 單元格開始
iSubCol = 20 ' 本例小計(jì)項(xiàng)共有 20 列
' 避免可能的錯(cuò)誤:手工分頁符正好與自動(dòng)分頁符重合
' 建議運(yùn)行前先刪除手工分頁符
' 本過程可選
'For Each hb In ActiveSheet.HPageBreaks
' On Error Resume Next
' If hb.Type = xlPageBreakManual Then hb.Delete
'Next
' 最后一行插入手工分頁符
ActiveSheet.HPageBreaks.Add Before:=r1stSubCell.End(xlDown).Offset(1, 0)
' 測(cè)試每一個(gè)分頁符,
' 如果是自動(dòng)分頁符, 則在其上一行插入一小計(jì)行, 而本行納入下一頁
' 否則, 在本行插入一小計(jì)行
For Each hb In ActiveSheet.HPageBreaks
Set rCurrentCell = hb.Location
rCurrentCell.Select ' 看看先
If hb.Type = xlPageBreakAutomatic Then Set rCurrentCell = rCurrentCell.Offset(-1, 0)
rCurrentCell.EntireRow.Insert
Set rCurrentCell = rCurrentCell.Offset(-1, 0)
' 添加分頁小計(jì)內(nèi)容
With rCurrentCell
.Value = "小計(jì)"
.Font.Bold = True
Set rSubArea = .Offset(0, 1).Resize(1, iSubCol) ' 需要填充分頁小計(jì)公式的區(qū)域
' 使用 SUBTOTAL 公式的好處是方便擴(kuò)展, 且不會(huì)對(duì)已計(jì)算區(qū)域重復(fù)計(jì)算(如果可能發(fā)生這種情況的話)
rSubArea.Formula = "=SUBTOTAL(9," & r1stSubCell.Offset(0, 1).Address(1, 0) & ":" & .Offset(-1, 1).Address(1, 0) & ")"
Set r1stSubCell = .Offset(1, 0)
End With
Next
ActiveWindow.View = xlNormalView
End Sub