Trong môi trường làm việc với dữ liệu, Microsoft Excel luôn là công cụ “đắc lực” không thể thiếu. Tuy nhiên, không phải mọi hàm người dùng mong muốn đều có sẵn trong Excel. Một trong những hàm gây tranh cãi, thường được nhắc đến nhưng lại không có trong danh sách hàm chuẩn của Excel là DATEDIF. Bài viết này sẽ đi sâu vào nguyên nhân Excel không có hàm DATEDIF, giải thích cách hoạt động của hàm này, đưa ra các phương pháp thay thế hiệu quả, và hướng dẫn chi tiết cách áp dụng chúng trong thực tế. Ngoài ra, chúng ta sẽ khám phá một số mẹo và thủ thuật nâng cao giúp bạn tính toán khoảng thời gian một cách chính xác và nhanh chóng, dù không có DATEDIF trong bộ công cụ.
Có thể bạn quan tâm: Cách Xuất File Excel Sang Pdf: Hướng Dẫn Chi Tiết Từ A Đến Z
1. DATEDIF là gì? Lịch sử và nguyên nhân không có trong Excel hiện đại
1.1 Định nghĩa và chức năng cơ bản
DATEDIF (viết tắt của Date Difference) là hàm được thiết kế để tính khoảng cách giữa hai ngày theo các đơn vị: năm, tháng, ngày, hoặc các kết hợp như “ym” (số tháng còn lại sau khi trừ các năm). Cú pháp cơ bản:
=DATEDIF(start_date, end_date, unit)
- start_date: ngày bắt đầu.
- end_date: ngày kết thúc.
- unit: đơn vị tính ( “Y”, “M”, “D”, “MD”, “YM”, “YD”).
Ví dụ: =DATEDIF("01/01/2026","31/12/2026","Y") trả về 2 (số năm trọn vẹn).
1.2 Lịch sử xuất hiện
DATEDIF xuất hiện lần đầu trong Excel 2000 (thậm chí còn có trong Excel 97) và được tài liệu Microsoft hỗ trợ như một hàm “có sẵn”. Tuy nhiên, sau các phiên bản Excel 2007, Microsoft quyết định gỡ bỏ hàm này khỏi danh sách hàm chuẩn và tài liệu chính thức. Lý do không được công bố chi tiết, nhưng có một số giả thuyết:
- Tính không đồng nhất: DATEDIF có một số “điểm thắt” trong cách tính, ví dụ
MD(ngày còn lại) không luôn cho kết quả như mong đợi khi ngày bắt đầu là ngày cuối tháng. - Khả năng thay thế: Các hàm khác như
YEARFRAC,NETWORKDAYS,EDATE,EOMONTHcó thể thực hiện các tính toán tương tự, dù phức tạp hơn. - Bảo trì và lỗi: Việc duy trì một hàm có nhiều trường hợp ngoại lệ khiến Microsoft quyết định không quảng bá nữa.
1.3 Hậu quả đối với người dùng
- Thiếu tài liệu: Khi người dùng tìm kiếm trên Internet, họ thường gặp các bài viết cũ, không chính thức, gây nhầm lẫn.
- Không hiện trong danh sách hàm: Khi gõ công thức, Excel không cung cấp gợi ý cho DATEDIF, làm cho người mới khó nhớ và áp dụng.
- Không tương thích: Khi chia sẻ file Excel có hàm DATEDIF, người nhận dùng phiên bản Excel không hỗ trợ sẽ nhận được lỗi
#NAME?.
Do đó, hiểu rõ cách thay thế và tự xây dựng công thức là yếu tố then chốt để tránh rủi ro và duy trì tính tương thích.
Có thể bạn quan tâm: Cách Tải Excel Về Laptop: Hướng Dẫn Chi Tiết Bước Đầu Đặt Của Bạn
2. Cấu trúc và nguyên tắc tính của DATEDIF
Trước khi đưa ra các giải pháp thay thế, chúng ta cần nắm vững cách DATEDIF tính toán từng loại unit. Điều này giúp tái tạo logic một cách chính xác.
| Unit | Mô tả | Ví dụ |
|---|---|---|
| Y | Số năm trọn vẹn giữa hai ngày. | =DATEDIF("01/01/2026","31/12/2026","Y") → 2 |
| M | Số tháng trọn vẹn giữa hai ngày. | =DATEDIF("15/01/2026","10/04/2026","M") → 2 |
| D | Số ngày (bao gồm cả ngày cuối) giữa hai ngày. | =DATEDIF("01/01/2026","10/01/2026","D") → 9 |
| MD | Số ngày còn lại sau khi đã trừ các tháng và năm. | =DATEDIF("31/01/2026","28/02/2026","MD") → 28 |
| YM | Số tháng còn lại sau khi đã trừ các năm. | =DATEDIF("15/01/2026","10/04/2026","YM") → 2 |
| YD | Số ngày còn lại sau khi đã trừ các năm. | =DATEDIF("15/02/2026","10/03/2026","YD") → 23 |
Lưu ý: MD, YM, YD có thể cho ra giá trị “âm” trong một số trường hợp nếu ngày bắt đầu lớn hơn ngày kết thúc trong cùng tháng hoặc năm, do cách tính dựa trên “độ trễ” của ngày.
Có thể bạn quan tâm: Cách Tạo Google Docs Và Google Sheets (excel): Hướng Dẫn Chi Tiết Từ A Đến Z
3. Các phương pháp thay thế DATEDIF trong Excel hiện đại
3.1 Sử dụng hàm YEARFRAC (tính thập phân)
YEARFRAC(start_date, end_date, basis) trả về số năm dưới dạng thập phân, dựa trên các chuẩn ngày (basis). Đây là cách nhanh chóng để tính khoảng cách năm:
=INT(YEARFRAC(A2, B2, 1)) // Số năm trọn vẹn
=INT(YEARFRAC(A2, B2, 1)12) // Số tháng trọn vẹn
- basis = 1: Ngày thực tế/360 (thông thường dùng cho tính lãi suất).
- basis = 0: Thực tế/Actual (đúng hơn cho tính tuổi).
Ưu điểm: Đơn giản, không cần nhiều công thức lồng nhau.
Nhược điểm: Không cung cấp các giá trị MD, YM, YD riêng biệt.
3.2 Kết hợp hàm DATE, YEAR, MONTH, DAY
Đây là cách “tự tay” tái hiện logic của DATEDIF bằng các hàm cơ bản.
3.2.1 Tính số năm trọn vẹn (đơn vị “Y”)
=IF(MONTH(B2)<MONTH(A2), YEAR(B2)-YEAR(A2)-1, IF(AND(MONTH(B2)=MONTH(A2), DAY(B2)<DAY(A2)), YEAR(B2)-YEAR(A2)-1, YEAR(B2)-YEAR(A2)))
Giải thích: Nếu tháng của ngày kết thúc < tháng của ngày bắt đầu, hoặc tháng bằng nhưng ngày kết thúc < ngày bắt đầu, thì giảm 1 năm.
3.2.2 Tính số tháng trọn vẹn (đơn vị “M”)
= (YEAR(B2)-YEAR(A2))12 + MONTH(B2)-MONTH(A2) - IF(DAY(B2)<DAY(A2),1,0)
Nếu ngày kết thúc < ngày bắt đầu, trừ 1 tháng.
3.2.3 Tính số ngày trọn vẹn (đơn vị “D”)
= B2 - A2
Đơn giản, vì Excel lưu ngày dưới dạng số nguyên.
3.2.4 Tính MD (ngày còn lại)
= DAY(B2) - DAY(A2) + IF(DAY(B2)<DAY(A2), DAY(EOMONTH(A2,0))-DAY(A2)+1,0)
Công thức phức tạp hơn nhưng mô phỏng cách DATEDIF tính MD.
3.2.5 Tính YM (tháng còn lại)
= MOD(MONTH(B2)-MONTH(A2)+(YEAR(B2)-YEAR(A2))12,12)
Hoặc:
= (MONTH(B2)-MONTH(A2) - IF(DAY(B2)<DAY(A2),1,0) + 12) MOD 12
3.2.6 Tính YD (ngày còn lại)
= B2 - DATE(YEAR(A2)+INT((MONTH(B2)-MONTH(A2)+(DAY(B2)-DAY(A2))/30)/12), MONTH(A2), DAY(A2))
Hoặc sử dụng DATE để tạo ngày “cùng ngày tháng” sau khi trừ các năm.
3.3 Tạo hàm tùy chỉnh (User Defined Function – UDF) bằng VBA
Nếu bạn thường xuyên cần DATEDIF, tạo một hàm VBA là cách nhanh nhất.
Function DATEDIF_UDF(StartDate As Date, EndDate As Date, Unit As String) As Variant Dim y As Long, m As Long, d As Long If EndDate < StartDate Then DATEDIF_UDF = CVErr(xlErrNum) Exit Function End If Select Case UCase(Unit) Case "Y" y = Year(EndDate) - Year(StartDate) If Month(EndDate) < Month(StartDate) Or _ (Month(EndDate) = Month(StartDate) And Day(EndDate) < Day(StartDate)) Then y = y - 1 DATEDIF_UDF = y Case "M" m = (Year(EndDate) - Year(StartDate)) 12 + Month(EndDate) - Month(StartDate) If Day(EndDate) < Day(StartDate) Then m = m - 1 DATEDIF_UDF = m Case "D" DATEDIF_UDF = EndDate - StartDate Case "MD" d = Day(EndDate) - Day(StartDate) If d < 0 Then d = Day(DateSerial(Year(EndDate), Month(EndDate), 0)) + d End If DATEDIF_UDF = d Case "YM" m = Month(EndDate) - Month(StartDate) If Day(EndDate) < Day(StartDate) Then m = m - 1 If m < 0 Then m = m + 12 DATEDIF_UDF = m Case "YD" d = EndDate - DateSerial(Year(StartDate), Month(EndDate), Day(EndDate)) DATEDIF_UDF = d Case Else DATEDIF_UDF = CVErr(xlErrValue) End Select
End Function
Sau khi lưu macro, bạn có thể dùng trong ô:
=DATEDIF_UDF(A2,B2,"Y")
Ưu điểm: Gần giống DATEDIF gốc, dễ sử dụng, không lo lỗi #NAME?.
Nhược điểm: Cần bật macro, không hoạt động trong môi trường chỉ cho phép file .xlsx (không .xlsm).
3.4 Sử dụng Power Query (Get & Transform)

