Nhập ngày không có dấu phân tách (Microsoft Excel)
Những người khác nhau nhập dữ liệu theo những cách khác nhau. Khi bạn nhập thông tin vào một ô, Excel sẽ cố gắng tìm ra loại thông tin bạn đang nhập. Nếu bạn nhập một số chẳng hạn như 08242008, Excel sẽ giả định rằng bạn đang nhập một giá trị số và xử lý nó tương ứng. Điều gì sẽ xảy ra nếu số bạn nhập thực sự là một ngày, không có bất kỳ dấu phân cách nào? Excel có thể hiểu những gì bạn đang nhập không?
Thật không may, Excel không thể. Tại sao? Bởi vì bạn đã không cho nó dấu hiệu rằng đây phải là một ngày. (Các phím Excel trên dấu phân cách, không phải trên giá trị số.) Nếu bạn hoặc người nhập dữ liệu của bạn không thể thay đổi thói quen nhập liệu của họ để dấu phân cách cũng được nhập, thì bạn sẽ cần một số giải pháp thay thế để chuyển đổi thông tin đã nhập thành giá trị ngày thực tế .
Suy nghĩ đầu tiên của bạn có thể là bạn có thể sử dụng một định dạng tùy chỉnh để hiển thị thông tin. Hãy xem xét định dạng tùy chỉnh sau:
##"/"##"/"####
Định dạng này sẽ hiển thị số 08152008 là 15/8/2008. Vấn đề duy nhất là nó chỉ thay đổi cách hiển thị của số — nếu bạn muốn sử dụng ngày như một ngày Excel thực, bạn không thể làm như vậy vì bạn chưa chuyển đổi giá trị thành thứ mà Excel nhận ra là ngày.
Nếu các giá trị đầu vào rất nhất quán trong định dạng của chúng và nếu chúng được nhập dưới dạng văn bản thay vì dưới dạng giá trị số, thì có một cách dễ dàng bạn có thể chuyển đổi chúng thành ngày tháng. Rất nhất quán, ý tôi là đầu vào luôn sử dụng hai chữ số cho tháng, hai cho ngày và bốn cho năm. Ngoài ra, các ô chứa giá trị phải được định dạng dưới dạng văn bản. Trong trường hợp này, bạn có thể làm theo các bước sau:
-
Chọn cột ngày.
-
Đảm bảo rằng không có gì trong cột ngay bên phải ngày.
-
Chọn Văn bản thành Cột từ menu Dữ liệu. (Trong Excel 2007, chọn Văn bản thành Cột từ tab Dữ liệu của dải băng.) Excel hiển thị Trình hướng dẫn Chuyển đổi Văn bản thành Cột. (Xem Hình 1.)
-
Chọn tùy chọn Chiều rộng cố định, sau đó nhấp vào Tiếp theo.
-
Nhấp vào Tiếp theo một lần nữa.
-
Trong vùng Định dạng Dữ liệu Cột, hãy chọn Ngày.
-
Chọn phạm vi trong hộp Đích, sau đó trong trang tính, hãy nhấp vào ô ngay bên phải của giá trị đầu tiên bạn đã chọn ở bước 1.
-
Nhấp vào Kết thúc.
Nếu mọi việc suôn sẻ, Excel nên phân tích cú pháp các giá trị văn bản dưới dạng ngày tháng và bạn có thể xóa cột ban đầu. Nếu điều này không hoạt động, thì điều đó có nghĩa là các giá trị ban đầu không được định dạng dưới dạng văn bản hoặc tám chữ số không được sử dụng để nhập tất cả các ngày.
Một giải pháp khả thi khác là sử dụng công thức để chuyển đổi các giá trị đã nhập thành ngày tháng thực tế. Sau đây là một trong những công thức như vậy:
=DATE(RIGHT(A1,4),LEFT(A1,IF(LEN(A1) = 8,2,1)),LEFT(RIGHT(A1,6),2))
Công thức này giả định rằng ngày đã nhập (ngày không có dấu phân tách)
nằm trong ô A1. Công thức sẽ hoạt động với các ngày có bảy hoặc tám chữ số.
Nếu bạn thích các hàm tùy chỉnh, bạn có thể tạo một hàm trong VBA để kiểm tra dữ liệu đang được truyền, chuyển đổi nó sang định dạng ngày / giờ, rồi trả về kết quả. Chức năng sau đây rất linh hoạt về mặt này; nó sẽ hoạt động với cả định dạng ngày của Mỹ và Châu Âu:
Function DateTime(dblDateTime As Double, _ Optional bAmerican As Boolean = True) 'Converts Date and time "number" without 'delimiters into an excel serialdate (which 'can then be formatted with the Excel 'date/time formats) 'If optional argument is TRUE (or missing), 'function assumes value is of form: ' [m]mddyyyy.hhmm (leading "0" not required) 'If optional argument is FALSE, function 'assumes value is of form: ' [d]dmmyyyy.hhmm (leading "0" not required) Dim iYear As Integer Dim iMonth As Integer Dim iDay As Integer Dim iHour As Integer Dim iMin As Integer iYear = Int((dblDateTime / 10000 - _ Int(dblDateTime / 10000)) * 10000) iDay = Int((dblDateTime / 1000000 - _ Int(dblDateTime / 1000000)) * 100) iMonth = Int((dblDateTime / 1000000)) iHour = Int((dblDateTime - Int(dblDateTime)) * 100) iMin = Int((dblDateTime 100 - _ Int(dblDateTime 100)) * 100 + 0.5) If bAmerican Then DateTime = DateSerial(iYear, iMonth, iDay) Else DateTime = DateSerial(iYear, iDay, iMonth) End If DateTime = DateTime + (iHour + iMin / 60) / 24 End Function
Hàm macro này giả định rằng dữ liệu được chuyển đến nó là một giá trị số, như thường xảy ra khi nhập ngày tháng mà không có dấu phân tách. (Xem lại logic về vấn đề này ở phần đầu của mẹo.)
Như bạn có thể nói, có một số cách giải quyết, nhưng không có cách nào trong số đó đơn giản như chỉ nhập dấu phân tách khi nhập ngày. Nếu khó đào tạo bản thân hoặc người nhập dữ liệu của bạn để làm điều này, bạn có thể cân nhắc thiết lập một số quy tắc xác thực dữ liệu cho các ô đầu vào. Các quy tắc này có thể kiểm tra để đảm bảo rằng bạn đang nhập thông tin bằng một định dạng cụ thể (chẳng hạn như ngày có dấu phân cách) và ngăn bạn lại nếu bạn không nhập. (Cách bạn tạo quy tắc xác thực dữ liệu đã được đề cập trong các vấn đề khác của ExcelTips.)
_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 (2039) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: