舉個栗子,如下圖,一個工作簿,包含多個工作表,現(xiàn)在需要將各個分表的數(shù)據(jù)匯總到總表中。
碰到這樣的問題,有些小伙伴會想到使用數(shù)據(jù)透視表或者合并計算等方式進行操作。
但這兩種操作方式都有它的局限性。
比如說,它們是統(tǒng)計匯總數(shù)據(jù)而不是匯總明細記錄;另外,當標題行或列是多行(多列),甚至存在合并單元格時,它們也就無能無力了,等等。
代碼一兩行,工作不用愁斷腸。面對這樣的情況,VBA小代碼解決方案如下:
代碼如下:
Sub CollectData()
Dim Sht As Worksheet, Rng As Range, k&, n&
Application.ScreenUpdating = False
'取消屏幕更新,加快代碼運行速度
n = Val(InputBox('請輸入標題的行數(shù)', '提醒', 1))
If n < 0 Then MsgBox '標題行數(shù)不能為負數(shù)。', 64, '提示': Exit Sub
'取得用戶輸入的標題行數(shù),如果為負數(shù),退出程序
Cells.ClearContents
'清空當前表數(shù)據(jù)
For Each Sht In Worksheets
'遍歷工作表
If Sht.Name <> ActiveSheet.Name Then
'如果工作表名稱不等于當前表名則進行匯總動作……
Set Rng = Sht.UsedRange
'定義rng為表格已用區(qū)域
k = k + 1
'累計K值
If k = 1 Then
'如果是首個表格,則K為1,把標題行一起復制到匯總表
Rng.Copy
[b1].PasteSpecial Paste:=xlPasteValues
[a1] = '工作表名稱'
[a1].Offset(n).Resize(Rng.Rows.Count - n, 1) = Sht.Name
Else
'否則,扣除標題行后再復制粘貼到總表,只粘貼數(shù)值
Rng.Offset(n).Copy
With Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1)
.Resize(Rng.Rows.Count - n, 1) = Sht.Name
.Offset(0, 1).PasteSpecial Paste:=xlPasteValues
End With
End If
End If
Next
[a1].Activate
Application.ScreenUpdating = True '恢復屏幕刷新
MsgBox '匯總OK'
End Sub
具體操作過程,請參考下面的動畫演示:
小提示:
該代碼是將分表的數(shù)據(jù)匯總明細到當前工作表,因此在使用時務必先選擇匯總表哦!
圖文制作:看見星光
聯(lián)系客服