Có thể bạn quan tâm: Dấu Xấp Xỉ Trong Excel: Khám Phá, Ứng Dụng Và Mẹo Tối Ưu
Power Query cung cấp các hàm ngày tháng mạnh mẽ như Duration.Days, Duration.TotalMonths, Duration.TotalYears. Khi import dữ liệu vào Power Query:
let Source = Excel.CurrentWorkbook(){Name="Table1"}Content, AddedYears = Table.AddColumn(Source, "Years", each Duration.TotalYears(EndDate - StartDate)), AddedMonths = Table.AddColumn(AddedYears, "Months", each Duration.TotalMonths(EndDate - StartDate)), AddedDays = Table.AddColumn(AddedMonths, "Days", each Duration.Days(EndDate - StartDate))
in AddedDays
Sau khi tải lại vào Excel, bạn có thể làm tròn hoặc lấy phần nguyên để mô phỏng DATEDIF.
Ưu điểm: Tính năng tự động cập nhật khi dữ liệu thay đổi, không cần VBA.
Nhược điểm: Đòi hỏi người dùng biết cách dùng Power Query, không phù hợp cho công thức nhanh trong ô.
4. Ứng dụng thực tiễn: Các tình huống thường gặp
4.1 Tính tuổi nhân viên
Bạn có một bảng nhân viên với ngày sinh (DOB) và muốn tính tuổi hiện tại.
=INT(YEARFRAC(DOB, TODAY(), 1))
Hoặc dùng công thức tự tạo:
=IF(MONTH(TODAY())<MONTH(DOB), YEAR(TODAY())-YEAR(DOB)-1, IF(AND(MONTH(TODAY())=MONTH(DOB), DAY(TODAY())<DAY(DOB)), YEAR(TODAY())-YEAR(DOB)-1, YEAR(TODAY())-YEAR(DOB)))
4.2 Tính thời gian làm việc (kỳ hạn hợp đồng)
Giả sử hợp đồng bắt đầu StartDate, kết thúc EndDate. Bạn muốn hiển thị năm, tháng, ngày còn lại.
=INT(YEARFRAC(StartDate, EndDate, 1)) & " năm " &
MOD(INT(YEARFRAC(StartDate, EndDate, 1)12),12) & " tháng " &
DATEDIF_UDF(StartDate, EndDate, "MD") & " ngày"
Kết quả: “2 năm 5 tháng 12 ngày”.
4.3 Tính số ngày làm việc thực tế (loại trừ ngày nghỉ)
Sử dụng hàm NETWORKDAYS kết hợp YEARFRAC:
=NETWORKDAYS(StartDate, EndDate, Holidays)
Nếu muốn tính số tháng làm việc:
=INT((NETWORKDAYS(StartDate, EndDate, Holidays))/20) // Giả sử 20 ngày làm việc / tháng
4.4 Báo cáo tuổi trung bình của khách hàng
Khi có danh sách ngày sinh, dùng công thức mảng (Excel 365) để tính tuổi trung bình:
=AVERAGE(INT(YEARFRAC(DOBColumn, TODAY(), 1)))
4.5 Tính “độ tuổi” trong ngày (chỉ tính năm và tháng)
Nếu yêu cầu hiển thị “X năm Y tháng” mà không cần ngày, công thức:
=DATEDIF_UDF(A2,B2,"Y") & " năm " & DATEDIF_UDF(A2,B2,"YM") & " tháng"
Hoặc không dùng VBA:
=INT(YEARFRAC(A2,B2,1)) & " năm " &
MOD(INT(YEARFRAC(A2,B2,1)12),12) & " tháng"
5. So sánh độ chính xác và hiệu suất
| Phương pháp | Độ chính xác | Độ phức tạp | Tương thích | Ghi chú |
|---|---|---|---|---|
| DATEDIF gốc | 100% (đúng chuẩn) | Thấp | 2000‑2003 (có) | Không có trong Excel mới |
| YEARFRAC | Cao (đến 2 chữ thập) | Thấp | Tất cả | Không cung cấp MD, YM, YD |
| Công thức tự tạo (YEAR, MONTH, DAY) | Cao (đúng tuyệt đối nếu cẩn thận) | Trung bình | Tất cả | Cần kiểm tra các trường hợp “âm” |
| VBA UDF | 100% (giống DATEDIF) | Thấp (sử dụng macro) | Excel có macro | Không hoạt động trong môi trường web/Excel Online |
| Power Query | Cao (đúng) | Trung bình (cần hiểu M) | Excel 2026+ | Thích hợp cho khối lượng dữ liệu lớn |
Hiệu suất: Với hàng nghìn dòng, công thức mảng (YEARFRAC) nhanh hơn so với UDF VBA vì VBA chạy từng ô một. Power Query cũng tối ưu cho dữ liệu lớn vì xử lý ở mức engine.
6. Những lưu ý quan trọng khi thay thế DATEDIF
- Kiểm tra định dạng ngày: Excel có thể nhận ngày dưới dạng chuỗi, số serial hoặc văn bản. Đảm bảo các ô chứa ngày được định dạng là Date.
- Xử lý ngày tháng năm nhuận: Khi tính
MDhoặcYM, ngày 29/02 có thể gây ra “âm” nếu không xử lý đúng. Sử dụngEOMONTHđể lấy ngày cuối tháng một cách an toàn. - Tránh lỗi #VALUE!: Khi một trong các ngày bị để trống, các công thức sẽ trả về lỗi. Có thể dùng
IFERRORhoặc kiểm traISBLANK. - Đối với Excel Online: VBA không khả dụng, vì vậy ưu tiên dùng YEARFRAC hoặc Power Query.
- Kiểm tra timezone: Nếu dữ liệu được nhập từ nguồn hệ thống khác (SQL, API), có thể có thời gian kèm giờ. Dùng
INTđể loại bỏ phần giờ nếu chỉ cần ngày.
7. Hướng dẫn chi tiết: Tạo hàm DATEDIF tùy chỉnh trong Excel 365 (không VBA)
Với Excel 365, bạn có thể dùng LAMBDA để tạo hàm tùy chỉnh mà không cần VBA.
7.1 Định nghĩa hàm DATEDIF_LAMBDA
- Mở Formulas → Name Manager.
- Nhấn New, đặt tên:
DATEDIF_LAMBDA. - Trong Refers to, nhập công thức:
=LAMBDA(start_date, end_date, unit, LET( sY, YEAR(start_date), sM, MONTH(start_date), sD, DAY(start_date), eY, YEAR(end_date), eM, MONTH(end_date), eD, DAY(end_date), diffY, eY - sY - IF(OR(eM < sM, AND(eM = sM, eD < sD)),1,0), diffM, (eY - sY)12 + eM - sM - IF(eD < sD,1,0), diffD, end_date - start_date, diffMD, IF(eD >= sD, eD - sD, eD + DAY(EOMONTH(start_date,0)) - sD), diffYM, MOD(eM - sM - IF(eD < sD,1,0),12), diffYD, end_date - DATE(eY, sM, sD), SWITCH(UPPER(unit), "Y", diffY, "M", diffM, "D", diffD, "MD", diffMD, "YM", diffYM, "YD", diffYD, NA() ) )
)
- Nhấn OK.
7.2 Sử dụng hàm
=DATEDIF_LAMBDA(A2,B2,"Y")
=DATEDIF_LAMBDA(A2,B2,"MD")
Ưu điểm:
– Không cần macro, hoạt động trên Excel Online.
– Được lưu trong workbook, dễ chia sẻ.
Nhược điểm:
– Chỉ khả dụng trong Excel 365/2026 trở lên (có hỗ trợ LAMBDA).
8. Kết luận
Mặc dù DATEDIF không còn là một hàm chính thức trong các phiên bản Excel hiện đại, nhưng nhu cầu tính khoảng thời gian giữa hai ngày vẫn rất phổ biến trong công việc hàng ngày. Bằng cách hiểu rõ nguyên tắc tính toán của DATEDIF, bạn có thể:
- Sử dụng các hàm chuẩn như
YEARFRAC,NETWORKDAYS,EDATEđể thay thế cho các trường hợp đơn giản. - Kết hợp các hàm cơ bản (
YEAR,MONTH,DAY,DATE,EOMONTH) để tự xây dựng công thức chính xác cho từng đơn vị. - Tạo hàm tùy chỉnh bằng VBA hoặc LAMBDA, giúp duy trì cú pháp quen thuộc mà không lo lỗi
#NAME?. - Áp dụng Power Query cho các tập dữ liệu lớn, đồng thời tận dụng khả năng tính toán thời gian mạnh mẽ của ngôn ngữ M.
Cuối cùng, việc lựa chọn giải pháp phù hợp phụ thuộc vào độ phức tạp, khối lượng dữ liệu, và môi trường làm việc (desktop, web, macro). Khi nắm vững các công cụ trên, bạn sẽ không còn bị “bị mắc kẹt” vì thiếu hàm DATEDIF, mà thay vào đó, có thể linh hoạt xây dựng các công thức phù hợp, chính xác và duy trì tính tương thích lâu dài cho các file Excel của mình.
Hãy thử áp dụng những phương pháp này vào dự án thực tế của bạn và chia sẻ kết quả để cộng đồng Excel ngày càng mạnh mẽ hơn!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
