- Excel 百科電子報
- Posts
- 【VBA 實作】點一下就完成分組 🚀 Excel 自動拆分表格神器
【VBA 實作】點一下就完成分組 🚀 Excel 自動拆分表格神器
我只要點一下,
原本「總表」裡 A、B、C、D、E 不同組別的資料,
就會自己拆成五張分開的工作表!

是不是超讚!
再也不用一組一組篩選、複製、貼上,
VBA 幫我全部自動搞定。
(VBA 是 Excel 裡的程式語言,可以讓 Excel 自動處理重複的工作)
今天這封電子報,
我會帶你從最基礎開始寫,
一步一步邊打程式邊講解。
(練習檔案在文章最後 🔽)
準備好了嗎?
我們開始吧 🚀
步驟一:先想流程(比打程式還重要!)
寫 VBA,第一步不是打程式,而是要先「想清楚整個流程」。
這真的超關鍵。
因為流程想對了,後面打程式就像照著地圖走,
不會迷路、也不容易卡關。
你可以先想想:
如果今天是「手動操作」,你會怎麼做?
以我們剛才的「組別拆分」來說,
手動的步驟大概會是這樣:
1️⃣ 新增一張「組別 A」的工作表
2️⃣ 到總表篩選出「組別 A」的資料(組別欄在 C 欄)
3️⃣ 把篩選後的資料(包含標題)貼到「組別 A」的 B2 儲存格
4️⃣ 清除篩選
5️⃣ 換下一個組別,重複一樣的步驟
就是這麼簡單。
當你把流程想清楚、甚至用紙筆畫下來,
寫程式就會變得超順,因為你已經知道要怎麼走了。
等流程確認好,
我們就可以正式開始寫程式啦 🚀
步驟二:開啟 VBA 編輯器(我們寫 VBA 程式碼的地方)
接下來,來打開 VBA 編輯器。
在鍵盤上按下 Alt + (fn) + F11 (Mac 使用者是 Option + fn + F11),
畫面會跳出一個新視窗,那就是我們要寫 VBA 程式的地方。
直接到上方「插入」標籤頁→ 「模組」

