還記得年少時的夢嗎 象朵永遠(yuǎn)不凋零的花 陪我經(jīng)過那風(fēng)吹雨打 看世事無常 看滄桑變化……
都好啊……
今天和大家分享的是VBA常用小代碼系列的第5篇:一鍵匯總各分表數(shù)據(jù)到總表。
照例舉個栗子,如下圖,一個工作簿,包含多個工作表,現(xiàn)在需要將各個分表的數(shù)據(jù)匯總到總表中……
碰到這樣的問題,有些小伙伴會想到使用數(shù)據(jù)透視表或者合并計算等方式進(jìn)行操作。
但這兩種操作方式都有它的局限性。
比如說,它們是統(tǒng)計匯總數(shù)據(jù)而不是收集明細(xì)記錄;另外,當(dāng)標(biāo)題行或列是多行(多列),甚至存在合并單元格時,它們也就無能無力了。
等等……
代碼一兩行,工作不用愁斷腸。面對這樣的情況,VBA小代碼解決方案如下:
Sub CollecShtData()
'微信公眾號~VBA編程學(xué)習(xí)與實踐
Dim Sht As Worksheet, Rng As Range, k&, Trow&
Trow = Val(InputBox('請輸入標(biāo)題的行數(shù)', '提醒'))
If Trow < 0 Then MsgBox '標(biāo)題行數(shù)不能為負(fù)數(shù)。', 64, '警告': Exit Sub
'取得用戶輸入的標(biāo)題行數(shù),如果為負(fù)數(shù),退出程序
Application.ScreenUpdating = False
Cells.ClearContents '清空當(dāng)前表數(shù)據(jù)
Cells.NumberFormat = '@' '設(shè)置文本格式
For Each Sht In Worksheets '遍歷表格
If Sht.Name <> ActiveSheet.Name Then
'如果表格名稱不等于當(dāng)前表名則進(jìn)行復(fù)制數(shù)據(jù)……
Set Rng = Sht.UsedRange
k = k 1
If k = 1 Then
'如果是首個表格,則K為1,則把標(biāo)題行一起復(fù)制到匯總表
Rng.Copy
[a1].PasteSpecial Paste:=xlPasteValues
Else
'如K不等于1,扣除標(biāo)題行后再復(fù)制黏貼到總表,只黏貼數(shù)值
Rng.Offset(Trow).Copy
Cells(ActiveSheet.UsedRange.Rows.Count 1, 1).PasteSpecial Paste:=xlPasteValues
End If
End If
Next
[a1].Activate
Application.ScreenUpdating = True
MsgBox '一共匯總了' & k & '個表格。'
End Sub
操作過程,參考下面的動畫教程:
小提示:
該代碼是將分表的數(shù)據(jù)匯總明細(xì)到當(dāng)前工作表,因此在使用時務(wù)必先選擇匯總表哦!
點擊下方菜單【常用代碼】可以獲得更多常用小代碼系列文~
一碼不掃,
可以掃天下?
ExcelHome
VBA編程學(xué)習(xí)與實踐
聯(lián)系客服