Cách Tự Động Cập Nhật Ngày Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao

Mở đầu

Trong môi trường làm việc hiện đại, việc quản lý dữ liệu trên Excel đã trở thành một phần không thể thiếu. Đặc biệt, khi bạn làm việc với các bảng tính có yêu cầu ghi lại thời gian, ngày tháng một cách tự động, việc “auto update date” (tự động cập nhật ngày) sẽ giúp tiết kiệm thời gian, giảm thiểu sai sót và nâng cao tính chuyên nghiệp. Bài viết này sẽ cung cấp cho bạn toàn bộ kiến thức cần thiết để tự động cập nhật ngày trong Excel, bao gồm:

  1. Các hàm cơ bản: TODAY, NOW, DATE, TEXT.
  2. Sử dụng VBA (Macro) để tự động cập nhật ngày.
  3. Áp dụng định dạng có điều kiện để hiển thị ngày cập nhật.
  4. Kỹ thuật “cập nhật ngày khi mở file”.
  5. Giải pháp cho các trường hợp đặc biệt: ngày tạo, ngày sửa, ngày nhập dữ liệu.
  6. Mẹo tối ưu hoá và tránh lỗi phổ biến.

Sau khi đọc xong, bạn sẽ có thể tự tin xây dựng các bảng tính tự động ghi lại ngày tháng một cách linh hoạt và hiệu quả.

1. Hiểu Rõ Các Hàm Ngày Tháng Cơ Bản Trong Excel

1.1. Hàm TODAY()

  • Cú pháp: =TODAY()
  • Mô tả: Trả về ngày hiện tại (không kèm thời gian) dựa trên đồng hồ hệ thống của máy tính.
  • Đặc điểm:
  • Khi bạn mở lại file, hàm này sẽ tự động cập nhật ngày mới.
  • Không cần tham số, luôn trả về giá trị ngày hiện tại.

Ví dụ: Nếu hôm nay là 25/06/2026, công thức =TODAY() sẽ hiển thị 25/06/2026.

1.2. Hàm NOW()

  • Cú pháp: =NOW()
  • Mô tả: Trả về ngày và thời gian hiện tại (định dạng ngày giờ).
  • Đặc điểm:
  • Cập nhật mỗi khi workbook được tính toán lại (recalc).
  • Thích hợp khi bạn cần biết thời gian chi tiết (giờ, phút, giây).

Ví dụ: =NOW() có thể trả về 25/06/2026 14:35.

1.3. Hàm DATE(year, month, day)

  • Cú pháp: =DATE(2026,6,25)
  • Mô tả: Tạo một giá trị ngày dựa trên các thành phần năm, tháng, ngày.
  • Ứng dụng:
  • Khi bạn muốn tạo ngày cố định trong công thức.
  • Kết hợp với các hàm khác để tính toán ngày.

1.4. Hàm TEXT(value, format_text)

  • Cú pháp: =TEXT(TODAY(),"dd/mm/yyyy")
  • Mô tả: Chuyển đổi giá trị ngày thành chuỗi theo định dạng tùy chỉnh.
  • Lưu ý: Khi cần hiển thị ngày dưới dạng văn bản (ví dụ: “Ngày 25 tháng 06 năm 2026”).

2. Tự Động Cập Nhật Ngày Khi Nhập Dữ Liệu

2.1. Sử Dụng Tính Năng “Ctrl + ;” và “Ctrl + Shift + ;”

  • Ctrl + ;: Chèn ngày hiện tại (tĩnh) vào ô.
  • Ctrl + Shift + ;: Chèn thời gian hiện tại (tĩnh) vào ô.

Lưu ý: Đây là cách tĩnh, không tự động cập nhật khi mở lại file. Tuy nhiên, kết hợp với VBA có thể biến chúng thành động.

2.2. Dùng Công Thức Kết Hợp IF và TODAY

Giả sử bạn muốn ghi lại ngày khi một ô A2 được nhập dữ liệu (ví dụ: nhập “Xong”):

=IF(A2<>"", IF(B2="", TODAY(), B2), "")
  • Giải thích:
  • Nếu A2 không rỗng và B2 chưa có giá trị, sẽ ghi ngày hiện tại.
  • Nếu B2 đã có giá trị (đã ghi ngày trước), giữ nguyên.
  • Nếu A2 rỗng, B2 để trống.

Công thức này không cập nhật lại ngày khi mở file, vì ngày đã được “cố định” trong ô B2.

3. Sử Dụng VBA Để Tự Động Cập Nhật Ngày

3.1. Khi Mở Workbook (Workbook_Open)

Bạn muốn mỗi khi mở file, ô A1 luôn hiển thị ngày hiện tại.