同時右邊也會跳出一個新的視窗,等一下我們會在這裡寫程式。
這樣就準備好了!
步驟三:開始打程式
先小小提醒一下:
我們這次示範的程式是初學者版本。
重點不是要你寫出最有效率的程式,
而是先學會「整個流程怎麼跑」。
只要概念懂了,之後要改成更進階的版本很簡單。
好,我們來動手打第一段:
Sub 拆分組別()
End Sub 這段的意思是:
我們要建立一個新的「巨集」,名字叫 拆分組別。
所有的程式內容,都會寫在這兩行之間。
開始拆分組別 ✨
先來新增一張「A 組」的工作表:
Sheets.Add.Name = "A"這行程式的意思是:
Sheets.Add → 新增一張工作表
.Name = "A" → 把新工作表命名成「A」
💡 小提醒:
在 Excel 裡遇到文字,都要記得用英文雙引號刮起來喔("A" 而不是「A」)。
接下來,我們要篩選出組別 A 的資料(組別欄在 C 欄):
Sheets("總表").Range("B2:D200").AutoFilter Field:=2, Criteria1:=”A”這行的意思是:
Sheets("總表").Range("B2:D200") → 指的是總表的 B2 到 D200 範圍
.AutoFilter → 開啟篩選
Field:=2 → 篩選範圍裡的第 2 欄(也就是 C 欄,組別欄)
Criteria1:="A" → 篩選條件是「A 組」
篩選完之後,我們要把資料複製到新的 A 工作表:
Sheets("總表").Range("B2:D200").SpecialCells(xlCellTypeVisible).Copy Sheets(“A”).Range("B2")這行的意思是:
.SpecialCells(xlCellTypeVisible):只複製篩選後「可見的資料」
.Copy Sheets("A").Range("B2"):貼到 A 工作表的 B2
也就是說,我們把「篩選後的資料(包含標題)」一次複製貼上。
範圍裡有員工(B 欄)、組別(C 欄)、其他資料(D 欄)。
接著,把篩選清掉,準備下一輪:
Sheets("總表").AutoFilterMode = False這行的意思很單純:
清除總表的篩選模式,讓畫面回到原狀。
那…要怎麼處理 B 到 E 組呢?
最直覺的想法是把剛才的程式碼複製貼上四次,
然後把 A 改成 B、C、D、E。
不過這樣超容易出錯 😅
只要少打一個引號,整個程式就會壞掉。
讓 VBA 幫你自動重複:For Each 迴圈 💡
我們想讓 Excel 自動「重複做一樣的事」,
例如幫每個部門建立一張新的工作表。
這時候就可以用 For Each 迴圈!
先看這段小範例:
Dim 部門
For Each 部門 In Array("A","B","C","D","E")
Sheets.Add.Name = 部門
Next 這段程式會幫你自動建立五張工作表,
名字分別是 A、B、C、D、E。
Dim 部門 → 建立一個小盒子,名字叫「部門」,用來暫時存放「目前在處理哪一個部門」
Array("A", "B", "C", "D", "E")→ 這是一份清單,裡面放了所有要處理的部門名稱
當 VBA 開始跑這段程式時,它會:
1️⃣ 先拿出清單裡的第一個值 "A",放進「部門」這個盒子
→ 也就是會執行:Sheets.Add.Name = "A"(建立工作表 A)
2️⃣ 接著看到 Next,意思是「換下一個!」
→ 清單換成 "B",再執行 Sheets.Add.Name = “B"(建立工作表 B)
3️⃣ 依序重複,直到跑完清單裡全部的值:A → B → C → D → E
這樣一來,不需要重複寫五次一樣的程式碼,
只要用 For Each,
VBA 就會自己幫你「一個接一個」執行完成 🎯
知道這個概念之後,
我們就能把前面教的「篩選+複製+清除篩選」流程放進迴圈裡:
Sub 拆分組別()
Dim 部門
For Each 部門 In Array("A","B","C","D","E")
Sheets.Add.Name = 部門
Sheets("總表").Range("B2:D200").AutoFilter Field:=2, Criteria1:=部門
Sheets("總表").Range("B2:D200").SpecialCells(xlCellTypeVisible).Copy Sheets(部門).Range("B2")
Sheets("總表").AutoFilterMode = False
Next
End Sub 這樣程式第一次執行的時候,
會先把 "A" 放進所有「部門」的小盒子裡。
接著每跑一次,
就會分別依序把 "B"、"C"、"D"、"E" 放進盒子裡,
讓 VBA 幫我們一個一個處理。
這樣一來,不需要重複寫五次一樣的程式碼,
就能一次完成五個組別的動作! 🎯
步驟四:執行! 🚀
按下上方的綠色 ▶️ 執行巨集,
Excel 就會自動新增 5 張工作表:A、B、C、D、E。
每張表都只包含對應部門的資料。
再也不用一個一個篩選、貼上,超輕鬆!
🎯 總結一下流程:
篩選每個組別 → 複製 → 貼到新表 → 清除 → 換下一個組別。
全部跑完後,就會得到好多張乾淨的工作表,
每個部門一張,整整齊齊!
我們有收到很多讀者的回饋~希望能有練習檔同步操作!
這次就幫你準備好了!
👉 [下載練習檔案] (記得打開後到左上角檔案 > 下載成 Excel 檔案 )
以上就是今天的 VBA 小教學!
好句分享
「要更聰明地工作,而不是更辛苦地工作。」- 艾倫・F・摩根斯坦
“Work smarter, not harder” - Allen F. Morgenstern
祝你有個美好的一週!
Excel 百科
你覺得今天的電子報怎麼樣? |
如果你覺得我們的電子報很讚,可以分享連結邀請你的朋友,一起學習!