Những giới hạn của WorksheetFunction

tuhocvba

Administrator
Thành viên BQT
Sự tiện lợi của WorksheetFunction thật là không thể nói hết bằng lời. Thay vì phải code một hàm mới, thì chúng ta có thể sử dụng ngay những hàm WorksheetFunction có sẵn.

Lần thứ nhất: Chuyển Bin thành Hex và ngược lại: WorksheetFunction.Bin2Hex
Hàm WorksheetFunction có giới hạn của nó, cụ thể với dãy nhị phân có độ dài 16 bits muốn chuyển thành HEX (hệ cơ số 16) chẳng hạn, thì hàm này vô tác dụng. Cũng vì lý do đó, mà tôi đã phải tự xây dựng hàm riêng. Câu chuyện đã được nói tới trong topic này:

Lần thứ hai: Đảo chiều mảng : WorksheetFunction.Transpose
Bình thường tôi vẫn dùng hàm này để đảo chiều mảng. Nhưng bỗng một lần dở chứng, bị báo lỗi.
Cuối cùng tôi phải tự xây dựng hàm riêng để đảo chiều mảng. Bây giờ có chút thời gian, tôi tìm hiểu xem tại sao khi dùng WorksheetFunction.Transpose lại lỗi.
  * 配列に 255 文字を超える要素を含めることはできません。
  * 配列に Null 値を含めることはできません。
  * 配列内の要素数が 5461 を超えることはできません。
Dịch: Phần tử của mảng mà có độ dài hơn 255 (ví dụ có 256 kí tự) là lỗi.
Mảng chứa phần tử có giá trị là Null thì sẽ lỗi.
Số lượng phần tử trong mảng vượt quá 5461 phần tử là lỗi.
Nguồn:

Lần thứ ba: Các hàm sẵn có của VBA cũng có thể bị lỗi do không hiểu điều kiện để sử dụng hàm, hoặc thiết định trên máy tính không giống nhau: StrConv
Câu chuyện này đã được trình bày ở đây:

Kết luận: Luôn có giải pháp thay thế các hàm WorksheetFuction, đó là dùng các hàm tự tạo, tuy nhiên điều này đòi hỏi bạn phải có khả năng code ở một mức độ nhất định.
Khi sử dụng hàm WorksheetFunction hoặc hàm sẵn có của VBA, hãy tìm hiểu xem giới hạn hay điều kiện sử dụng của hàm đó như thế nào trước khi sử dụng.
 

vqlongbn

Thành viên mới
Mình xin bổ sung, WorksheetFunction cũng không có hàm Mod, mà hàm Mod của VBA lại chỉ trả về giá trị nguyên, không làm việc chính xác được với các số thập phân, với các số thập phân từ 0 - 1 hàm này sẽ báo lỗi Divide by zero, tóm lại khi cần số dư thập phân mình phải tự viết 1 hàm dạng như này
Mã:
Function XLMOD(a As Double, B As Double)
XLMOD = a - B * Int(a / B)
End Function
 

vbano1

SMod
Thành viên BQT
@vqlongbn : Tôi đọc bài viết của bạn hoàn toàn không hiểu gì cả. Bạn nên nói rõ ra.
Về mặt toán học thì tôi không thấy có định nghĩa lấy phần dư của phép chia phân số cho phân số.
 
Top