Private Sub Workbook_Open() Worksheets("Sheet1").Range("A1").Value = Date
End Sub
  • Giải thích: Date trả về ngày hiện tại, không kèm thời gian.
  • Lưu ý: Đặt macro này trong ThisWorkbook (không phải Module).

3.2. Khi Thay Đổi Dữ Liệu (Worksheet_Change)

Cập nhật ngày tự động trong cột B khi người dùng nhập dữ liệu vào cột A.

Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Target, Me.Range("A:A")) ' Kiểm tra cột A If Not rng Is Nothing Then Application.EnableEvents = False Dim cell As Range For Each cell In rng If cell.Value <> "" Then cell.Offset(0, 1).Value = Date ' Ghi ngày vào cột B Else cell.Offset(0, 1).ClearContents ' Xóa ngày nếu ô A trống End If Next cell Application.EnableEvents = True End If
End Sub
  • Điểm quan trọng: Tắt EnableEvents để tránh vòng lặp vô hạn khi macro thay đổi ô.

3.3. Khi Lưu File (Workbook_BeforeSave)

Nếu bạn muốn lưu ngày “cập nhật lần cuối” trong ô C1:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Worksheets("Sheet1").Range("C1").Value = Now
End Sub
  • Kết quả: Mỗi lần lưu, C1 sẽ hiển thị thời gian và ngày hiện tại.

3.4. Tạo Macro Đánh Dấu Thời Gian (Timestamp) Cho Nhiều Ô

Nếu bạn muốn mỗi khi người dùng thay đổi bất kỳ ô nào trong một vùng (ví dụ B2:B100), một ô tương ứng ở cột C sẽ nhận timestamp.

Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Target, Me.Range("B2:B100")) If Not rng Is Nothing Then Application.EnableEvents = False Dim cell As Range For Each cell In rng cell.Offset(0, 1).Value = Now ' Ghi timestamp vào cột C Next cell Application.EnableEvents = True End If
End Sub

4. Định Dạng Có Điều Kiện (Conditional Formatting) Để Highlight Ngày

4.1. Highlight Ngày Hôm Nay

Bạn muốn các ô chứa ngày hôm nay được tô màu xanh.

  1. Chọn vùng cần áp dụng (ví dụ A2:A100).
  2. Vào Home → Conditional Formatting → New Rule → Use a formula.
  3. Nhập công thức:
=AND(A2<>"", A2=TODAY())
  1. Chọn định dạng (màu nền xanh, chữ trắng).

4.2. Highlight Ngày Cũ Hơn 30 Ngày

Auto Update Date In Excel
Auto Update Date In Excel
=A2< (TODAY()-30)

Áp dụng màu nền đỏ để cảnh báo dữ liệu đã cũ.

5. Các Trường Hợp Đặc Biệt

5.1. Ghi Ngày Tạo (Creation Date) Cho Mỗi Dòng

Excel không có “date created” cho từng dòng, nhưng bạn có thể dùng VBA:

Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Target, Me.Range("A:A")) ' Cột A là cột nhập dữ liệu If Not rng Is Nothing Then Application.EnableEvents = False Dim cell As Range For Each cell In rng If cell.Value <> "" Then If cell.Offset(0, 4).Value = "" Then ' Giả sử cột E lưu ngày tạo cell.Offset(0, 4).Value = Date End If End If Next cell Application.EnableEvents = True End If
End Sub
  • Cột E sẽ được ghi ngày tạo lần đầu khi người dùng nhập dữ liệu ở cột A. Nếu dữ liệu được sửa lại, ngày tạo không thay đổi.

5.2. Ghi Ngày Sửa (Last Modified Date) Cho Mỗi Dòng

Thay đổi một chút trong macro trên:

cell.Offset(0, 5).Value = Now ' Ghi vào cột F mỗi khi ô A thay đổi

Cột F sẽ luôn chứa thời gian sửa cuối cùng.

5.3. Ngày Tự Động Cập Nhật Khi Dòng Được Đánh Dấu Hoàn Thành

Giả sử cột D là “Trạng thái” (có giá trị “Hoàn thành” hoặc “Chưa”). Khi chuyển sang “Hoàn thành”, muốn ghi ngày hoàn thành vào cột G.

Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Target, Me.Range("D:D")) If Not rng Is Nothing Then Application.EnableEvents = False Dim cell As Range For Each cell In rng If LCase(cell.Value) = "hoàn thành" Then cell.Offset(0, 3).Value = Date ' Ghi vào cột G Else cell.Offset(0, 3).ClearContents ' Xóa nếu không hoàn thành End If Next cell Application.EnableEvents = True End If
End Sub

6. Tối Ưu Hóa và Tránh Các Lỗi Phổ Biến

