Bài viết: Sử dụng Worksheet Function trong VBA

Liên hệ QC

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,699
Giới tính
Nam
Dịch từ Chip Peason Website

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ự.


WorksheetFunction.jpg


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ã:
Dim Res As Double
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)

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

Mã:
=VLOOKUP("f",A1:B5,2,FALSE)

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ã:
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

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ã:
Dim Res As Variant
Res = Application.VLookup("c", Range("A1:B5"), 2, False)

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ã:
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

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.


PhanTuHuong;8364 đã viết:
Một số hàm trong Worksheet 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ụ như: Application.WorksheetFunction.Log và Log cho kết quả khác nhau như ở dưới đây (ô D2 có giá trị là 2).

Mã:
Sub Log_in_Excel()
 Answer=Application.WorksheetFunction.Log(Worksheets("Sheet3").Range("D2"))
 MsgBox "Excel: Gia tri Log(" & Range("D2").Value & ") = " & Answer
End Sub



Mã:
Sub Log_in_VBA()
Dim myRange As Range
 Set myRange = Worksheets("Sheet3").Range("D2")
 MsgBox "VBA: Gia tri Log(" & myRange & ") =" & Log(myRange)
End Sub





Lê Văn Duyệt
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT
Back
Top Bottom