Hướng dẫn về hàm VBA Excel: Trả về, gọi, ví dụ
⚡ Tóm tắt thông minh
Hàm VBA trong Excel là một khối mã thực hiện một tác vụ và trả về kết quả cho đối tượng gọi nó. Trang này trình bày cú pháp khai báo, trả về giá trị, ví dụ phép cộng đã thực hiện và cách sử dụng hàm bên trong một ô bảng tính.

Chức năng là gì?
Hàm là một đoạn mã thực hiện một tác vụ cụ thể và trả về kết quả. Các hàm chủ yếu được sử dụng để thực hiện các tác vụ lặp đi lặp lại như định dạng dữ liệu cho đầu ra, thực hiện các phép tính, v.v.
Giả sử bạn đang phát triển...ping Một chương trình tính toán lãi suất cho vay. Bạn có thể tạo một hàm nhận vào số tiền vay và thời hạn trả nợ. Sau đó, hàm này sẽ sử dụng số tiền vay và thời hạn trả nợ để tính toán lãi suất và trả về giá trị.
Tại sao phải sử dụng hàm
Ưu điểm của việc sử dụng hàm cũng tương tự như ưu điểm của chương trình con: chúng chia một chương trình dài thành các phần dễ quản lý, có thể được tái sử dụng ở bất kỳ đâu trong dự án, và tên gọi mô tả rõ ràng chức năng của đoạn mã. Hướng dẫn sử dụng hàm con VBA trong Excel Bao gồm đầy đủ các quyền lợi đó.
Quy tắc đặt tên chức năng
Các quy tắc đặt tên cũng giống hệt như đối với các chương trình con. Tên hàm không được chứa dấu cách, phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới, và không được là tên dành riêng. VBA Từ khóa như Function, Private hoặc End.
Cú pháp VBA khai báo hàm
Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer) myFunction = arg1 + arg2 End Function
ĐÂY trong cú pháp,
| Code | Hoạt động |
|---|---|
|
|
|
|
|
|
|
|
Cách trả về giá trị và thiết lập kiểu dữ liệu cho hàm
Hàm có một nhiệm vụ mà chương trình con không có: nó trả về một giá trị. Có hai chi tiết kiểm soát giá trị đó, và cả hai đều rất dễ bị bỏ sót.
Đầu tiên là phép gán. VBA không có câu lệnh Return. Thay vào đó, bạn gán kết quả cho chính tên của hàm, đó là lý do tại sao dòng lệnh lại có dạng như vậy. myFunction = arg1 + arg2Nếu phép gán đó không bao giờ được thực thi, hàm sẽ âm thầm trả về một giá trị rỗng thay vì báo lỗi, vì vậy mọi nhánh của mã đều phải thiết lập giá trị đó.
Thứ hai là kiểu trả về. Khai báo ở trên kết thúc ở dấu ngoặc đóng, vì vậy hàm trả về một kiểu Variant. Thêm mệnh đề As sau dấu ngoặc sẽ sửa kiểu, giúp tăng tốc độ, sử dụng ít bộ nhớ hơn và cho phép trình biên dịch phát hiện sự không khớp.
| Tờ khai | Hoàn trả | Khi nào sử dụng nó |
|---|---|---|
| Hàm f(x As Long) | biến thể | Chỉ khi loại kết quả thực sự khác biệt |
| Hàm f(x As Long) As Long | dài | Số nguyên như số lượng và số hàng. |
| Hàm f(x As Long) As Double | Double | Bất kỳ phép tính nào tạo ra số thập phân |
| Hàm f(x As Long) As String | Chuỗi | Văn bản được định dạng trả về để hiển thị |
| Hàm f(x As Long) As Boolean | Boolean | Kiểm tra xác thực trả lời đúng hoặc sai. |
💡 Mẹo: Sử dụng hàm Exit để thoát sớm sau khi giá trị trả về được thiết lập, tương tự như cách hàm Exit Sub thoát khỏi một chương trình con.
Chức năng được thể hiện bằng ví dụ:
Các chức năng rất giống với chương trình con. Sự khác biệt chính giữa chương trình con và hàm là hàm trả về một giá trị khi được gọi. Mặc dù chương trình con không trả về giá trị khi nó được gọi. Giả sử bạn muốn cộng hai số. Bạn có thể tạo một hàm chấp nhận hai số và trả về tổng của các số đó.
- Tạo giao diện người dùng
- Thêm chức năng
- Viết mã cho nút lệnh
- Kiểm tra mã
Bước 1) Giao diện người dùng
Thêm nút lệnh vào bảng tính như minh họa bên dưới
Hãy đặt các thuộc tính sau của CommandButton1 thành các giá trị sau.
| S / N | Kiểm soát | Bất động sản | Giá trị |
|---|---|---|---|
| 1 | LệnhNút1 | Họ tên | btnThêmNumbers |
| 2 | Chú thích | Thêm Numbers Chức năng |
Giao diện của bạn bây giờ sẽ xuất hiện như sau
Bước 2) Mã chức năng.
- Nhấn Alt + F11 để mở cửa sổ mã
- Thêm mã sau đây
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
ĐÂY trong mã,
| Code | Hoạt động |
|---|---|
|
|
|
|
|
|
Bước 3) Viết Code hàm đó gọi hàm
- Nhấp chuột phải vào nút ThêmNumbers nút lệnh
- Chọn Xem Code
- Thêm mã sau đây
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
ĐÂY trong mã,
| Code | Hoạt động |
|---|---|
| “Tin nhắnBox thêm vàoNumbers(một)" |
|
Bước 4) Chạy chương trình, bạn sẽ nhận được kết quả sau
Tải xuống Excel chứa mã ở trên
Tải xuống tệp Excel ở trên Code
Nút phía trên gọi hàm từ mã VBA. Hàm cũng có thể được gọi trực tiếp từ trang tính mà không cần dùng nút nào.
Cách sử dụng hàm VBA trong ô bảng tính
Một hàm được viết bằng VBA có thể được nhập trực tiếp vào ô giống như hàm SUM hoặc VLOOKUP. Excel gọi đây là hàm do người dùng định nghĩa, hay UDF, và đó là lý do nhiều người học hàm trước khi học các chương trình con. Ba điều kiện phải được đáp ứng.
- Đặt nó vào một mô-đun tiêu chuẩn: Chèn, Mô-đun trong trình chỉnh sửa. Một hàm được lưu trữ phía sau một trang tính hoặc trong ThisWorkbook sẽ không hiển thị trên thanh công thức.
- Công khai điều này: Ví dụ trên sử dụng thuộc tính Private, giúp ẩn thông tin khỏi Excel. Thuộc tính Public là mặc định, vì vậy chỉ cần xóa từ khóa là đủ.
- Trả về giá trị, không thay đổi gì: Hàm do người dùng định nghĩa (UDF) không thể định dạng ô, xóa hàng hoặc ghi vào ô khác. Excel sẽ chặn các thao tác đó và ô sẽ hiển thị lỗi #VALUE!.
Hàm bên dưới chuyển đổi nhiệt độ và có thể được sử dụng ở bất kỳ đâu trên bảng tính.
Public Function CelsiusToF(ByVal Celsius As Double) As Double CelsiusToF = (Celsius * 9 / 5) + 32 End Function
Lưu bảng tính dưới dạng tệp .xlsm có hỗ trợ macro, sau đó nhập =CelsiusToF(A1) vào bất kỳ ô nào. Kết quả sẽ cập nhật mỗi khi ô A1 thay đổi, và tên sẽ xuất hiện trong danh sách tự động hoàn thành công thức dưới mục Người dùng định nghĩa. Vì sổ làm việc hiện chứa macro, bất kỳ ai mở nó đều phải bật nội dung trước khi công thức trả về một giá trị thay vì #NAME?.
Các lỗi thường gặp trong hàm VBA và cách khắc phục chúng.
Bốn vấn đề này là nguyên nhân chính dẫn đến hầu hết các hàm biên dịch thành công nhưng trả về kết quả sai.
- Hàm trả về giá trị rỗng hoặc 0: Kết quả không bao giờ được gán cho tên hàm, hoặc một nhánh của câu lệnh If bỏ qua việc gán giá trị. Hãy đặt giá trị trả về trên mọi đường dẫn.
- #NAME? trong một ô bảng tính: Chức năng này là riêng tư, nằm trong một mô-đun trang tính thay vì mô-đun tiêu chuẩn, hoặc sổ làm việc được lưu mà không bật macro.
- Tràn số khi sử dụng đối số kiểu số nguyên: Ví dụ này sử dụng kiểu dữ liệu As Integer, chỉ hỗ trợ tối đa 32,767. Hãy thay đổi cả hai tham số và kiểu trả về thành Long để sử dụng với dữ liệu thực.
- Một lập luận thay đổi khiến người gọi ngạc nhiên: Việc bỏ qua ByVal khiến VBA truyền chính biến đó, do đó hàm có thể thay đổi giá trị của biến gọi. Hãy viết ByVal trừ khi bạn muốn có hiệu ứng đó.



