Excel VBA 新手完整教程
目錄
- 第一部分:入門篇 - 什麼是 VBA?為什麼要用它?
- 第二部分:準備工作 - 開啟 VBA 編輯器
- 第三部分:核心概念 - 物件、屬性、方法
- 第四部分:你的第一個 VBA 程式
- 第五部分:程式碼基礎
- 變數與常數
- 運算子
- 條件判斷
- 迴圈
- 第六部分:與 Excel 互動
- 選取儲存格
- 讀取與寫入資料
- 操作工作表和工作簿
- 第七部分:進階技巧
- 巨集錄製器
- 使用函數
- 錯誤處理
- 第八部分:實戰範例
- 第九部分:總結與學習資源
第一部分:入門篇 - 什麼是 VBA?為什麼要用它?
-
VBA 是什麼? VBA 的全名是 Visual Basic for Applications,它是一種內建在 Microsoft Office 套件中的程式語言,你可以把它想像成 Excel 的「超能力」,讓你能自動化重複性的工作、建立自訂函數、設計使用者介面,甚至連結其他應用程式。
(图片来源网络,侵删) -
為什麼要用 VBA?
- 自動化重複工作:每天整理報表、將數據從一個格式轉換到另一個格式,只需點一下按鈕,VBA 就能自動完成數小時的手動工作。
- 執行複雜計算:Excel 內建函數有限,VBA 可以讓你建立更複雜、更客製化的計算邏輯。
- 建立自訂工具:你可以設計自己的工具列、按鈕或對話方塊,讓 Excel 更符合你的工作流程。
- 整合外部資料:VBA 可以從資料庫、文字檔、網頁等外部來源自動抓取資料並匯入 Excel。
第二部分:準備工作 - 開啟 VBA 編輯器
要開始寫 VBA 程式,你需要一個專門的編輯器。
-
開啟 VBA 編輯器:
- 在 Excel 中,按下
Alt + F11鍵。 - 或者,前往「功能區」 > 「開發工具」 > 點擊「Visual Basic」按鈕。
- (如果沒有看到「開發工具」選項卡,請前往「檔案」 > 「選項」 > 「自訂功能區」,然後在右側勾選「開發工具」。)
- 在 Excel 中,按下
-
認識 VBA 編輯器介面:
(图片来源网络,侵删)- 專案總管:左側的視窗,顯示你的活頁簿(VBAProject)及其包含的元件(如工作表、模組等)。
- 程式碼視窗:中間的主要區域,你將在這裡編寫和編輯你的程式碼。
- 屬性視窗:通常在右下角,用來設定選中物件的屬性(將工作表的名稱改為 "新報表")。
第三部分:核心概念 - 物件、屬性、方法
理解 VBA 的關鍵在於把它想像成一個「與 Excel 對話」的過程,這個對話是透過「物件」、「屬性」和「方法」來完成的。
-
物件:Excel 中的任何東西都可以是一個物件。
Workbook(活頁簿)Worksheet(工作表)Range(儲存格範圍)Chart(圖表)Button(按鈕)
-
屬性:物件的「特徵」或「設定」,它回答了「它長什麼樣子?」的問題。
Range("A1").Value:儲存格 A1 的「值」。Range("A1").Font.Color:儲存格 A1 字體的「顏色」。Sheet1.Name:工作表 1 的「名稱」。
-
方法:物件的「動作」或「行為」,它回答了「你能對它做什麼?」的問題。
(图片来源网络,侵删)Range("A1").ClearContents:清除儲存格 A1 的「內容」。Sheet1.Select:「選取」工作表 1。Range("A1:A10").Copy:「複製」儲存格範圍 A1 到 A10。
簡單的記憶法:
- (點) 用來連接物件和它的屬性/方法。
物件的屬性:描述物件。物件的方法:操作物件。
第四部分:你的第一個 VBA 程式
我們來寫一個最簡單的程式,在儲存格 A1 顯示 "Hello, VBA!"。
- 在 VBA 編輯器中,從「專案總管」中,右鍵點擊你的活頁簿名稱 (
VBAProject (你的檔名.xlsx))。 - 選擇「插入」 > 「模組」,這會開啟一個新的空白程式碼視窗。
- 在程式碼視窗中,輸入以下程式碼:
Sub 第一個程式()
' 這是一個註解,不會被執行
Range("A1").Value = "Hello, VBA!"
End Sub
- 執行程式碼:
- 將游標放在
Sub和End Sub之間。 - 按下
F5鍵,或點擊工具列上的「▶」執行按鈕。
- 將游標放在
- 回到 Excel 工作表,你會看到儲存格 A1 的內容已經變成了 "Hello, VBA!"。
程式碼解釋:
Sub 第一個程式():宣告一個名為「第一個程式」的「子程式」,這是 VBA 程式的基本單位。Range("A1").Value = "Hello, VBA!":這是核心指令。Range("A1"):指定物件為 A1 儲存格。.Value:指定要操作的屬性是「值」。= "Hello, VBA!":將這個屬性設定為右邊的文字。
End Sub:宣告子程式結束。
第五部分:程式碼基礎
變數與常數
變數是用來儲存資訊的容器。
- 宣告變數:使用
Dim關鍵字,這是一個好習慣,可以避免錯誤。
Sub 使用變數()
Dim myName As String
Dim myAge As Integer
Dim myScore As Double
myName = "王小明"
myAge = 30
myScore = 95.5
Range("A1").Value = myName
Range("A2").Value = myAge
Range("A3").Value = myScore
End Sub
-
變數類型:
String:文字 ("你好")Integer:整數 (100)Double:浮點數 (99.9)Boolean:布林值 (True 或 False)Range:儲存格範圍物件
-
常數:使用
Const關鍵字,用於儲存不會改變的值。
Sub 使用常數()
Const PI As Double = 3.14159
Dim radius As Double
radius = 10
Range("A1").Value = "圓面積: " & PI * radius * radius
End Sub
運算子
- 算術運算子: (加), (減), (乘), (除),
^(次方) - 字串運算子:
&(連接文字)"Hello" & " " & "World" ' 結果是 "Hello World"
- 比較運算子: (等於),
<>(不等於),>(大於),<(小於)
條件判斷
使用 If...Then...Else 來執行不同的邏輯。
Sub 條件判斷()
Dim score As Integer
score = 85
If score >= 90 Then
Range("A1").Value = "成績優秀!"
ElseIf score >= 60 Then
Range("A1").Value = "及格了!"
Else
Range("A1").Value = "需要再努力!"
End If
End Sub
迴圈
當你需要重複執行某段程式碼時,迴圈就派上用場了。
- For...Next 迴圈:當你知道要重複的次數時使用。
Sub For迴圈()
Dim i As Integer
For i = 1 To 10
Range("A" & i).Value = "第 " & i & " 行"
Next i
- Do...Loop 迴圈:當你滿足某個條件時才停止迴圈。
Sub Do迴圈()
Dim i As Integer
i = 1
Do While i <= 10
Range("B" & i).Value = "資料 " & i
i = i + 1
Loop
End Sub
第六部分:與 Excel 互動
這是 VBA 最核心的部分。
選取儲存格
- 直接操作 (推薦):直接操作儲存格,而不需要「選取」它,這樣速度更快,且不會干擾使用者的選取範圍。
Range("C1").Value = "新資料" ' 直接設定 C1 的值 - 選取儲存格:有時需要模擬使用者的點擊。
Range("D1").Select ' 選取 D1 儲存格 ActiveCell.Value = "被選取的儲存格" ' ActiveCell 代表目前被選取的儲存格
讀取與寫入資料
- 寫入值
Range("A1").Value = 123 Range("B1").Value = "文字" - 讀取值
Dim myValue As String myValue = Range("A1").Value MsgBox "A1 的值是: " & myValue ' MsgBox 會彈出一個對話方塊
操作工作表和工作簿
-
使用
With語句:當你需要對同一個物件進行多個操作時,With可以讓程式碼更簡潔。Sub With語句() With Range("A1:A5") .Value = "測試" .Font.Bold = True ' 設定字體為粗體 .Interior.Color = RGB(255, 255, 0) ' 設定背景色為黃色 End With End Sub -
操作不同工作表
Sub 操作其他工作表() ' 方法一:直接指定 Worksheets("Sheet2").Range("A1").Value = "來自 Sheet1 的資料" ' 方法二:使用 With With Worksheets("Sheet3") .Range("B1").Value = "Hello" .Name = "新工作表名稱" End With End Sub
第七部分:進階技巧
巨集錄製器
這是學習 VBA 最快的方法!
- 在 Excel 功能區的「開發工具」中,點擊「錄製巨集」。
- 給你的巨集命名,選擇儲存位置,然後點擊「確定」。
- 執行你想要自動化的操作(設定格式、排序、輸入公式)。
- 完成後,點擊「停止錄製」。
- 按
Alt + F11開啟 VBA 編輯器,你會發現一個模組裡已經自動生成了對應的 VBA 程式碼,你可以學習它、修改它,讓它更完美。
使用函數
你可以自訂函數,在工作表的儲存格中像使用 SUM() 一樣使用它。
' 在模組中定義一個函數
Function 自訂稅率(收入 As Double) As Double
If 收入 > 50000 Then
自訂稅率 = 收入 * 0.2
Else
自訂稅率 = 收入 * 0.1
End If
End Function
回到 Excel 工作表,你可以在儲存格中輸入 =自訂稅率(A1) 來計算 A1 值的稅率。
錯誤處理
使用 On Error GoTo 可以讓你的程式更穩健,避免因小錯誤而當機。
Sub 錯誤處理範例()
On Error GoTo ErrorHandler ' 如果發生錯誤,跳轉到 ErrorHandler 標籤
' 這段程式碼可能會出錯
Range("Z1000").Value = "測試"
Exit Sub ' 如果沒有錯誤,在此處結束,不會執行下面的 ErrorHandler
ErrorHandler:
MsgBox "發生錯誤: " & Err.Description ' 顯示錯誤訊息
End Sub
第八部分:實戰範例
範例:建立一個按鈕,自動整理銷售報表
目標:在 "原始資料" 工作表中,有產品、銷量和金額,點擊按鈕後,自動在 "報表" 工作表中整理出總銷量和總金額。
-
準備資料:
- 新增一個工作表,命名為 "原始資料"。
- 在 A1:C1 輸入 "產品", "銷量", "金額"。
- 輸入一些測試資料。
-
建立按鈕:
- 回到 Excel,前往「開發工具」 > 「插入」 > 選擇「按鈕 (ActiveX 控制項)」。
- 在工作表上拖曳出一個按鈕。
- 右鍵點擊按鈕,選擇「檢視程式碼」,這會自動開啯 VBA 編輯器,並為你建立一個按鈕的點擊事件。
-
編寫 VBA 程式碼: 在自動開啟的程式碼視窗中,輸入以下內容:
Private Sub CommandButton1_Click() ' CommandButton1 是預設的按鈕名稱
' --- 宣告變數 ---
Dim wsSource As Worksheet
Dim wsReport As Worksheet
Dim lastRow As Long
Dim i As Long
Dim totalSales As Double
Dim totalRevenue As Double
' --- 設定物件 ---
Set wsSource = ThisWorkbook.Worksheets("原始資料")
Set wsReport = ThisWorkbook.Worksheets("報表")
' --- 清空舊報表 ---
wsReport.Cells.ClearContents
' --- 計算總和 ---
' 找出 "原始資料" 的最後一行
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
totalSales = 0
totalRevenue = 0
' 從第二行開始迴圈 (跳過標題列)
For i = 2 To lastRow
totalSales = totalSales + wsSource.Cells(i, 2).Value ' 累加銷量 (B欄)
totalRevenue = totalRevenue + wsSource.Cells(i, 3).Value ' 累加金額 (C欄)
Next i
' --- 將結果寫入報表 ---
With wsReport
.Range("A1").Value = "銷售報表"
.Range("A3").Value = "總銷量:"
.Range("B3").Value = totalSales
.Range("A4").Value = "總金額:"
.Range("B4").Value = totalRevenue
End With
' --- 顯示完成訊息 ---
MsgBox "報表整理完成!", vbInformation, "完成"
End Sub
- 測試:
- 回到 Excel,確保你處於「設計模式」(開發工具中)。
- 點擊你建立的按鈕,看看 "報表" 工作表是否自動更新了數據。
第九部分:總結與學習資源
VBA 是一個功能強大的工具,學習曲線初期較陡,但一旦掌握,將極大地提升你的工作效率。
學習建議:
- 多練習:從小範例開始,嘗試修改程式碼,看看會發生什麼。
- 善用巨集錄製器:把它當作你的 VBA 老師,學習標準的指令寫法。
- 閱讀 MSDN 文件:Microsoft 的官方文件是最權威的參考資料。
- 加入社群:在網路上尋找 VBA 論壇或社群,可以向有經驗的人提問。
推薦資源:
- Microsoft Docs: Office VBA 參考文件
- Excel VBA Is Fun: YouTube 上有非常多優質的免費教學影片。
- Stack Overflow: 全球最大的程式設計問答社群,可以搜尋或提問 VBA 問題。
希望這份教程能幫助你順利踏入 Excel VBA 的世界!祝你學習愉快!