6.1. Vấn Đề “Circular Reference”

Khi sử dụng công thức để ghi ngày tự động (ví dụ trong cùng ô), Excel sẽ báo lỗi vòng lặp. Cách giải quyết:

  • Không đặt công thức trong ô muốn ghi ngày.
  • Dùng VBA để ghi giá trị trực tiếp (như các macro trên).

6.2. Đảm Bảo Định Dạng Ô

  • Khi dùng TODAY() hoặc NOW(), Excel mặc định định dạng là ngày/giờ. Nếu muốn hiển thị “dd/mm/yyyy”, chọn Format Cells → Number → Custom và nhập dd/mm/yyyy.
  • Khi dùng VBA, bạn có thể định dạng ngay trong macro:
cell.Offset(0,1).NumberFormat = "dd/mm/yyyy"

6.3. Tốc Độ Tính Toán Khi Có Nhiều Macro

Nếu workbook có hàng ngàn dòng và macro được gọi trên mỗi thay đổi, tốc độ sẽ chậm. Giải pháp:

  • Giới hạn vùng áp dụng (ví dụ Range("A2:A1000") thay vì toàn cột).
  • Sử dụng Application.ScreenUpdating = False và Application.Calculation = xlCalculationManual trong thời gian chạy macro, sau đó bật lại.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'... code ...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

6.4. Bảo Mật Macro

  • Khi chia sẻ file, người nhận cần bật macro (Enable Content). Nếu không, các tính năng tự động cập nhật ngày sẽ không hoạt động.
  • Đặt mật khẩu cho VBA nếu muốn bảo vệ logic.

7. Các Kịch Bản Thực Tế Ứng Dụng

7.1. Theo Dõi Hợp Đồng

  • Cột A: Mã hợp đồng.
  • Cột B: Ngày ký (được nhập thủ công).
  • Cột C: Ngày hết hạn (tự động tính: =EDATE(B2,12) cho hợp đồng 12 tháng).
  • Cột D: Ngày nhắc nhở (30 ngày trước ngày hết hạn): =C2-30.
  • Cột E: Ngày cập nhật cuối (macro Workbook_BeforeSave).

Sử dụng Conditional Formatting để tô đỏ các hợp đồng sắp hết hạn.

7.2. Quản Lý Dự Án

  • Cột A: Nhiệm vụ.
  • Cột B: Người chịu trách nhiệm.
  • Cột C: Trạng thái (Chưa bắt đầu, Đang thực hiện, Hoàn thành).
  • Cột D: Ngày bắt đầu (được ghi khi trạng thái chuyển sang “Đang thực hiện”).
  • Cột E: Ngày hoàn thành (được ghi khi trạng thái chuyển sang “Hoàn thành”).

Macro Worksheet_Change sẽ kiểm tra thay đổi ở cột C và tự động điền ngày tương ứng.

7.3. Bảng Theo Dõi Nhân Viên

  • Cột A: Mã nhân viên.
  • Cột B: Tên.
  • Cột C: Ngày vào công ty (được nhập một lần).
  • Cột D: Ngày làm việc cuối (tự động cập nhật mỗi khi có ghi chú công việc trong cột E).

Macro sẽ ghi Now vào cột D mỗi khi người dùng nhập nội dung vào cột E.

8. Tổng Kết

Việc tự động cập nhật ngày trong Excel không chỉ giúp giảm khối lượng công việc thủ công mà còn tăng độ chính xác và tính nhất quán của dữ liệu. Từ các hàm đơn giản như TODAY() và NOW() cho tới các giải pháp mạnh mẽ hơn bằng VBA, bạn có thể tùy chỉnh để đáp ứng hầu hết các nhu cầu thực tế:

  • Hàm: Dễ dùng, tự động cập nhật khi mở lại file.
  • Công thức IF + TODAY: Ghi ngày một lần khi dữ liệu được nhập.
  • VBA:
  • Workbook_Open để cập nhật ngày khi mở file.
  • Worksheet_Change để ghi ngày khi dữ liệu thay đổi.
  • Workbook_BeforeSave để lưu thời gian sửa cuối cùng.
  • Conditional Formatting: Highlight các ngày quan trọng, cảnh báo dữ liệu cũ.
  • Kỹ thuật tối ưu: Giới hạn vùng, tắt ScreenUpdating, tránh vòng lặp.

Bằng cách áp dụng các kỹ thuật trên, bạn sẽ tạo ra các bảng tính thông minh, tự động ghi lại lịch sử ngày tháng, hỗ trợ quyết định nhanh chóng và chính xác hơn. Hãy thử ngay trong dự án của mình và cảm nhận sự khác biệt!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận