Nhận biết dữ liệu định dạng date như thế nào? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Người Đưa Tin

Hạt cát sông Hằng
Thành viên danh dự
Tham gia
12/12/06
Bài viết
3,661
Được thích
18,158
Do các em nhập liệu không chuẩn dẫn đến việc kiểm tra khó, mình xin được nhờ hướng dẫn cách nhận dạng dữ liệu định dạng date như thế nào? Xin công thức kiểm tra dữ liệu date?

Xin cám ơn
 
Do các em nhập liệu không chuẩn dẫn đến việc kiểm tra khó, mình xin được nhờ hướng dẫn cách nhận dạng dữ liệu định dạng date như thế nào? Xin công thức kiểm tra dữ liệu date?

Xin cám ơn
Bác dùng hàm ISNUMBER để kiểm tra thử xem, nếu đúng là dạng ngày tháng thì trả về True, ngược lại False
 
Bác dùng hàm ISNUMBER để kiểm tra thử xem, nếu đúng là dạng ngày tháng thì trả về True, ngược lại False

Gặp dân dốt đặc công thức mà sao tiếc thay một lời ví dụ, minh hoạ vậy chời. Hụ hụ hụ
Ước gì minh hoạ bằng table thì tuyệt
 

File đính kèm

..... sao tiếc thay một lời ví dụ, minh hoạ vậy chời. Hụ hụ hụ
Ước gì minh hoạ bằng table thì tuyệt
Bác ơi đừng khóc nữa. Bác thử hàm này xem sao nhé.
Nếu ô A1 là ô cần kiểm tra định dạng ngày tháng:
Giá trị trả về của ô B1 là "D1" thì ô A1 đó có định dạng là ngày tháng đó bác. Em kèm thêm file đính kèm rồi nghe!
 

File đính kèm

Bác cần kiểm tra ô B3 chẳng hạn, bác gõ công thức:

=DATE(YEAR(B3),MONTH(B3),DAY(B3))

Nếu nó không thể hiện ngày nữa là sai. Cần kiểm tra ô khác bác thay B3 bằng địa chỉ.
 
Đây là file mà các em nhập liệu vừa rồi để import vào HTKKT2.5.2 mà bị báo lỗi, sau đó em phải kiểm tra thủ công bằng cách nhập liệu lại từng ngày

