你有沒有遇過這樣的情況:每天早上要把昨天的資料複製貼上、格式調整、存檔,每次都要花10分鐘,做完還是一樣無聊?Excel VBA 就是用來解決這種重複動作的工具。
VBA(Visual Basic for Applications)是內建在 Excel 裡的程式語言,不需要另外安裝,學會之後可以讓 Excel 自動執行幾乎任何操作。
這篇從最基本的概念開始,包含如何開啟 VBA 編輯器、錄製第一個巨集、了解 Sub 的結構,以及變數的使用方式。全程附實際可執行的範例代碼,照著做就能跑起來。
內容目錄
📌 什麼是 VBA?跟巨集有什麼關係?
很多人對「VBA」和「巨集」這兩個詞感到混淆,其實關係很簡單:
- 巨集(Macro):錄製下來的一連串操作步驟,可以重複播放
- VBA:用來撰寫和控制巨集的程式語言
簡單說,巨集是結果,VBA 是寫巨集的工具。你可以用錄製的方式產生巨集,也可以直接用 VBA 手動撰寫,後者更靈活、能做更複雜的邏輯判斷。
📌 開啟 VBA 編輯器
有兩種方式可以開啟 VBA 編輯器(VBE):
- 快捷鍵:按 Alt + F11(最快)
- 選單:開發人員 → Visual Basic(如果沒有看到開發人員選項,需先在「檔案 → 選項 → 自訂功能區」中啟用)
開啟後你會看到一個獨立視窗,左側是專案總管(顯示目前開啟的 Excel 檔案和工作表),右側是代碼編輯區,新建的檔案在工作表1點滑鼠點擊會出現空白頁面,所有 VBA 程式都在這裡撰寫。

📌 第一步:用錄製巨集了解 VBA 結構
完全沒有程式基礎的話,最好的入門方式是先錄製一個巨集,看看 Excel 自動產生的 VBA 代碼長什麼樣子。
錄製步驟
- 在 Excel 點選「開發人員 → 錄製巨集」
- 幫巨集命名(例如:Test1),按確定
- 在 A1 儲存格輸入「Hello」,按 Enter
- 點選「停止錄製」
- 按 Alt + F11 開啟 VBA 編輯器,在左側找到 Module1,雙擊開啟
你會看到 Excel 自動產生了類似這樣的代碼:

Sub Test1()
'
' Test1 巨集
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "Hello"
Range("A2").Select
End Sub
這就是一個最基本的 VBA 程序(Sub)。錄製功能幫你把操作翻譯成代碼,雖然產生的代碼不夠簡潔,但用來理解結構非常有用。
📌 Sub 的基本結構
所有 VBA 程序都以 Sub 開頭、End Sub 結尾,中間是要執行的代碼:
Sub 程序名稱()
‘ 這裡是注解,不會被執行
‘ 在這裡寫你的代碼
End Sub
幾個重要規則:
- 程序名稱不能有空格,可以用底線代替(例如:My_Macro)
- 單引號(’)開頭的是注解,執行時會被忽略,用來說明代碼用途
- 縮排不是必須,但建議養成習慣,代碼更容易閱讀
📌 常用操作:讀取和寫入儲存格
VBA 最常見的操作就是讀取和寫入儲存格的值,有兩種常用寫法:
寫入儲存格
Sub WriteCell()
' 方法一:用 Range 指定儲存格
Range("A1").Value = "Hello World"
' 方法二:用 Cells 指定列號和欄號(Cells(列, 欄))
Cells(2, 1).Value = "第二列第一欄"
End Sub
Range 和 Cells 的差別:Range 用欄名列號(如 “A1″),直觀易讀;Cells 用數字(如 Cells(1,1)),適合在迴圈中動態指定位置。
讀取儲存格
Sub ReadCell()
Dim myValue As String
myValue = Range("A1").Value
MsgBox "A1 的值是:" & myValue
End Sub
MsgBox 是 VBA 的彈出視窗函數,常用來測試代碼是否正確執行,正式使用時通常會拿掉。
📌 變數:暫時存放資料的容器
變數就像一個有名字的箱子,用來暫時存放資料。VBA 用 Dim 來宣告變數:
Sub VariableExample()
Dim myName As String ' 文字變數
Dim myAge As Integer ' 整數變數
Dim myScore As Double ' 小數變數
Dim isPass As Boolean ' 是/否變數
myName = "Charlie"
myAge = 30
myScore = 92.5
isPass = True
MsgBox myName & " 的分數是 " & myScore
End Sub
常用的資料類型:
- String:文字,例如姓名、地址
- Integer:整數,例如數量、編號(範圍 -32768 到 32767)
- Long:大整數,需要超過 Integer 範圍時使用
- Double:小數,例如金額、比率
- Boolean:True 或 False,用於條件判斷
📌 實用範例:自動填寫10列資料
把前面學到的概念結合起來,寫一個實際可用的小程式:在 A 欄自動填入第1到第10的編號,B 欄填入對應的文字。
Sub FillData()
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = i ' A 欄填入編號
Cells(i, 2).Value = "項目" & i ' B 欄填入文字
Next i
MsgBox "完成!已填入10列資料。"
End Sub
這段代碼用到了 For…Next 迴圈,是 VBA 中最常用的結構之一:
- For i = 1 To 10:讓 i 從 1 數到 10,每次加 1
- Cells(i, 1):第 i 列、第 1 欄,隨著 i 增加自動往下移
- Next i:回到 For 繼續執行,直到 i 超過 10 為止
📌 常見問題
Q:VBA 代碼要存在哪裡?
存在 Excel 檔案裡面的模組(Module)。注意:如果存成一般的 .xlsx 格式,關閉檔案時 VBA 代碼會被刪除。要保留 VBA 代碼,必須存成 .xlsm(啟用巨集的 Excel 活頁簿)格式。
Q:怎麼執行寫好的 Sub?
有幾種方式:
- 在 VBE 編輯器中,把游標放在 Sub 裡面,按 F5 直接執行
- 在 Excel 中,按 Alt + F8 開啟巨集清單,選擇要執行的 Sub
- 在工作表上插入一個按鈕,指定到對應的 Sub(最方便的日常使用方式)
Q:代碼出錯了怎麼辦?
VBE 會用黃色標示出錯的那一行,同時彈出錯誤訊息。最常見的錯誤是拼錯變數名稱或忘記宣告變數。建議在模組最頂部加上 Option Explicit,這樣 VBA 會強制要求所有變數都必須先宣告,能幫你提早發現拼字錯誤。
📌 學完基礎之後的方向
掌握了 Sub 結構、變數和基本的儲存格操作後,你已經可以寫出能用的小程式了。接下來可以延伸學習:
- If…Then 條件判斷:根據不同情況執行不同代碼
- For Each 迴圈:逐一處理範圍內的每個儲存格
- 控制其他 Office 應用程式:本站有 VBA 控制 Word 和 Outlook 的完整教學:
- 更多 VBA 應用可以參考本站的 Excel VBA 教學完整指南