Excel VBA 編程語言詳細教學網站

歡迎來到 Excel VBA 的完整入門與進階教學。本網站以繁體中文整理 VBA 的核心語法、Excel 自動化應用範例、 常見物件操作,以及互動式小測驗,幫助你從零開始學會用 VBA 提升工作效率。 香港編程學院 | Excel VBA 課程

適合初學者與進階使用者 完整語法教學 Excel 自動化範例 互動測驗

一、什麼是 Excel VBA?

先建立概念,了解為什麼要學 VBA。

VBA 是 Visual Basic for Applications 的縮寫,是內建於 Microsoft Office 中的程式語言。 在 Excel 中,VBA 可用來自動化重複工作、建立按鈕功能、批次整理資料、產生報表、匯出檔案,以及與工作表、 儲存格、圖表、樞紐分析等功能互動。

為什麼學 VBA?

  • 自動化重複性工作
  • 加快資料處理效率
  • 減少手動輸入錯誤
  • 建立自訂功能與工具

適合的使用情境

  • 每日報表整理
  • 批次格式套用
  • 資料清理與彙整
  • 跨工作表資料搬移

你將學到

  • VBA 編輯器使用方式
  • 程式結構與流程控制
  • Excel 物件模型概念
  • 實際商務應用案例
重點: 如果你常常在 Excel 中做「固定格式的重複工作」,那麼 VBA 幾乎一定能幫你省下大量時間。

二、開發環境設定

開始寫 VBA 前,需要先開啟開發工具與編輯器。

1. 開啟「開發人員」功能區

  1. 在 Excel 中點選「檔案」→「選項」
  2. 選擇「自訂功能區」
  3. 勾選「開發人員」
  4. 按下「確定」
開啟後,你就能在 Excel 上方功能區看到「開發人員」頁籤。

2. 開啟 VBA 編輯器

有兩種常見方式:

  • 按下 Alt + F11
  • 在「開發人員」頁籤點選「Visual Basic」

接著可於 VBA 編輯器中插入模組,開始撰寫程式。

3. 插入模組並撰寫第一支巨集

在 VBA 編輯器中,點選「插入」→「模組」,接著貼上以下程式:

Sub HelloVBA() MsgBox "歡迎學習 Excel VBA!" End Sub

執行後會跳出一個訊息視窗,這就是最基本的 VBA 程式。

三、VBA 語法教學

以下整理 Excel VBA 最常用的基礎語法與觀念。

3.1 基本結構與註解

VBA 程式通常由「程序」組成,最常見的是 SubFunction

語法 用途 說明
Sub ... End Sub 建立程序 執行某項工作,例如格式設定、資料整理。
Function ... End Function 建立函數 可回傳結果,像 Excel 公式一樣被呼叫。
' 註解內容 加入註解 方便日後維護與理解程式流程。
' 這是一段簡單的 VBA 程式 Sub ShowMessage() MsgBox "這是我的第一個 VBA 程式" End Sub

3.2 變數與資料型別

使用變數可以暫存資料,讓程式更有彈性。宣告變數時通常使用 Dim

資料型別 說明 範例
Integer 整數 Dim age As Integer
Long 較大的整數 Dim rowNum As Long
Double 小數 Dim price As Double
String 文字 Dim userName As String
Boolean 布林值 True/False Dim isDone As Boolean
Date 日期時間 Dim today As Date
Variant 可容納多種類型 Dim data As Variant
Sub VariableDemo() Dim userName As String Dim score As Integer Dim passed As Boolean userName = "小明" score = 85 passed = (score >= 60) MsgBox userName & " 的分數是 " & score & ",及格狀態:" & passed End Sub
建議: 在模組最上方加入 Option Explicit,可強制變數先宣告再使用,減少拼字錯誤。

3.3 條件判斷:If 與 Select Case

當程式需要依條件走不同流程時,可以使用條件判斷。

If...Then...Else

Sub CheckScore() Dim score As Integer score = 72 If score >= 60 Then MsgBox "及格" Else MsgBox "不及格" End If End Sub

Select Case

Sub GradeLevel() Dim grade As String grade = "B" Select Case grade Case "A" MsgBox "表現優秀" Case "B" MsgBox "表現良好" Case "C" MsgBox "需要加強" Case Else MsgBox "未知等級" End Select End Sub

3.4 迴圈:For、For Each、Do While

當你要重複執行某個動作時,迴圈會非常重要,尤其是在處理多列資料時。

For...Next

Dim i As Integer For i = 1 To 5 Debug.Print i Next i

For Each...Next

Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next ws

Do While

Dim n As Integer n = 1 Do While n <= 5 Debug.Print n n = n + 1 Loop
常見用途: 對工作表每一列資料做檢查、批次格式設定、清理空白資料、產生多頁工作表等。

3.5 程序與函數

Sub 用來執行工作;Function 用來回傳值。 如果你想建立可重複使用的自訂公式,Function 會很好用。

Sub 範例

Sub ShowToday() MsgBox "今天日期:" & Date End Sub

Function 範例

Function AddTwoNumbers(a As Double, b As Double) As Double AddTwoNumbers = a + b End Function

在 Excel 儲存格中可使用:

=AddTwoNumbers(10,20)

