Excel cung cấp một số hàm trả về True hoặc False tùy thuộc vào nội dung của ô. Ví dụ: ISBLANK trả về True nếu ô trống, ISERR trả về True nếu ô chứa giá trị lỗi và ISTEXT trả về True nếu ô chứa văn bản. Bạn có thể tự hỏi liệu có thể xác định xem một ô có chứa thời gian hay không.

Câu trả lời ngắn gọn là không, bạn không thể — Excel không chứa hàm nào để cho biết một ô có chứa thời gian hay không. Lý do khá đơn giản: Thời gian và ngày tháng trong Excel về mặt kỹ thuật không có gì khác ngoài số. Ngày là bất kỳ số nào trong phạm vi từ 1 đến 2958465, đại diện cho các ngày từ 1/1/1900 đến 12/31/9999. Nếu bạn thêm phần thập phân vào số, thì phần đó thể hiện thời gian (0 là nửa đêm, 0,25 là 6 giờ sáng, 0,5 là trưa, v.v.).

Biết phạm vi giá trị có thể được sử dụng cho ngày và giờ, cùng với thực tế là ô chứa thời gian phải được định dạng đúng để hiển thị thời gian, bạn có thể tạo công thức cho biết ô có chứa thời gian hay không:

=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)<="D9"), "Time Format","Not Time Format")

Công thức này kiểm tra định dạng được áp dụng cho ô B2. Nếu định dạng là một trong những định dạng thường được sử dụng cho thời gian, thì nó sẽ trả về văn bản “Định dạng Thời gian”. Nếu một định dạng khác được sử dụng, thì công thức trả về “Không phải Định dạng Thời gian”.

Một cách tiếp cận khác là kiểm tra xem giá trị trong ô B2 có phải là giá trị thời gian hợp lệ hay không. Bạn có thể làm điều đó bằng cách sử dụng công thức như sau:

=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")

Hàm hoạt động tốt miễn là ô B2 chỉ chứa một thời gian. Nếu ô chứa cả ngày và giờ thì hàm luôn trả về “Không phải mục nhập thời gian”.

Để tận dụng tối đa cả hai thế giới — kiểm tra định dạng và giá trị trong ô — hãy xem xét tạo một hàm do người dùng xác định trong VBA. Lý do rất đơn giản: VBA bao gồm hàm IsDate không chỉ xem phạm vi hiện tại của số mà còn kiểm tra xem ô có được định dạng là ngày hay không. Macro sau cung cấp một ví dụ về cách bạn có thể tạo một hàm như vậy:

Function IsTime(rng As Range) As Boolean     Dim sValue As String     sValue = rng.Cells(1).Text     On Error Resume Next     IsTime = IsDate(TimeValue(sValue))

On Error GoTo 0 End Function

Để sử dụng hàm, hãy sử dụng công thức sau trong ô:

=IsTime(B2)

Hàm đọc cách giá trị được hiển thị (sử dụng thuộc tính văn bản của đối tượng ô) và sau đó cố gắng chuyển đổi nó bằng hàm TIMEVALUE. Nếu đó là một ngày (được xác định bởi hàm IsDate) thì màn hình hiển thị là thời gian hợp lệ. Nếu đó không phải là một ngày, VBA sẽ tạo ra một lỗi mà mã được lập trình để bỏ qua.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (9699) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: