作者:音子,微信公眾號:自在不思量,轉載請注明出處。
我最開始接觸VBA是17年,從錄制宏開始研究了一下如何用一個按鈕代替多個連續的操作步驟。最后,代碼寫的雖然不怎么完美,但也成功應用了幾個月,讓我節省了不少時間。
但這篇不是講怎么寫VBA代碼。
實際上,VBA早已經從我的學習名單中剔除了。可這並不妨礙我使用它~
所以,這篇先來說說如何使用VBA代碼來合並表格。
先看一下完整代碼吧。需要注意的是,下方這段代碼的用途是合並當前文件夾內所有工作簿的全部工作表:
1 Sub 合並當前目錄下所有工作簿的全部工作表() 2 3 Dim MyPath, MyName, AWbName 4 Dim Wb As workbook, WbN As String 5 Dim G As Long 6 Dim Num As Long 7 Dim BOX As String 8 9 Application.ScreenUpdating = False 10 MyPath = ActiveWorkbook.Path 11 MyName = Dir(MyPath & "\" & "*.xls") 12 AWbName = ActiveWorkbook.Name 13 Num = 0 14 15 Do While MyName <> "" 16 If MyName <> AWbName Then 17 Set Wb = Workbooks.Open(MyPath & "\" & MyName) 18 Num = Num + 1 19 With Workbooks(1).ActiveSheet 20 .Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4) 21 For G = 1 To Sheets.Count 22 Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1) 23 Next 24 WbN = WbN & Chr(13) & Wb.Name 25 Wb.Close False 26 End With 27 End If 28 MyName = Dir 29 Loop 30 Range("B1").Select 31 Application.ScreenUpdating = True 32 33 MsgBox "共合並了" & Num & "個工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示" 34 35 End Sub
這段代碼是一位前輩分享的,很好用,我用過了無數次,幫了很多忙,但我從沒仔細看過內容,因為前輩說,只要會用就行了。我很認同……
下面我舉個例子來說明一下這段代碼要如何使用。
假設你要收集所有班級的比賽項目報名信息,以班級為單位上交報名表。
每個班級的表格形式如下:
把所有班級的報名表放到同一個文件夾中:
新建一個工作表,並打開它:
鼠標右鍵點擊底部工作表名稱“sheet1”,在彈出的菜單中選擇【查看代碼】:
注:還有其他方式也能查看代碼,我認為這種方式最便捷,其它的懶得講了,感興趣的請自行百度吧。
彈出VBA代碼編輯窗口,默認狀態是這樣的:
將本文一開始展示的整段完整代碼復制過來,並單擊菜單欄中“▷”按鈕運行:
代碼運行完畢后,彈出如下提示窗口,表示已經合並成功:
合並后的表格內容如下所示:
可以看出來,這段代碼適合於待合並的各個表格中所有列的數據一致但不含有列名的情況。
像本文中舉例這種情況,合並后再簡單處理下就好了。首先,刪除第一行空白行,然后將所有含列名的行篩選出來一次性刪除:
完成~
優化這段VBA代碼的工作我大概率不會去做,也許以后會研究下怎么用python實現這個操作。
本文【合並同文件夾下表格】代碼分享地址
鏈接:
https://pan.baidu.com/s/1DwpfkevO6mZM-YneQfSMIA
提取碼:
mi1k
----------------- End -----------------