Các em nó nhập liệu không có dấu nháy (') hoặc " gì cả, nó canh dữ liệu ở cột ngày tháng là center toàn bộ. Thật sự dữ liệu date là mặc nhiên là canh phải, phải không?
 

File đính kèm

Đây là file mà các em nhập liệu vừa rồi để import vào HTKKT2.5.2 mà bị báo lỗi, sau đó em phải kiểm tra thủ công bằng cách nhập liệu lại từng ngày

Các em nó nhập liệu không có dấu nháy (') hoặc " gì cả, nó canh dữ liệu ở cột ngày tháng là center toàn bộ. Thật sự dữ liệu date là mặc nhiên là canh phải, phải không?
Dữ liệu trong file của bác là dữ liệu ngày tháng rồi còn gì? Nếu không định dạng canh lề thì dữ liệu ngày tháng năm sẽ canh theo lề phải. Nhưng nếu người dùng canh lề khác thì vẫn được.
 
Bác cần kiểm tra ô B3 chẳng hạn, bác gõ công thức:

=DATE(YEAR(B3),MONTH(B3),DAY(B3))

Nếu nó không thể hiện ngày nữa là sai. Cần kiểm tra ô khác bác thay B3 bằng địa chỉ.

@sealand Domfootwear: Nếu ô B3 em gõ số 13, các hàm kiểm tra của hai anh đều cho giá trị đúng, nhưng nó có phải là định dạng ngày tháng đâu?
 
Tại ô E15 (Ngày tháng năm phát hành) Trong ô có comment ghi là nhập liệu phải là dạng dd/mm/yyyy mà. Anh xem lại định dạng trên máy của Anh xem sao. vào control panel ấy.
 
Dữ liệu trong file của bác là dữ liệu ngày tháng rồi còn gì? Nếu không định dạng canh lề thì dữ liệu ngày tháng năm sẽ canh theo lề phải. Nhưng nếu người dùng canh lề khác thì vẫn được.

Thưa Thầy, cái này là em đã chỉnh lại qua date toàn bộ rồi. Tiếc phải còn file gốc của các em để Thầy chỉ cho em cái sai

Tại ô E15 (Ngày tháng năm phát hành) Trong ô có comment ghi là nhập liệu phải là dạng dd/mm/yyyy mà. Anh xem lại định dạng trên máy của Anh xem sao. vào control panel ấy.

Thế mới có chuyện nói đó bác Công ạ, em đã vấp phải nên đang cần được sự hướng dẫn đây
 
@sealand Domfootwear: Nếu ô B3 em gõ số 13, các hàm kiểm tra của hai anh đều cho giá trị đúng, nhưng nó có phải là định dạng ngày tháng đâu?
Ẹc... Ẹc... nhưng cho dù có dùng CELL(...) thì cũng đâu có chính xác tuyệt đối
Trong file của Kiệt, thử gõ vào cell A2 số này xem: 76445674567
Nói tóm lại: Dù là dùng phương pháp gì thì cũng chỉ mang tính tương đối ---> thực chất DATE mà ta nhìn thấy cũng chỉ là Number do Excel convert ra thôi!
 
Ẹc... Ẹc... nhưng cho dù có dùng CELL(...) thì cũng đâu có chính xác tuyệt đối
Trong file của Kiệt, thử gõ vào cell A2 số này xem: 76445674567
Nói tóm lại: Dù là dùng phương pháp gì thì cũng chỉ mang tính tương đối ---> thực chất DATE mà ta nhìn thấy cũng chỉ là Number do Excel convert ra thôi!
Hàm Cell("format",A2) trả về giá trị là "G" với A2=76445674567 , nghĩa là không phải định dạng Date mà anh. Em chưa hiểu nó không chính xác chỗ nào?
--------------------------------------------------------
À, thì ra nó chỉ lấy format định dạng mà thôi... hix...
 
Lần chỉnh sửa cuối:
Hàm Cell("format",A2) trả về giá trị là "G" với A2=76445674567 , nghĩa là không phải định dạng Date mà anh. Em chưa hiểu nó không chính xác chỗ nào?
Tức là hàm CELL(..) cùng lắm chỉ biết 1 cell đang được format theo dạng gì chứ không biết bản chất thật sự của dữ liệu
Ta thí nghiệm thế này:
- Gõ chữ ndu vào cell A1
- Cell B1 tôi gõ công thức =CELL("format",A1)
- Kết quả nhận được ="G"
- Giở Custom Format cell A1 dạng: d/m/yyyy
- Bấm F9 để cập nhật ---> cell B1 nhận kết quả ="D1"
-----------
Bạn thấy sao?
 
Vậy chắc mình gom hai điều kiện kiểm tra vào luôn quá, đại khái như:
=NOT(ISERROR(YEAR(A1)))*(LEFT(CELL("format",A1))="D")
Gái trị trả về là 1: định dạng ngày tháng
Gái trị trả về là 0: không phải định dạng ngày tháng
 
Với dữ liệu kiểu Date thì những người làm việc với excel nếu không để ý thì gặp thường xuyên. Đó là việc nhập sai với định dạng trong cấu hình hệ thống. Nếu việc nhập sai nhưng vẫn tuân theo 1 nguyên tắc thống nhất thì vẫn có khả năng để cứu, còn không thống nhất cách nhập thì chịu không có cách nào. Ví dụ cấu hình hệ thống yêu cầu nhập vào theo định dạng m/d/y(Tháng trước, đến ngày, đến năm), khi đó nếu người dùng nhập theo định dạng là d/m/y(ngày trước, đến tháng, đến năm) thì sẽ xảy ra 2 trường hợp. Nếu ngày nhập vào <=12, khi đó ta vẫn được 1 giá trị kiểu ngày nhưng bị sai(ngày và tháng thay đổi cho nhau), nếu nhập vào ngày > 12 khi đó ta được 1 giá trị là Text. Khi đó ta có thể chuyển về dữ liệu chuẩn theo nguyên tắc. Nếu là Text(dùng hàm ISTEXT để kiểm tra) thì dùng phương pháp xử lý chuỗi để xử lý. Nếu là 1 ngày thì thay ngày thành tháng sẽ được dữ liệu chuẩn. Đây là cách tôi hay sử dụng, tuy nhiên thì như tôi đã nói là phải xác định đúng lỗi và dữ liệu phải nhập thống nhất.
 
Vậy chắc mình gom hai điều kiện kiểm tra vào luôn quá, đại khái như:
Gái trị trả về là 1: định dạng ngày tháng
Gái trị trả về là 0: không phải định dạng ngày tháng
Mình thì có ý tưởng thế này:
- Đàng nào thì DATE cũng chính là NUMBER
- Giả sử ta biết trước ngày tháng đang xét nằm trong 1 khoảng nào đó, ví dụ từ 1/1/2000 đến 31/12/2011
- 2 mốc thời gian này tương đương với số nguyên dương từ 36526 đến 40908
- Vậy chỉ cần xét cell có phải là Number và nằm trong khoảng 2 mốc ấy không là được rồi
Đại khái thế này:
=AND(B3>=36526,B3<=40908)
Với B3 là dữ liệu cần check
(xét thêm trường hợp B3 là số nguyên nếu cần)
 
Mình có một cách là dùng đoạn code để kiểm tra định dạng, chẳng hạn:
Msgbox(Selection.NumberFormat) nhưng chưa biết làm sao ghi vào cột bên cạnh.
 
Đây là file mà các em nhập liệu vừa rồi để import vào HTKKT2.5.2 mà bị báo lỗi, sau đó em phải kiểm tra thủ công bằng cách nhập liệu lại từng ngày

Các em nó nhập liệu không có dấu nháy (') hoặc " gì cả, nó canh dữ liệu ở cột ngày tháng là center toàn bộ. Thật sự dữ liệu date là mặc nhiên là canh phải, phải không?
Đầu tiên cứ phải kiểm tra định dạng hệ thống cái đã: Ctrl + : hiện thị ngay tại ô hiện hành. từ đó biết được định dạng của mình cái đã rồi làm gì mới làm (tránh trường hợp máy khác được máy mình không, rồi sửa lại cuối cùng công toi)
Cách làm mọi người đã ghóp ý như trên.
Em ghóp ý thêm chút. Bác tạo một file dạng temp chuẩn Nếu nhập sai định dạng nó sẽ không cho nhập
Các bạn cứ thế làm, cần thêm dòng thì chèn sau đó sao chép định dạng xuống rồi nhập liệu tiếp.
Gửi bác 2 file dạng temp. hàng tháng cứ lấy nó ra dùng thôi.

File temp kê khai mua vào bán ra
 
Chỉnh sửa lần cuối bởi điều hành viên:
Đầu tiên cứ phải kiểm tra định dạng hệ thống cái đã: Ctrl + : hiện thị ngay tại ô hiện hành. từ đó biết được định dạng của mình cái đã rồi làm gì mới làm (tránh trường hợp máy khác được máy mình không, rồi sửa lại cuối cùng công toi)

Tôi không rõ chỗ đoạn tô màu nâu bác trình bày. Tôi dùng Ctrl + nó ra là Insert bác ơi
 
Tôi không rõ chỗ đoạn tô màu nâu bác trình bày. Tôi dùng Ctrl + nó ra là Insert bác ơi

Không phải đâu bác, nó chí là Ctrl và :.

Theo tối kiến của em thì cứ như thế này để người khác nhập liệu cho mình khỏe:

Tạo cột data kiểu TEXT, xin mời ai nhập liệu thì cứ gõ vào đó theo kiểu DD/MM/YY hay gì đó cũng được, nhưng đúng theo qui định của mình. Sau đó dùng hàm kéo cái rẹt cho khỏe Bác ạ.
 
Lần chỉnh sửa cuối:
Tức là bấm Ctrl với dấu chấm phẩy đó bác!

Nhờ Thầy Tuấn kiểm tra giúp em thao tác như vậy đúng không
Già sử em cố tình nhập liệu vào A1 như sau: 12/25/10, sau đó tại cell A1 đó em bấm Ctrl với dấu chấm phẩy thì cho ra kết quả như sau: 27/07/2010. Và sau đó, tại B1 em dùng hàm
B1 = Isnumber(A1) thì kết quả cho là true.

Vậy trong trường hợp này khi dùng Ctrl với dấu chấm phẩy thì nó đã biến đổi giá trị từ A1 12/25/10 sang lại dạng date với kết quả là 27/07/2010.

Sao em cảm giác không an toàn và đau đầu thay khi dùng: Ctrl với dấu chấm phẩy +-+-+-+ +-+-+-+ +-+-+-+ Hay do em dốt quá ta
 
Nhờ Thầy Tuấn kiểm tra giúp em thao tác như vậy đúng không
Già sử em cố tình nhập liệu vào A1 như sau: 12/25/10, sau đó tại cell A1 đó em bấm Ctrl với dấu chấm phẩy thì cho ra kết quả như sau: 27/07/2010. Và sau đó, tại B1 em dùng hàm
B1 = Isnumber(A1) thì kết quả cho là true.

Vậy trong trường hợp này khi dùng Ctrl với dấu chấm phẩy thì nó đã biến đổi giá trị từ A1 12/25/10 sang lại dạng date với kết quả là 27/07/2010.

Sao em cảm giác không an toàn và đau đầu thay khi dùng: Ctrl với dấu chấm phẩy +-+-+-+ +-+-+-+ +-+-+-+ Hay do em dốt quá ta

Cho em xin phép chen ngang các Bác nhé:

Khi nhấn Ctrl & ;, thì giá trị ngày ở đây là của hệ thống, tương đương như hàm now() vậy, nên mới có KQ như Bác nói.

Khi Bác gõ 12/25/10 thì sẽ nhảy data qua bên trái cell -> text, nên theo em để chắc ăn nhất là gõ hàm date(2010,25,12) trước để xem data ra như thế nào (nhớ cell không Format), sau đó dựa vào đó mà gõ data ngày tháng cho chính xác.
 
Không phải đâu bác, nó chí là Ctrl và :.

Theo tối kiến của em thì cứ như thế này để người khác nhập liệu cho mình khỏe:

Tạo cột data kiểu TEXT, xin mời ai nhập liệu thì cứ gõ vào đó theo kiểu DD/MM/YY hay gì đó cũng được, nhưng đúng theo qui định của mình. Sau đó dùng hàm kéo cái rẹt cho khỏe Bác ạ.
Ở đây có 2 vấn đề riêng biệt, 1 là xử lý dữ liệu đã nhập(sự đã rồi), 2 là hỗ trợ chuẩn bị cho người dùng nhập liệu(cái này thì có nhiều cách).
To vuminh1606: Nếu ngày hiện tại là 07/07/07 thì bạn sẽ nhận biết thế nào đây? Sao không tự nhập 1 ngày thật to vào (13-28) của 1 tháng bất kỳ kiểm tra có dễ hơn không.
 
Đầu tiên cứ phải kiểm tra định dạng hệ thống cái đã: Ctrl + : hiện thị ngay tại ô hiện hành

Viết bài hướng dẫn kiểu này làm cho người mới tập tễnh bước vào học Excel như tôi là chỉ có nước toi mạng, phí thời gian.

Giờ tôi đã hiểu thế nào là ctrl ;. Mục đích là kiểm tra ngày hiện hành của hệ thống

đó biết được định dạng của mình cái đã rồi làm gì mới làm (tránh trường hợp máy khác được máy mình không, rồi sửa lại cuối cùng công toi)

Tương tự đoạn này cũng vậy, trình bày ý gì tôi cũng không rõ
Nhưng cuối cùng tôi vẫn phải cám ơn bác đã đối hoài để chỉ dẫn chia sẻ cho tôi
 
Chà chà... em cũng ít nhiều kinh nghiệm xử lý về ngày tháng, chắc phải viết một bài tổng hợp quá..... Hihihi.

Không biết các Bác có ủng hộ không nhỉ?????????????
 
Nhờ Thầy Tuấn kiểm tra giúp em thao tác như vậy đúng không
Già sử em cố tình nhập liệu vào A1 như sau: 12/25/10, sau đó tại cell A1 đó em bấm Ctrl với dấu chấm phẩy thì cho ra kết quả như sau: 27/07/2010. Và sau đó, tại B1 em dùng hàm
B1 = Isnumber(A1) thì kết quả cho là true.

Vậy trong trường hợp này khi dùng Ctrl với dấu chấm phẩy thì nó đã biến đổi giá trị từ A1 12/25/10 sang lại dạng date với kết quả là 27/07/2010.

Sao em cảm giác không an toàn và đau đầu thay khi dùng: Ctrl với dấu chấm phẩy +-+-+-+ +-+-+-+ +-+-+-+ Hay do em dốt quá ta
Tức là vầy bác à:
- Bấm Ctrl + ; vào 1 cell trống
- Mục đích là xem thử định dạng của hệ thống đang thuộc dạng nào: Ngày trước hay tháng trước
- Chỉ có tác dụng kiểm tra chứ chẳng làm gì trên dữ liệu của bác cả
-------------
Nói chung nó cũng chỉ có tính tương đối (như ví dụ mà rollover79 đã đưa ở trên)
Còn để luôn nhập liệu chính xác thì có 1 cách đơn giản: nhập năm trước, rồi đến tháng, rồi đến ngày ---> Ví dụ: 2010/3/25 <==> ngày 25 tháng 3 năm 2010
Cách này chắc ăn trên mọi máy tính
 
Lần chỉnh sửa cuối:
Tức là vầy bác à:
- Bấm Ctrl + ; vào 1 cell trống
- Mục đích là xem thử định dạng của hệ thống đang thuộc dạng nào: Ngày trước hay tháng trước
- Chỉ có tác dụng kiểm tra chứ chẳng làm gì trên dữ liệu của bác cả
-------------
Nói chung nó cũng chỉ có tính tương đối (như ví dụ mà rollover79 đã đưa ở trên)
Còn để luôn nhập liệu chính xác thì có 1 cách đơn giản: nhập năm trước, rồi đến tháng, rồi đến ngày ---> Ví dụ: 2010/3/25 <==> ngày 25 tháng 3 năm 2010
Cách này chắc ăn trên mọi máy tính

Lại thêm 1 bài học nữa đây, cẩn trọng

Sau khi nhấn ctrl cùng ; (dấm phẩy) mà Enter là không được vì nó sẽ gán ngày hệ thống đó vào dữ liệu của mình ngay.

Chỉ nhấn ctrl cùng ; (dấm phẩy) để xem định dạng ngảy tháng hệ thống như Thầy trình bày

- Mục đích là xem thử định dạng của hệ thống đang thuộc dạng nào: Ngày trước hay tháng trước
 
Tôi xin hỏi anh ndu một tý, tôi dùng đoạn code MsgBox (Selection.NumberFormat) thì hiển thị được kiểu format của một ô nhưng tôi không ghi được kết quả vào ô bên cạnh, anh giúp tôi viết hàm này với.
 
Tôi xin hỏi anh ndu một tý, tôi dùng đoạn code MsgBox (Selection.NumberFormat) thì hiển thị được kiểu format của một ô nhưng tôi không ghi được kết quả vào ô bên cạnh, anh giúp tôi viết hàm này với.
Thì vầy thôi:
PHP:
Function CelFormat(Cel As Range) As String
  Application.Volatile
  CelFormat = Cel.NumberFormat
End Function
Tuy nhiên đây chẳng phải là phương pháp chính xác! Nó chỉ xem cell đang format dạng gì chứ không biết bản chất thật sự của dữ liệu
Xem lại bài #14
 
Thì vầy thôi:
PHP:
Tuy nhiên đây chẳng phải là phương pháp chính xác! Nó chỉ xem cell đang format dạng gì chứ không biết bản chất thật sự của dữ liệu
Xem lại [B][URL="http://www.giaiphapexcel.com/forum/showthread.php?38644-Nh%E1%BA%ADn-bi%E1%BA%BFt-d%E1%BB%AF-li%E1%BB%87u-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-date-nh%C6%B0-th%E1%BA%BF-n%C3%A0o&p=256647#post256647"]bài #14[/URL][/B][/QUOTE]
Xin cảm ơn Anh nhiều, nó cho KQ cụ thể hơn hàm cell(format... ) Anh ạ, tôi vừa thử xong. Vậy là mình giải quyết được vấn đề của [B]Kế Toán Già Gân[/B] rồi hả anh? Có điều là phải dùng VBA.
 
Lần chỉnh sửa cuối:
xin lỗi sửa lại là Ctrl + ;
 
Đơn giản lắm, khi bạn nhấn vào một ô, nếu có định dạng là ngày tháng thì trên thanh công thức sẽ hiện lên đúng định dạng ngày tháng của máy, xem lại định dạng ngày tháng của máy rồi so sánh lại gía trị trên thanh công thức và giá trị ở ô hiện tại bạn sẽ biết excel đã định dạng ngày tháng như thế nào ở ô đó (phần nào là ngày, phần nào là tháng), hoặc bạn gõ vào một ô trống công thức =day(ô cần xem định dạng), sẽ biết được phần ngày là phần nào.
 
Đơn giản lắm, khi bạn nhấn vào một ô, nếu có định dạng là ngày tháng thì trên thanh công thức sẽ hiện lên đúng định dạng ngày tháng của máy
Nếu là format cells, cù tõm (custom) thì sao????
xem lại định dạng ngày tháng của máy rồi so sánh lại gía trị trên thanh công thức và giá trị ở ô hiện tại bạn sẽ biết excel đã định dạng ngày tháng như thế nào ở ô đó (phần nào là ngày, phần nào là tháng), hoặc bạn gõ vào một ô trống công thức =day(ô cần xem định dạng), sẽ biết được phần ngày là phần nào.
Khi ngày = tháng thì mần kiểu gì?
Ví dụ ngày 11/11/2018 thì đâu là ngày, đâu là tháng?
 
Nếu là format cells, cù tõm (custom) thì sao????
format->custom cũng được, nhưng với dữ liệu gồm nhiều ô cần xem xét mà lộn xộn ngày tháng thì hơi bất tiện.
Khi ngày = tháng thì mần kiểu gì?
Ví dụ ngày 11/11/2018 thì đâu là ngày, đâu là tháng?
ngày=tháng thì biết ngay ngày tháng là gì mà (ở đây yêu cầu xem ngày là gì, tháng là gì chứ không phải là xem định dạng!)
 
ngày=tháng thì biết ngay ngày tháng là gì mà (ở đây yêu cầu xem ngày là gì, tháng là gì chứ không phải là xem định dạng!)
Một hồi lại lẫn lộn rồi.. Chưa rõ người ta định dạng kiểu nào thì sao xác định được thành phần nào là ngày, thành phần nào là tháng, để xem ngày đẹp?
 

Bài viết mới nhất

Back
Top Bottom