午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Excel VBA工作表 7.8 單個工作薄所有工作表數(shù)據(jù)合并 數(shù)據(jù)規(guī)則100+都不怕

 Excel和VBA 2021-03-31

前景提要

通過之前的幾節(jié)的分享,小伙伴們應(yīng)該能夠熟練的掌握工作表的新建和重命名等一些簡單的操作了,既然已經(jīng)有了一些基本的基礎(chǔ)之后,我們現(xiàn)在開始增加難度,學(xué)習(xí)一些更加實用性的操作吧,今天我們來分享下批量合并單個工作薄下所有工作表的數(shù)據(jù)

工作???工作表?有什么不同,還比較懵的小伙伴們建議看看這一系列的第一節(jié)分享,這里就不再重復(fù)說明了,批量合并工作表在大家的日常工作中是非常常見的,因為很小伙伴在我一開始說工作表的時候,就說到這個問題了,接下來我們進入實際的場景模擬,綜合實例來學(xué)習(xí)下批量工作表的合并操作

場景模擬

還是用我們之前的例子吧,假設(shè)當(dāng)前工作薄內(nèi)有3個班次的所有學(xué)生的VBA和python的考試成績

現(xiàn)在我們想要知道本年級所有的學(xué)生的考試成功,就需要將這幾個表匯總在一起,不然的話,沒有辦法針對整體進行分析

一個個的復(fù)制粘貼明顯很明顯,并不是我們想要的效果,雖然眼下只有3個工作表,但是如果有10+,20+呢?

我們還是學(xué)習(xí)系VBA的做法,這樣能夠更好的提升工作效率

代碼區(qū)

首先我們來查看下數(shù)據(jù),每個報表的數(shù)據(jù)結(jié)構(gòu)都是相同的, 這是一個標準結(jié)構(gòu)的數(shù)據(jù),那就非常簡單了,上代碼

Sub testadd()Dim sth As Worksheet, new_sth As WorksheetWorksheets.Add after:=Worksheets(Worksheets.Count)ActiveSheet.Name = "匯總表"Set new_sth = ActiveSheetk = 0For Each sth In Worksheets If sth.Name <> "匯總表" Then If Not sth.UsedRange Is Nothing Then k = k + 1 If k = 1 Then sth.UsedRange.Copy new_sth.Cells(1, 1) Else l = new_sth.Cells(Rows.Count, 1).End(xlUp).Row sth.UsedRange.Offset(1, 0).Copy new_sth.Cells(l + 1, 1) End If End If End IfNext sthEnd Sub

來看看代碼執(zhí)行的效果

程序新建了一個工作表,命名為匯總表,將所有匯總的數(shù)據(jù)都合并在這個工作表中,方便區(qū)分

并且匯總表中也是涵蓋了所以的數(shù)據(jù),一個都沒有少。每個表的10個數(shù)據(jù)都匯總過來了,沒有損失數(shù)據(jù)。

代碼分析

首先我們?yōu)榱朔奖氵M行區(qū)分,新建一個工作表,將所有的數(shù)據(jù)都匯總在這個新建的工作表中,工作表的新建和重命名,之前已經(jīng)分享過了,想必大家都非常的熟悉了。 

Worksheets.Add after:=Worksheets(Worksheets.Count)ActiveSheet.Name = "匯總表"

大家會留意到這里有一點不同,Worksheets.Count這個代碼的意思是代表當(dāng)前所有的工作表的總和,比方說現(xiàn)在有4個工作表, 一個新建+原來的3個班班級的工作表

后面的代碼就非常的簡單了

For Each sth In Worksheets If sth.Name <> "匯總表" Then If Not sth.UsedRange Is Nothing Then k = k + 1 If k = 1 Then sth.UsedRange.Copy new_sth.Cells(1, 1) Else l = new_sth.Cells(Rows.Count, 1).End(xlUp).Row sth.UsedRange.Offset(1, 0).Copy new_sth.Cells(l + 1, 1) End If End If End IfNext sth

這一段代碼就是循環(huán)遍歷所有的工作表,只要工作表的名稱不等于我們的匯總表,那么就執(zhí)行匯總

這里講一個新的知識點sth.UsedRange,代表的就是當(dāng)前工作表的所有被使用區(qū)域,沒有被使用的區(qū)域不算在內(nèi)的,這樣就可以將所有的有數(shù)據(jù)的區(qū)域全部匯總起來,不需要再通過Cells(Rows.Count, 1).End(xlUp).Row來進行判斷最后一個非空單元格了,我們來具體看看sth.UsedRange的效果

我們這里執(zhí)行sth.UsedRange.select方便大家識別下

一句話就可以將所有的有數(shù)據(jù)的單元格區(qū)域選中, 周圍的沒有數(shù)據(jù)的區(qū)域都不會被選中

好吧,這個是標準數(shù)據(jù),如果不標準數(shù)據(jù)呢?

來看看

就算是數(shù)據(jù)不標準,也可以

之前有小伙伴不太清楚我這里為什么使用一個k=k+1,我這里解釋下

因為第一次復(fù)制的話,我們需要將標頭復(fù)制上去

而后面就不需要復(fù)制標頭了。

后面我們選擇單元格下移一行,就是跳過標頭,只復(fù)制數(shù)據(jù)區(qū)域

sth.UsedRange.Offset(1, 0).Copy new_sth.Cells(l + 1, 1)

其他的步驟就和之前我們合并工作薄是差不多的

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多