大家好,我是星光,今天給大家分享是VBA常用小代碼系列的第五篇——一鍵匯總分表數(shù)據(jù)。
舉個(gè)栗子,如下圖,一個(gè)工作簿,有多個(gè)分表,現(xiàn)在需要將他們快速匯總到一個(gè)工作表中。
有些朋友可能會(huì)想到用透視表、合并計(jì)算等。但這里需要說(shuō)明的是,這里的多表匯總只是匯總明細(xì),不需要對(duì)明細(xì)進(jìn)行統(tǒng)計(jì)求和等運(yùn)算,此外,標(biāo)題行,也可能是雙行標(biāo)題,甚至含合并單元格的情況……嘻嘻~~
VBA代碼參考如下:
Sub collect()
'新浪微博@EXCELers,一鍵多表數(shù)據(jù)匯總
Dim sht As Worksheet, rng As Range, k&, trow&
Application.ScreenUpdating = False
'取消屏幕更新,加快代碼運(yùn)行速度
trow = Val(InputBox('請(qǐng)輸入標(biāo)題的行數(shù)', '提醒'))
If trow < 0="" then="" msgbox="" '標(biāo)題行數(shù)不能為負(fù)數(shù)。',="" 64,="" '警告':="" exit="">
'取得用戶輸入的標(biāo)題行數(shù),如果為負(fù)數(shù),退出程序
Cells.ClearContents
'清空當(dāng)前表數(shù)據(jù)
For Each sht In Worksheets
'循環(huán)讀取表格
If sht.Name <> ActiveSheet.Name Then
'如果表格名稱不等于當(dāng)前表名則進(jìn)行匯總動(dòng)作……
Set rng = sht.UsedRange
'定義rng為表格已用區(qū)域
k = k + 1
'累計(jì)K值
If k = 1 Then
'如果是首個(gè)表格,則K為1,則把標(biāo)題行一起復(fù)制到匯總表
rng.Copy
[a1].PasteSpecial Paste:=xlPasteValues
Else
'否則,扣除標(biāo)題行后再?gòu)?fù)制黏貼到總表,只黏貼數(shù)值
rng.Offset(trow).Copy
Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1).PasteSpecial Paste:=xlPasteValues
End If
End If
Next
[a1].Activate
'激活A(yù)1單元格
Application.ScreenUpdating = True
'恢復(fù)屏幕刷新
End Sub
操作過(guò)程及使用說(shuō)明見(jiàn)演示動(dòng)畫(huà):
小提示:
這個(gè)代碼是將分表的數(shù)據(jù)快速合并到當(dāng)前工作表,所以在使用時(shí),務(wù)必先選擇匯總表。
如果不會(huì)使用VBA代碼,可以參考這個(gè)帖子:黑技術(shù)~秒破工作表加密!里面有使用VBA代碼的圖文教程哈~。
最后照例貼送示例文件百度網(wǎng)盤(pán):百度網(wǎng)盤(pán) (網(wǎng)盤(pán)里還有很多驚喜~~)
此前及后續(xù)更多VBA常用小代碼,請(qǐng)關(guān)注:@EXCELers
聯(lián)系客服