小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Excel VBA 7.14跨工作薄合并工作表,按照工作表名稱分類

 Excel和VBA 2021-03-31

前景提要

通過昨天的分享,我們學(xué)習(xí)了如果通過VBA來實(shí)現(xiàn)將多個工作薄內(nèi)多個工作表進(jìn)行合并的操作,按照昨天的VBA代碼進(jìn)行操作,我們能夠成功的將所有的工作表數(shù)據(jù)匯總在一個工作表中,不過有時候我們可能并不需要將所有的工作表匯總在一個表中,我們需要將多個工作薄中所有的工作表按照既定的工作表名稱匯總,相同的工作表名稱的內(nèi)容匯總在同一個工作表中,那么這樣的需要要如何實(shí)現(xiàn)呢?

場景模擬

假設(shè)我們現(xiàn)在將A\B\C三個班次的所有學(xué)習(xí)全部進(jìn)行分組,每組10個人,按照這樣的方式來分考場進(jìn)行考試,方便在考試的過程中,更好的監(jiān)控學(xué)生的實(shí)操過程,那么最終得到的數(shù)據(jù)表也是按照考場分布的學(xué)生成績

這次我們想要得到每個班成績的所有學(xué)生的成績,以班級為單位進(jìn)行匯總,分析,如果按照上節(jié)的方法就有點(diǎn)不合理了,所有的數(shù)據(jù)都匯總在一個表,在進(jìn)行分析,明顯數(shù)據(jù)暫時效果并不好,那么我們?nèi)绾伟凑瞻嗉墎磉M(jìn)行區(qū)分呢?

代碼區(qū)

其實(shí)按照班次區(qū)分,說白了就是按照工作表的名稱來進(jìn)行區(qū)分,我們可以遍歷當(dāng)前文件夾所有的工作薄,然后遍歷所有的工作表,將最新的數(shù)據(jù)匯總到指定的班級名稱的工作表中就可以了。 來看看代碼

Sub sdd()Dim tbook As Workbook, book As Workbook, sth As Worksheet, new_sth As WorksheetSet tbook = ThisWorkbookApplication.ScreenUpdating = FalseWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要匯總的工作薄所在文件夾" If .Show = -1 Then Filename = .SelectedItems(1) End IfEnd Withk = 0j = 0f = Dir(Filename & "\")Do While f <> "" And f <> tbook.Name k = k + 1 Workbooks.Open Filename & "\" & f Set book = ActiveWorkbook If k = 1 Then For i = 1 To book.Worksheets.Count tbook.Worksheets.Add Next i End If For Each sth In book.Worksheets j = j + 1 If k = 1 Then tbook.Worksheets(j).Name = sth.Name sth.UsedRange.Copy tbook.Worksheets(sth.Name).Cells(1, 1) Else l = tbook.Worksheets(j).UsedRange.Rows.Count sth.UsedRange.Offset(1, 0).Copy tbook.Worksheets(sth.Name).Cells(l + 1, 1) End If Next sth j = 0f = Dir()ActiveWorkbook.Close FalseLoopApplication.ScreenUpdating = TrueEnd Sub

看看代碼最終的效果

已A班為例,從上圖中可以看出,我們已經(jīng)將所有的A班學(xué)生的數(shù)據(jù)都匯總在新工作薄的A班的這個工作表中

并且只有A班學(xué)生的數(shù)據(jù),沒有其他班級學(xué)生的數(shù)據(jù),我們在A班的這個工作表中的所有操作結(jié)果,都是針對A班這個集體的,而不會去牽涉其他班,非常完美的達(dá)到了我們的要求。

代碼分析

With Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要匯總的工作薄所在文件夾" If .Show = -1 Then Filename = .SelectedItems(1) End IfEnd Withk = 0j = 0f = Dir(Filename & "\")Do While f <> "" ***********f = Dir()Loop

這一段都是老熟人了,主要是用來方便我們選擇要匯總的工作薄所在文件夾,然后進(jìn)行遍歷循環(huán)文件夾內(nèi)的所有工作薄的

Workbooks.Open Filename & "\" & f

打開工作薄的代碼,也很熟悉了。

If k = 1 Then For i = 1 To book.Worksheets.Count tbook.Worksheets.Add Next i End If

這段代碼的意思是, 如果我們是第一次打開第一個工作薄,我們需要根據(jù)第一個工作薄的工作表總數(shù)來創(chuàng)建相同數(shù)量的工作表,比方說案例中有三個工作表,我們就一次性的創(chuàng)建3個心的工作表

For Each sth In book.Worksheets j = j + 1 If k = 1 Then tbook.Worksheets(j).Name = sth.Name sth.UsedRange.Copy tbook.Worksheets(sth.Name).Cells(1, 1) Else l = tbook.Worksheets(j).Cells(Rows.Count, 1).End(xlUp).Row sth.UsedRange.Offset(1, 0).Copy tbook.Worksheets(sth.Name).Cells(l + 1, 1) End If Next sth

此段代碼就是核心代碼了,主要遍歷循環(huán)所有的工作表的,除去k=k+1這個老熟人之外,這里有多了一個J=J+1,我這里來解釋下

我的習(xí)慣是通過變量的方式來代表當(dāng)前當(dāng)前是第幾次操作,最開始j=0

當(dāng)我們操作第一個表的時候,j=1

說明當(dāng)前正在操作第一個表,我們在tbook這個工作薄創(chuàng)建了3個工作表,那么我們正在操作的第一個表就讓他對應(yīng)當(dāng)前活動工作表的第一個表就可以了。

說的有點(diǎn)含糊,看下截圖就知道了

然后我們就開始重命名,將第一個表重命名成當(dāng)前的這個工作表,第一個工作表如何表示呢?

Worksheets(1)

放到案例中就是

tbook.Worksheets(j).Name = sth.Name

這樣就成功將第一個工作表變成了對應(yīng)的工作表的名稱了,后面的幾個都是類似的操作,需要記住一點(diǎn),沒循環(huán)完一個工作薄之后,要將J重新等于0 ,為什么呢?

我們看下如果不等于0,會有什么結(jié)果

熟悉的下標(biāo)越界,我們來看看這個時候的j是多少,

j=4,但是我們總共只有3個工作表,沒有第4個工作表,所以才會提示下標(biāo)越界,所以在每完成一次工作薄的遍歷之后,記得加上j=0

Next sthj = 0

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多