3.6 Excel 物件模型:Workbook、Worksheet、Range

Excel VBA 的核心在於操作 Excel 物件。最常見的三個物件是: Workbook(活頁簿)Worksheet(工作表)Range(儲存格範圍)

物件 用途 例子
Workbook 代表 Excel 檔案 ThisWorkbook, Workbooks("報表.xlsx")
Worksheet 代表某一張工作表 Worksheets("Sheet1")
Range 代表儲存格或範圍 Range("A1"), Range("A1:C5")
Sub RangeDemo() Worksheets("Sheet1").Range("A1").Value = "VBA 教學" Worksheets("Sheet1").Range("A2").Value = 100 Worksheets("Sheet1").Range("A1:A2").Font.Bold = True End Sub

3.7 錯誤處理

VBA 程式在實務上可能遇到工作表不存在、檔案找不到、資料格式錯誤等問題, 因此建議加入錯誤處理機制。

Sub ErrorHandlingDemo() On Error GoTo ErrorHandler Dim x As Integer x = 10 / 0 Exit Sub ErrorHandler: MsgBox "發生錯誤:" & Err.Description End Sub
注意: On Error Resume Next 雖然方便,但容易忽略錯誤, 建議只在你清楚風險時使用。

四、範例應用實作

透過實際案例,理解 VBA 在 Excel 中的常見用途。

範例一:自動格式化報表

此範例會將標題列加粗、設定背景色、並自動調整欄寬。

情境: 每次匯入資料後,都需要把表頭整理成一致格式。
Sub FormatReport() With Worksheets("Sheet1") .Range("A1:D1").Font.Bold = True .Range("A1:D1").Interior.Color = RGB(79, 129, 189) .Range("A1:D1").Font.Color = RGB(255, 255, 255) .Columns("A:D").AutoFit End With End Sub

範例二:自動計算總分與結果

此範例會依照每位學生的國文、英文、數學分數,自動計算總分與是否及格。

假設: B、C、D 欄為三科成績,E 欄放總分,F 欄放結果。
Sub CalculateScores() Dim lastRow As Long Dim i As Long Dim total As Double lastRow = Cells(Rows.Count, "B").End(xlUp).Row For i = 2 To lastRow total = Cells(i, "B").Value + Cells(i, "C").Value + Cells(i, "D").Value Cells(i, "E").Value = total If total >= 180 Then Cells(i, "F").Value = "及格" Else Cells(i, "F").Value = "不及格" End If Next i MsgBox "成績計算完成!" End Sub

範例三:批次建立工作表

這個例子會依據名單自動建立多張工作表,常用於部門、月份、專案分類。

Sub CreateSheets() Dim namesArr As Variant Dim i As Integer namesArr = Array("業務部", "人資部", "財務部", "資訊部") For i = LBound(namesArr) To UBound(namesArr) Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = namesArr(i) Next i MsgBox "工作表建立完成!" End Sub

範例四:找出最後一列並清理空白資料

清理資料時,常常需要刪除空白列,以下是一個基礎實作方式。

Sub DeleteBlankRows() Dim lastRow As Long Dim i As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = lastRow To 2 Step -1 If Trim(Cells(i, "A").Value) = "" Then Rows(i).Delete End If Next i MsgBox "空白列清理完成!" End Sub
技巧: 從最後一列往上刪除,能避免刪除列後造成列號錯亂。

五、VBA 實務建議與常見技巧

學會語法之後,更重要的是知道如何寫得穩定、可維護。

推薦習慣

  • 在模組最上方加入 Option Explicit
  • 變數命名要清楚,例如 lastRowtotalAmount
  • 將重複邏輯拆成獨立 Sub 或 Function
  • 對重要流程加上註解
  • 必要時加入錯誤處理

效能優化技巧

  • 批次作業前可暫時關閉畫面更新
  • 大量運算時可暫時關閉自動重算
  • 避免在迴圈中頻繁選取儲存格
  • 盡量直接操作 Range,而不是反覆 Select
Sub FastModeDemo() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ' 在這裡執行大量處理 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub

避免過度使用 Select 與 Activate

初學者常常會錄製巨集後得到很多 SelectActivate,但實務上應盡量避免。

不建議
Sheets("Sheet1").Select Range("A1").Select Selection.Value = "Hello"
建議
Worksheets("Sheet1").Range("A1").Value = "Hello"

六、互動式小測驗

試試看你是否掌握了 VBA 的基本觀念。

1. VBA 中用來宣告變數的關鍵字是什麼?

2. 下列哪一個結構最適合重複處理多列資料?

3. 若要代表 Excel 中某一個儲存格範圍,通常會使用哪一個物件?

4. 下列哪一段是函數 Function 的正確用途?

5. 為了減少拼錯變數名稱造成的錯誤,應在模組上方加入什麼?

七、總結

Excel VBA 是非常實用的辦公自動化工具,特別適合處理重複性的 Excel 工作。 你可以先從變數、條件判斷、迴圈與 Excel 物件操作開始,接著練習幾個常見自動化案例, 很快就能把原本需要半小時的作業,縮短到幾秒鐘完成。

下一步建議: 接下來你可以嘗試自己做一個「自動整理報表」或「批次產生工作表」的小專案, 透過實作把語法真正內化。