Hiểu hàm VBA IsDate của Excel

0
12

Hàm IsDate của VBA được cho là cho bạn biết liệu một chuỗi văn bản có thể được hiểu là một ngày hay không. Ví dụ: tất cả các biểu thức sau đây ước tính là True:

IsDate(“5/25/2015”)
IsDate(“January 16”)
IsDate(“12-1”)
IsDate(“12/1/15”)
IsDate(“2/30”)
IsDate(“30/2”)

Trong hai ví dụ gần đây, lưu ý rằng IsDate không kén chọn thứ tự trong ngày và tháng. Cả hai chuỗi này có thể được hiểu là một ngày, vì vậy IsDate trả về True (bất kể cài đặt định dạng ngày hệ thống của bạn).

Dưới đây là một số thông tin từ bài viết Hỗ trợ của Microsoft :

Các hàm ngày VBA IsDate, Format, CDate và CVDate sử dụng một chức năng được tìm thấy trong OLE Tự động hóa (OleAut32.dll). Hàm này tìm kiếm tất cả các định dạng ngày có thể bằng cách mã hóa từng giá trị được phân tách trong chuỗi đại diện cho ngày và trả về giá trị Boolean cho biết liệu đầu vào có thể được biểu thị dưới dạng Ngày hay không.

Điều này rất quan trọng cần nhớ khi sử dụng hàm để diễn giải một ngày có năm 2 chữ số. Phá miền địa phương khác nhau sử dụng các định dạng ngày khác nhau (có nghĩa là, /, dd mm dd / yy yy / mm /, “ DD MMM YY ” , “ YY MMM DD ” , và vân vân) và do đó chức năng cố các chữ số trong tất cả các vị trí cho đến khi chức năng đã tìm thấy một ngày hợp lệ hoặc cạn kiệt tất cả các khả năng.

Chỉ vì IsDate nhận ra một chuỗi là một ngày không có nghĩa là chuỗi đó có thể được chuyển đổi một cách đáng tin cậy thành một ngày. Trong một số trường hợp, kết quả là mơ hồ. Ví dụ, những gì về biểu hiện này?

IsDate(“29-Feb-01”)

Ngày 29 tháng 2 năm 2001 không phải là một ngày hợp lệ. Tuy nhiên, biểu thức này trả về True vì ngày 1 tháng 2 năm 1929 (và ngày 2 tháng 1 năm 1929) là ngày hợp lệ. Và những ngày đó cũng vậy vào năm 2029.

Một tìm kiếm cho tài liệu IsDate đã bỏ trống. Dựa trên thử nghiệm, IsDate chấp nhận bất kỳ ký tự nào sau đây dưới dạng ký tự phân cách: dấu gạch chéo (/), dấu gạch nối (-), dấu phẩy (,), dấu chấm (.) Và dấu cách.

Do đó, tất cả các biểu thức sau đều trả về True:

IsDate(“5.1”)
IsDate(“30 6”)
IsDate(“30,6”)
IsDate(“1/2”)

Nhưng sau đó có sự bất thường này: Các biểu thức sau trả về True:

IsDate(“5.1.5”)
IsDate(“5.1.05”)

Tuy nhiên, không hiểu sao, biểu thức này trả về Sai:

IsDate(“5.1.2005”)

Giả sử rằng bạn đã tạo một UserForm với InputBox nơi người dùng nhập ngày. Cần phải rõ ràng rằng việc sử dụng IsDate để xác thực mục nhập không đáng tin cậy.

Mọi thứ càng trở nên khó hiểu hơn khi bạn nhận ra rằng IsDate cũng bao gồm các giá trị thời gian. (Không có chức năng IsTime tương ứng.) Vì vậy, tất cả các biểu thức sau đều trả về True:

IsDate(“4:45”)
IsDate(“4.45”)
IsDate(“4 45”)
IsDate(“4/45”)
IsDate(“23:59”)

Các biểu thức này trả về Sai:

IsDate(“4:60”)
IsDate(“24.45”)

Điều quan trọng là chỉ ra rằng IsDate không thể hiện tất cả những điều kỳ quặc này khi bạn vượt qua một đối số Phạm vi. Ví dụ:

IsDate(Range(“A1”))

Có vẻ như IsDate hoàn toàn đáng tin cậy trong việc xác định các ô có chứa ngày hoặc thời gian. Ví dụ, nó không xác định một ô có chứa 5.1 là một ngày. Nếu mã của bạn cần xác định xem một chuỗi có thể được hiểu là một ngày hay không, giải pháp tốt nhất là đưa chuỗi đó vào một ô, sau đó viết mã để kiểm tra nội dung của ô.

Xem thêm: Làm việc với Mảng cho lập trình VBA trong Excel 2016

Tham khảo: VBA Excel là gì?

LEAVE A REPLY

Please enter your comment!
Please enter your name here