【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 百科

你覺得今天的電子報怎麼樣?

Login or Subscribe to participate in polls.