你有沒有遇過這樣的情況:每天早上要把昨天的資料複製貼上、格式調整、存檔,每次都要花10分鐘,做完還是一樣無聊?Excel VBA 就是用來解決這種重複動作的工具。

VBA(Visual Basic for Applications)是內建在 Excel 裡的程式語言,不需要另外安裝,學會之後可以讓 Excel 自動執行幾乎任何操作。

這篇從最基本的概念開始,包含如何開啟 VBA 編輯器、錄製第一個巨集、了解 Sub 的結構,以及變數的使用方式。全程附實際可執行的範例代碼,照著做就能跑起來。

內容目錄

📌 什麼是 VBA?跟巨集有什麼關係?

很多人對「VBA」和「巨集」這兩個詞感到混淆,其實關係很簡單:

簡單說,巨集是結果,VBA 是寫巨集的工具。你可以用錄製的方式產生巨集,也可以直接用 VBA 手動撰寫,後者更靈活、能做更複雜的邏輯判斷。

📌 開啟 VBA 編輯器

有兩種方式可以開啟 VBA 編輯器(VBE):

  1. 快捷鍵:按 Alt + F11(最快)
  2. 選單:開發人員 → Visual Basic(如果沒有看到開發人員選項,需先在「檔案 → 選項 → 自訂功能區」中啟用)

開啟後你會看到一個獨立視窗,左側是專案總管(顯示目前開啟的 Excel 檔案和工作表),右側是代碼編輯區,新建的檔案在工作表1點滑鼠點擊會出現空白頁面,所有 VBA 程式都在這裡撰寫。

📌 第一步:用錄製巨集了解 VBA 結構

完全沒有程式基礎的話,最好的入門方式是先錄製一個巨集,看看 Excel 自動產生的 VBA 代碼長什麼樣子。

錄製步驟

  1. 在 Excel 點選「開發人員 → 錄製巨集」
  2. 幫巨集命名(例如:Test1),按確定
  3. 在 A1 儲存格輸入「Hello」,按 Enter
  4. 點選「停止錄製」
  5. 按 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

幾個重要規則:

📌 常用操作:讀取和寫入儲存格

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

常用的資料類型:

📌 實用範例:自動填寫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 中最常用的結構之一:

📌 常見問題

Q:VBA 代碼要存在哪裡?

存在 Excel 檔案裡面的模組(Module)。注意:如果存成一般的 .xlsx 格式,關閉檔案時 VBA 代碼會被刪除。要保留 VBA 代碼,必須存成 .xlsm(啟用巨集的 Excel 活頁簿)格式。

Q:怎麼執行寫好的 Sub?

有幾種方式:

Q:代碼出錯了怎麼辦?

VBE 會用黃色標示出錯的那一行,同時彈出錯誤訊息。最常見的錯誤是拼錯變數名稱或忘記宣告變數。建議在模組最頂部加上 Option Explicit,這樣 VBA 會強制要求所有變數都必須先宣告,能幫你提早發現拼字錯誤。

📌 學完基礎之後的方向

掌握了 Sub 結構、變數和基本的儲存格操作後,你已經可以寫出能用的小程式了。接下來可以延伸學習:

  1. 自學Excel VBA系列-如何用VBA控制WORD?
  2. 自學Excel VBA系列-如何用VBA控制OutLook?
  3. Excel VBA 自動化教學完整指南:從入門到辦公室自動化應用