Bí ẩn hàm DATEDIF đã có lời giải!

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
Chúng ta đã biết hàm DATEDIF sử dụng để tính khoảng thời gian giữa 2 mốc thời gian theo ngày, tháng hoặc năm. Tuy nhiên nó bị ẩn, không hiển thị trong danh sách và cũng không được hỗ trợ gợi nhớ như các hàm khác. Đầu tiên tôi cũng nghĩ là sai sót, nhưng đến Excel 2016 vẫn bị vậy. Hóa ra ra nguyên nhân ở đây:

https://support.office.com/en-us/article/DATEDIF-function-25dba1a4-2812-480b-84dd-8b32a451b35c

Nguyên nhân: Hàm DATEDIF được Excel hỗ trợ các workbook cũ hơn từ Lotus 1-2-3. Có thể kết quả tính toán không chính xác ở một số tình huống (khi sử dụng tham số “d” hoặc “m”).
Chúng ta thử tính khoảng thời gian ngày 1/5/2017 đến 31/5/2017. Hàm DATEDIF trả về 0 tháng.
 
Lần chỉnh sửa cuối:
Chúng ta đã biết hàm DATEDIF sử dụng để tính khoảng thời gian giữa 2 mốc thời gian theo ngày, tháng hoặc năm. Tuy nhiên nó bị ẩn, không hiển thị trong danh sách và cũng không được hỗ trợ gợi nhớ như các hàm khác. Đầu tiên tôi cũng nghĩ là sai sót, nhưng đến Excel 2016 vẫn bị vậy. Hóa ra ra nguyên nhân ở đây:

https://support.office.com/en-us/article/DATEDIF-function-25dba1a4-2812-480b-84dd-8b32a451b35c

Nguyên nhân: Hàm DATEDIF được Excel hỗ trợ các workbook cũ hơn từ Lotus 1-2-3. Có thể kết quả tính toán không chính xác ở một số tình huống (khi sử dụng tham số “d” hoặc “m”).
Chúng ta thử tính khoảng thời gian ngày 1/5/2017 đến 31/5/2017. Hàm DATEDIF trả về 0 tháng.
Mới nghe cũng giật mình nên thử, kết quả thế này:

Capture.JPG


Hổng thấy bị vụ =0 gì cả
Còn chuyện "bí mật" gì đó của DATEDIF thì trên GPE đã đề cập lâu rồi thầy à!
 

Do trong Lotus mà không hỗ trợ mặc dù vẫn dùng được. Ngày trước mò ở bên ngoài, mà bâycó trong Help chính thức của Microsoft 2016 rồi bác.
Mặt khác nó bị cảnh báo về không chính xác ở 1 số tình huống.
 
Lần chỉnh sửa cuối:
vậy là 2017- 2009 = ~~ 10 năm ...??!!! vậy đâu keo là bí ẩn nữa:D
Kiến thức trên GPE mình nhiều lắm, có khi không nhớ hết được một chủ đề nào đó đã có hay chưa đâu. Nhưng tôi tin là gần như chủ đề nào có đều có cả
Có thể nói www.giaiphapexcel.com là trang web hàng đầu về Excel tại Việt Nam
 
Nguyên tắc tính toán của DATEDIF là phải TRÒN NĂM, TRÒN THÁNG, TRÒN NGÀY (tính luôn cả giờ phút giây luôn đấy)
Vậy dữ liệu như trên ra 0 tháng thì trúng hay trật?
Đúng anh ạ, em thấy anh gắn công thức sai so với bài #1 thôi ạ!!!:):)!!!
 
Chúng ta đã biết hàm DATEDIF sử dụng để tính khoảng thời gian giữa 2 mốc thời gian theo ngày, tháng hoặc năm. Tuy nhiên nó bị ẩn, không hiển thị trong danh sách và cũng không được hỗ trợ gợi nhớ như các hàm khác. Đầu tiên tôi cũng nghĩ là sai sót, nhưng đến Excel 2016 vẫn bị vậy. Hóa ra ra nguyên nhân ở đây:

https://support.office.com/en-us/article/DATEDIF-function-25dba1a4-2812-480b-84dd-8b32a451b35c

Nguyên nhân: Hàm DATEDIF được Excel hỗ trợ các workbook cũ hơn từ Lotus 1-2-3. Có thể kết quả tính toán không chính xác ở một số tình huống (khi sử dụng tham số “d” hoặc “m”).
Chúng ta thử tính khoảng thời gian ngày 1/5/2017 đến 31/5/2017. Hàm DATEDIF trả về 0 tháng.
Thấy vui vui cũng muốn góp lời cùng anh Hướng.

