Sử dụng Worksheet Function trong VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
Sử dụng Worksheet Function trong VBA
(Dịch từ Chip Peason Website)
www.giaiphapexcel.com
Từ khi ngôn ngữ VBA được dùng cho nhiều ứng dụng khác nhau, các hàm Excel (Excel worksheet functions) không chỉ còn là của nó. Tuy bạn có thể gọi các hàm Excel từ VBA thông qua đối tượng Application nhưng không phải tất cả các hàm đều sử dụng được trong VBA. Một số hàm nếu trong VBA đã có (chức năng giống nhau như hàm Month chẳng hạn) thì bạn không thể dùng được các hàm Excel tương tự.
Bạn có thể sử dụng các hàm VBA với hai cách như sau: Ví dụ như hàm Vlookup

Mã:
[FONT="Courier New"]Dim Res As Double
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)[/FONT]

Nó tương đương với việc sử dụng công thức sau trong Excel

Mã:
[COLOR="Blue"]=VLOOKUP("f",A1:B5,2,FALSE)[/COLOR]

Nếu "f" không tìm thấy thì lỗi sẽ xảy ra và bạn sẽ nhận được thông báo lỗi lúc thực thi ( run-time error message) Unable to get the VLookup property of the WorksheetFunction class. Vì vậy bạn cần phải bẫy lỗi như sau:

Mã:
[COLOR="Blue"][FONT="Courier New"]Dim Res As Double
On Error Resume Next
Err.Clear
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)
If Err.Number <> 0 Then
    Debug.Print "Data Not Found."
Else
    Debug.Print "Value Found: " & CStr(Res)
End If[/FONT][/COLOR]

Bạn cũng có thể dùng hàm VLOOKUP (hay bất kỳ hàm Excel nào khác) bỏ qua thuộc tính WorksheetFunction property. Ví dụ,

Mã:
[FONT="Courier New"][COLOR="Blue"]Dim Res As Variant
Res = Application.VLookup("c", Range("A1:B5"), 2, False)[/COLOR][/FONT]
Bạn sẽ dễ dàng nhận ra sự khác nhau của hai đoạn mã trên. Ở đoạn mã thứ hai không dùng đến thuộc tính WorksheetFunction.
Trong ví dụ thứ hai không dùng thuộc tính WorksheetFunction, không có lỗi xãy ra khi thực thi. Thay vào đó, lỗi sẽ được lưu vào biến. Trong trường hợp này biến phải được khai báo là kiểu Variant. Nếu không bạn sẽ nhận được thông báo “type mismatch error”. Để xác định lỗi xãy ra bạn dùng hàm IsError. Ví dụ

Mã:
[COLOR="Blue"][FONT="Courier New"]Dim Res As Variant
Res = Application.VLookup("f", Range("A1:B5"), 2, False)
If IsError(Res) = True Then
    Debug.Print "Data Not Found."
Else
    Debug.Print "Value Found: " & CStr(Res)
End If[/FONT][/COLOR]

Chú ý rằng phương pháp này không dùng cho các hàm trong Analysis ToolPak.

Hy vọng rằng phần trên sẽ cho các bạn thêm một ít kiến thức nữa về việc dùng WorksheetFunction.

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
Ghi chú:

Một số hàm trong Microsoft Excel có tên giống như trong hàm trong VBA nhưng chúng có thể làm việc khác nhau. Ví dụ: Application.WorksheetFunction.Log và hàm Log trong Excel cho kết quả khác nhau.
 
Em có file excel dùng VBA nhưng cách dung hàm trong VBA em không thạo
Em muốn chuyển toàn bộ giá trị của hàm sang giá trị chứ không hiển thị hàm
Em xin chân thành cảm ơn
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom