Giới thiệu về macro và VBA
Cách bắt đầu với Excel VBA
Danh sách mã thường dùng
Chúng tôi đã tóm tắt các bước chuẩn bị để bắt đầu viết VBA và các mã cơ bản thường được sử dụng. Chúng tôi sẽ giới thiệu các ví dụ mà bạn có thể sao chép và thử, bao gồm đặc tả ô/phạm vi, biến, phân nhánh có điều kiện, lặp lại và cách viết hàm.
Nếu bạn muốn biết macro và VBA là gì, trước tiên hãy xem Bài viết giới thiệu Macro/VBA.
Chuẩn bị môi trường Nhà phát triển (Windows)
Bạn không cần bất kỳ phần mềm nào khác để viết VBA. Viết nó vào VBE(Visual Basic Editor) trong Excel và thực thi nó như cũ. Đầu tiên, chỉ chuẩn bị những thứ sau một lần.
1. Hiển thị tab nhà Nhà phát triển
Mở "Tệp" → "Tùy chọn" → "Tùy chỉnh Dải băng", chọn "Nhà Nhà phát triển" trong danh sách "Tab chính" ở bên phải và nhấn "OK". Tab “Nhà Nhà phát triển” sẽ xuất hiện trên dải băng.
2. Mở VBE
Nhấp vào "Visual Basic" trên tab "Nhà Nhà phát triển".Alt+F11Nhưng tôi có thể mở nó. Nhấn lại lần nữa sẽ đưa bạn trở lại màn hình Excel.
3. Thêm mô-đun tiêu chuẩn
Chọn "Chèn" → "Mô-đun tiêu chuẩn" từ menu VBE. "Module1" sẽ được tạo trong dự án ở bên trái và bạn sẽ có thể viết mã ở bên phải. Các macro thông thường được viết trong mô-đun tiêu chuẩn này.
4. Bật "Buộc khai báo biến"
Kiểm tra "Buộc khai báo biến" trong tab "Công cụ" → "Tùy chọn" → "Chỉnh sửa" của VBE. Dòng sau đây sẽ tự động được chèn vào đầu mô-đun mới được tạo và một thông báo lỗi sẽ được hiển thị để cho bạn biết nếu bạn gõ nhầm tên biến.
Option Explicit ' Đặt ở đầu mô-đun để yêu cầu khai báo biến bằng Dim.5. Viết và thực thi
Sau khi viết mã, nhấp vào bên trong Sub ~ End Sub rồi nhấn "XXX" (Sub/Run User Form) trên thanh công cụ, hoặcF5Nhấn Từ màn hình Excel, nhấp vào "Macro" (Alt+F8) để chọn tên và thực thi nó.
Nếu bạn muốn kiểm tra các giá trị trung gian, hãy đi tới "Xem" → "Cửa sổ ngay lập tức" của VBE (Ctrl+G) và viết "Tên biến Debug.Print" vào mã, giá trị sẽ xuất hiện ở đó.
6. Lưu dưới dạng sổ làm việc hỗ trợ macro (.xlsm)
Đối với sổ làm việc mà bạn đã viết VBA, hãy chọn "Sổ làm việc hỗ trợ macro Excel (*.xlsm)" trong "Save As". Nếu bạn lưu nó dưới dạng tệp .xlsx thông thường, mã bạn đã viết sẽ bị mất.
Khi bạn mở sổ làm việc, nếu bạn nhận được thông báo có nội dung "Cảnh báo bảo mật: Macro đã bị tắt", hãy bấm vào "Bật nội dung" chỉ khi sổ làm việc là sổ làm việc bạn đã tạo hoặc bạn tin cậy. Macro có thể bị chặn trong các tệp được lưu từ email hoặc Internet. Trong trường hợp đó, nhấp chuột phải vào tệp → chọn "Thuộc tính" và chọn "Cho phép".
Không thể hoàn tác những thay đổi được thực hiện bằng macro bằng Ctrl+Z.Khi dùng thử, hãy sử dụng bản sao của sổ bài tập hoặc dữ liệu thực hành.
Đối với Mac, hiển thị tab nhà Nhà phát triển bằng cách chọn menu "Excel" → "Tùy chọn" → "Ribbon và Thanh công cụ" và mở VBE trong "Visual Basic" trên tab nhà Nhà phát triển.
Thực hành sử dụng trình duyệtThực hành từ hiển thị tab Nhà phát triển đến mã chạy →Danh sách tham khảo nhanh các mã thường được sử dụng
Nếu đọc được đến đây thì bạn sẽ đọc được rất nhiều macro và mã được ghi lại do AI tạo ra. Hướng dẫn chi tiết cho từng phần được giới thiệu trong các phần dưới đây.
| Làm thế nào để viết | ý nghĩa |
|---|---|
| Sub MacroName() 〜 End Sub | Sự bắt đầu và kết thúc của macro (thủ tục) |
| ' Bình luận | ' Những ghi chú không được thực hiện từ cuối dòng |
| Dim item As Long | Chuẩn bị một biến (Long là số nguyên) |
| Set item = Worksheets("kiểm đếm") | Đặt các trang tính, ô, v.v. vào các biến |
| Range("A1") | Ô A1 |
| Range("A1:C5") | Phạm vi từ A1 đến C5 |
| Cells(row, column) | Chỉ định ô theo số hàng/cột |
| Cells(Rows.Count, 1).End(xlUp).Row | Hàng cuối cùng có dữ liệu trong cột A |
| .Value | giá trị ô |
| If condition Then 〜 End If | Chỉ thực hiện khi đủ điều kiện |
| For i = 1 To 10 〜 Next i | lặp lại một số lần nhất định |
| For Each item In targetRange 〜 Next | Xử lý từng ô trong phạm vi một |
| Function MacroName() … End Function | Hàm tự chế trả về một giá trị |
| WorksheetFunction.Sum(targetRange) | Sử dụng các hàm bảng tính với VBA |
| MsgBox "nhân vật" | hiển thị tin nhắn |
Dạng macro (Sub) cơ bản và chú thích
Macro bắt đầu bằng "Tên macro phụ()" và kết thúc bằng "End Sub". Các lệnh được viết trong thời gian này sẽ được thực thi theo thứ tự từ trên xuống. Tiếng Nhật cũng có thể được sử dụng trong tên macro.
Sub SayHello()
' Dòng này được nhận xét (không được thực thi)
MsgBox "xin chào"
End Sub「'” (trích dẫn đơn) cuối dòng là lời bình luận, viết ra việc bạn đang làm sẽ giúp bạn đọc sau hoặc truyền lại cho người khác.
Sử dụng "Gọi" để gọi các macro khác.
Sub RunAll()
Call CheckSales ' gọi macro khác
Call SayHello
End SubCách viết biến và hằng
Biến là các hộp lưu trữ các giá trị đang được tính toán hoặc các giá trị được sử dụng nhiều lần. Chuẩn bị nó bằng "Dim tên biến As type" và nhập giá trị bằng "=".
Sub VariablesExample()
Dim total As Long ' số nguyên
Dim customer As String ' chuỗi
Dim price As Double ' số có số thập phân
Dim today As Date ' Ngày
Dim finished As Boolean ' Đúng hay Sai
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "vấn đề"
End Sub| khuôn | Những gì để đưa vào |
|---|---|
| Long | Số nguyên (số hàng, số mục, v.v.) |
| Double | Các số bao gồm số thập phân (số lượng, tỷ lệ phần trăm, v.v.) |
| String | chuỗi |
| Date | Ngày/giờ |
| Boolean | True / False |
| Variant | Cái gì cũng có thể vừa (khi bạn chưa quyết định được loại nào) |
| Worksheet / Range | Trang tính/ô (chèn bằng Set) |
Khi lưu trữ "mọi thứ" (đối tượng) chẳng hạn như trang tính hoặc ô trong các biến, hãy thêm “Đặt” ngay từ đầu. Nếu quên đính kèm sẽ xảy ra lỗi, đó là điều mà tôi thường xuyên mắc phải.
Dim ws As Worksheet
Set ws = Worksheets("kiểm đếm") ' Chèn trang tính và ô bằng Set
ws.Range("A1").Value = "Tổng doanh thu"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsĐối với các giá trị không thay đổi trong quá trình thực hiện, chẳng hạn như thuế suất tiêu dùng, nếu bạn sử dụng "Const" để biến nó thành hằng số, bạn chỉ cần thay đổi một vị trí khi thay đổi nó.
Const TAX_RATE As Double = 0.1 ' Giá trị không thay đổi trong quá trình
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Cách chỉ định ô/phạm vi
Điều phổ biến nhất để viết trong VBA là chỉ định các ô. 「Range("A1")" là địa chỉ ô và "Ô (hàng, cột)" được chỉ định theo số.Các ô có thể được chỉ định theo số, rất hữu ích khi dịch chuyển từng hàng một trong quá trình lặp lại.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Được nhóm thành A1-C3
Range("A:A").Font.Bold = True ' Toàn bộ cột A
Range("2:2").Font.Bold = True ' toàn bộ hàng thứ hai
Cells(2, 3).Value = "C2" ' Hàng thứ 2/cột thứ 3 (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("kiểm đếm").Range("A1").Value = "Tổng cộng" ' Chỉ định trang tínhNếu bạn không viết tên trang tính, trang tính hiện đang mở (trang tính hoạt động) sẽ được nhắm mục tiêu. Khi vận hành một trang tính khác, hãy nhấp vàoWorksheets("tên trang tính").” ở phía trước.
tìm hàng cuối cùng
Đối với các bảng có số lượng hàng thay đổi hàng tháng, hãy kiểm tra xem có bao nhiêu dữ liệu trước khi xử lý. Đây là cách viết tìm số hàng của ô đầu tiên chứa dữ liệu, bắt đầu từ ô dưới cùng ở cột A và tăng dần lên trên.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Tìm từ cuối cột A lên trên
Range("A2:A" & lastRow).Font.Bold = True ' Từ cuối tiêu đề đến dòng cuối cùngToàn bộ bảng/ca/mở rộng
Range("A1").CurrentRegion.Select ' Toàn bộ bảng được kết nối với A1
Range("A1").Offset(1, 0).Value = "đáy" ' 1 dòng bên dưới (A2)
Range("A1").Offset(0, 2).Value = "đúng" ' Hàng thứ 2 bên phải (C1)
Range("A1").Resize(3, 2).Select ' 3 hàng x 2 cột từ A1 (A1:B3)Thao tác các giá trị, công thức và định dạng
Giá trị ô được đọc và ghi bằng ".Value". Đối với công thức, hãy nhập chuỗi giống như khi nhập chuỗi đó trong Excel ở ".Formula".
Range("D2").Formula = "=B2*C2" ' nhập công thức
Range("A2:D10").ClearContents ' Chỉ xóa giá trị (định dạng vẫn còn)
Range("A1").Font.Bold = True ' Đậm
Range("A1").Interior.Color = RGB(255, 242, 204) ' tô màu
Range("D2:D10").NumberFormat = "#,##0" ' dấu phân cách 3 chữ số
Range("A1:D10").Copy Destination:=Worksheets("dự trữ").Range("A1") ' sao chép và dánPhân nhánh có điều kiện (If · Select Case)
Sử dụng "If ~ Then" để phân tách quá trình xử lý dựa trên các điều kiện. Đừng quên "End If" ở cuối.Sử dụng "ElseIf" để chia điều kiện thành nhiều điều kiện và "Else" khi không có điều kiện nào áp dụng.
If Range("B2").Value >= 80 Then
Range("C2").Value = "Đã đậu"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Xác nhận lại"
Else
Range("C2").Value = "Thất bại"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 trống"
End If
' Và (cả hai), Hoặc (hoặc), <> (không bằng)
If Range("B2").Value >= 60 And Range("C2").Value <> "Vắng mặt" Then
Range("D2").Value = "OK"
End IfKhi chia thành nhiều cách dựa trên một giá trị, "Select Case" sẽ dễ đọc hơn.
Select Case Range("B2").Value
Case "Tokyo", "Yokohama"
Range("C2").Value = "Kanto"
Case "Osaka", "Kyoto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Khác"
End SelectLặp lại (For · For Each · Do While)
Việc thực hiện cùng một quá trình xử lý cho mỗi hàng là lúc VBA thể hiện được sức mạnh lớn nhất của nó."For ~ Next" lặp lại trong khi tăng biến i lên 1.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iKhi xử lý từng ô trong một phạm vi hoặc các trang tính trong sổ làm việc, hãy sử dụng "Dành cho từng ô".
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' điền vào chỗ trống bằng màu đỏ
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' tất cả các tờ
ws.Range("A1").Font.Bold = True
Next wsNếu hàng kết thúc chưa được xác định, hãy sử dụng "Do While" để lặp lại miễn là đáp ứng các điều kiện.Nếu bạn quên "r = r + 1", bạn sẽ không thể dừng lại.Khi nó không dừng lại,EscHoặcCtrl+BreakBạn có thể làm gián đoạn nó bằng .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Cho đến khi cột A trống
Cells(r, 5).Value = "Đã xác nhận"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Tổng cộng" Then Exit For ' thoát ra giữa chừng
Next iCách viết và sử dụng hàm
Khi chúng ta nói về "hàm" trong VBA, có ba loại:
Tạo chức năng của riêng bạn (Chức năng)
Nếu bạn tạo nó bằng "Hàm", nó sẽ trở thành một hàm trả về giá trị được tính toán. Nếu bạn đặt một giá trị vào tên hàm thì đó là kết quả.Nếu viết nó trong mô-đun tiêu chuẩn, bạn có thể nhập "=Số tiền bao gồm thuế (A2)" vào một ô và sử dụng nó theo cách tương tự như một hàm trong trang tính.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' Giá trị bạn đặt vào tên hàm sẽ trở thành kết quả.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubSử dụng các hàm bảng tính với VBA
Các hàm được sử dụng trong các ô, chẳng hạn như SUM và COUNTIF, có thể được gọi bằng "WorksheetFunction".
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tokyo")Hàm VBA
VBA cũng cung cấp các hàm xử lý ngày tháng và chuỗi.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' ngày hôm nay trong văn bản
Range("A2").Value = Now ' ngày và giờ hiện tại
Range("A3").Value = Len("Komorebi Shop") ' Số ký tự → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 ký tự từ trái sang → 2026
Range("A5").Value = Replace("Tokyo chi nhánh", "chi nhánh", "") ' Thay thế → Tokyo
Range("A6").Value = Trim(" Tokyo ") ' Xóa khoảng trắng trước và sauThông báo và đầu vào (MsgBox · InputBox)
Được sử dụng để thông báo kết thúc quá trình xử lý hoặc để xác nhận trước khi thực hiện. Nếu sử dụng "InputBox", bạn có thể nhập tháng, người phụ trách, v.v. mỗi lần chạy chương trình.
MsgBox "Kết thúc rồi"
If MsgBox("Bạn có muốn chạy nó không?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Bao nhiêu tháng?")
Range("A1").Value = answer & "hàng tháng"Thao tác trên tờ/sách
Worksheets("bán hàng").Activate ' tấm chuyển đổi
Worksheets("bán hàng").Copy After:=Worksheets(Worksheets.Count) ' sao chép tờ
ActiveSheet.Name = "Th10" ' Thay đổi tên trang tính
Worksheets.Add After:=Worksheets(Worksheets.Count) ' thêm trang tính
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tokyo_October.xlsx")
book.Close SaveChanges:=False ' Đóng mà không lưu
ThisWorkbook.Save ' Lưu sổ làm việc nàyNếu có nhiều thao tác xử lý cần thực hiện, bạn có thể ngừng cập nhật màn hình và quá trình sẽ hoàn tất nhanh hơn. Bạn có thể viết quy trình khi xảy ra lỗi bằng cách sử dụng "On Error GoTo".
Sub RunFaster()
Application.ScreenUpdating = False ' Dừng cập nhật màn hình
' ...Quá trình cần có thời gian...
Application.ScreenUpdating = True ' trở lại cuối cùng
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("kiểm đếm").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Tôi gặp lỗi:" & Err.Description
End SubVí dụ kết hợp: Tính toán và tô màu bảng bán hàng
Kết hợp mã cho đến nay, chúng ta có được điều này: Trong bảng "Doanh số", trong bảng có tên sản phẩm ở cột A, số lượng ở cột B và đơn giá ở cột C, hãy tính số tiền ở cột D và tô màu xanh lục cho các hàng có giá trị từ 100.000 yên trở lên.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("bán hàng")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Số tiền = Số lượng × Đơn giá
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Nếu trên 100.000 yên thì có màu xanh.
If ws.Cells(i, 4).Value >= 100000 Then
ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
Else
ws.Cells(i, 4).Interior.ColorIndex = xlNone
End If
Next i
MsgBox lastRow - 1 & "tính toán hàng"
End SubChứa các biến (Dim), đặc tả trang tính (Set), hàng cuối cùng, sự lặp lại (For) và phân nhánh có điều kiện (If). Nếu bạn có thể đọc từng hàng "điều gì đang được thực hiện ở ô nào", bạn có thể thay đổi số lượng hàng và điều kiện cho phù hợp với bảng của mình.
Ngay cả khi bạn có mã tạo AI, nếu bạn có thể đọc được hình này, bạn có thể tự kiểm tra xem cột nào đang được tính toán và liệu các điều kiện có đáp ứng hay không.
Tìm hiểu thêm
Chúng tôi khuyên bạn nên kiểm tra danh sách mã để biết cách viết và sau đó dùng thử bằng tệp tài liệu giảng dạy. Cuốn sách giới thiệu từng bước này cho phép bạn thực hành mọi thứ từ ghi macro đến biến, lặp lại và phân nhánh có điều kiện với các ví dụ được kết nối.
Đối với những người cảm thấy khó khăn khi làm việc đó một mình hoặc những người muốn thảo luận về các lĩnh vực công việc của họ có thể được tự động hóa, tham gia một khóa học do người hướng dẫn giảng dạy cũng là một lựa chọn.
Cách chọn phương pháp nghiên cứu cũng được giới thiệu trong Cách nghiên cứu macro và VBA.