Đúng như anh nói: Hàm DATEDIF() có một số trường hợp không chính xác. Ví dụ:
  • A1=01/05/2017; A2=31/05/2017; thì =DATEDIF(A1,A2,"m") = 0
  • nhưng nếu A1=01/05/2017; A2=01/06/2017; =DATEDIF(A1,A2,"m") = 1
  • Để ý thấy rằng nếu lấy cùng ngày đầu tháng mà dùng hàm DATEDIF(,..) với đối số "m" hoặc "d" thậm chí "md" sẽ chính xác hơn lấy cùng ngày cuối tháng. Ví dụ:
    • A1=30/04/2017 và A2=31/05/2017, thì dùng "d"= 31 ngày, dùng "m"=1 tháng, dùng "md"=1 ngày!!?
    • Hay, A1=31/05/2017 và A2=30/06/2017, thì dùng "d"= 30 ngày, dùng "m"=0 tháng, dùng "md"=30 ngày!?
    • Nhưng nếu đầu tháng thì khác, Vd: A1=01/04/2017 và A2=01/05/2017, thì dùng "d"= 30 ngày, dùng "m"=1 tháng, dùng "md"=0 ngày; Hay, A1=01/05/2017 và A2=01/06/2017, thì dùng "d"= 31 ngày, dùng "m"=1 tháng, dùng "md"=0 ngày.
Do vô tình trong lúc giải bài cho các bạn tính phép năm mới bị điều này "hành hạ", cứ hễ tính như anh nói thì tính phép năm bị sai ngay:
(tham khảo: http://www.giaiphapexcel.com/diendan/threads/cùng-một-công-thức-nhưng-cho-ra-2-kết-quả-khác-nhau.127903/#post-800997)

Cho nên khi đụng đến DATEDIF() dùng đối số "m" thường mình đưa về so (nếu có thể) hai ngày đầu tháng với nhau.

Chúc anh em ngày thiệt vui.
 

Đúng là em đã từng trao đổi, lâu không để ý :)
Chỉ biết là ngày trước khai thác từ nguồn không chính thức, giờ thì Microsoft có đề cập một cách chính thống, nhưng thực tế hàm vẫn bị ẩn trong Excel.
 
Thấy vui vui cũng muốn góp lời cùng anh Hướng.

Đúng như anh nói: Hàm DATEDIF() có một số trường hợp không chính xác. Ví dụ:
  • A1=01/05/2017; A2=31/05/2017; thì =DATEDIF(A1,A2,"m") = 0
  • nhưng nếu A1=01/05/2017; A2=01/06/2017; =DATEDIF(A1,A2,"m") = 1
  • Để ý thấy rằng nếu lấy cùng ngày đầu tháng mà dùng hàm DATEDIF(,..) với đối số "m" hoặc "d" thậm chí "md" sẽ chính xác hơn lấy cùng ngày cuối tháng. Ví dụ:
    • A1=30/04/2017 và A2=31/05/2017, thì dùng "d"= 31 ngày, dùng "m"=1 tháng, dùng "md"=1 ngày!!?
    • Hay, A1=31/05/2017 và A2=30/06/2017, thì dùng "d"= 30 ngày, dùng "m"=0 tháng, dùng "md"=30 ngày!?
    • Nhưng nếu đầu tháng thì khác, Vd: A1=01/04/2017 và A2=01/05/2017, thì dùng "d"= 30 ngày, dùng "m"=1 tháng, dùng "md"=0 ngày; Hay, A1=01/05/2017 và A2=01/06/2017, thì dùng "d"= 31 ngày, dùng "m"=1 tháng, dùng "md"=0 ngày.
Do vô tình trong lúc giải bài cho các bạn tính phép năm mới bị điều này "hành hạ", cứ hễ tính như anh nói thì tính phép năm bị sai ngay:
(tham khảo: http://www.giaiphapexcel.com/diendan/threads/cùng-một-công-thức-nhưng-cho-ra-2-kết-quả-khác-nhau.127903/#post-800997)

Cho nên khi đụng đến DATEDIF() dùng đối số "m" thường mình đưa về so (nếu có thể) hai ngày đầu tháng với nhau.

Chúc anh em ngày thiệt vui.

Mấy tình huống của bác chuẩn và hay thật. Mai em trao đổi thêm sau.
 
Thấy vui vui cũng muốn góp lời cùng anh Hướng.

Đúng như anh nói: Hàm DATEDIF() có một số trường hợp không chính xác. Ví dụ:
  • A1=01/05/2017; A2=31/05/2017; thì =DATEDIF(A1,A2,"m") = 0
  • nhưng nếu A1=01/05/2017; A2=01/06/2017; =DATEDIF(A1,A2,"m") = 1
Cái này giống như tính tuổi vậy! "ĐỦ" thì mới tính. Trường hợp trên phải ráng ngủ cho qua 12 giờ đêm thì nó mới tính 1 tháng
Tôi thấy rất hợp lý chứ không thể gọi là không chính xác được
Còn chuyện ta áp dụng trong những trường hợp cụ thể thì tự ta phải suy luận, biến đổi sao cho phù hợp thì thôi
 
Em thấy trên mạng chỉ có nói datedif không chính xác ở một số trường hợp trong phiên bản excel 2007 là do lỗi của phiên bản đó, còn các vấn đề khác thì không thấy đề cập đến!!!
 
Web KT
Back
Top Bottom