Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động cập nhật ngày tháng khi nhập liệu vào Excel

Văn Hằng Thái 16/03/2026 12:21 268 lượt xem 3 trả lời

Chào mọi người,

Mình có một tình huống thế này, khi nhập liệu vào một bảng tính Excel, mình muốn cột ngày tháng sẽ tự động cập nhật theo ngày hiện tại mà không cần phải nhập thủ công. Ví dụ, khi mình nhập tên khách hàng vào ô A2, thì ô B2 (cột ngày) sẽ tự động hiển thị ngày hôm nay. Nếu ngày mai mình nhập thêm khách hàng vào A3, thì B3 sẽ hiển thị ngày của ngày mai.

Mình đã thử dùng các hàm như TODAY() hoặc NOW() nhưng nó chỉ trả về ngày hiện tại của hệ thống, và sẽ thay đổi mỗi khi file Excel mở ra hoặc có thay đổi. Điều mình cần là nó chỉ ghi nhận ngày tại thời điểm nhập liệu đó và cố định luôn.

Có anh em nào trong diễn đàn có kinh nghiệm hoặc biết cách xử lý vấn đề này không ạ? Có thể dùng VBA hoặc một công thức nào đó không?

Mình xin cảm ơn trước!

4

Cái này mình cũng từng đau đầu tìm cách đây. Dùng VBA đúng là giải pháp gọn gàng nhất cho bài toán tự động cập nhật ngày tháng theo từng dòng nhập liệu như bạn mô tả.

Tuy nhiên, có một chút lưu ý nhỏ: nếu bạn muốn cột ngày chỉ điền một lần duy nhất khi nhập liệu ban đầu và không thay đổi khi chỉnh sửa các ô khác trên cùng dòng, bạn cần thêm một điều kiện kiểm tra xem ô ngày ở cột B đã có dữ liệu chưa.

Ví dụ, có thể sửa lại code một chút như sau:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Intersect(Target, Me.Range("A:A")) ' Cột A là cột nhập liệu

If Not KeyCells Is Nothing Then If KeyCells.Cells.Count = 1 Then ' Xử lý khi chỉ nhập 1 ô If Target.Value "" And Me.Cells(Target.Row, "B").Value = "" Then ' Kiểm tra ô nhập liệu không trống VÀ ô ngày chưa có dữ liệu Me.Cells(Target.Row, "B").Value = Date ' Gán ngày hiện tại vào cột B End If End If End If End Sub

Cách này sẽ đảm bảo ngày chỉ được ghi nhận lần đầu tiên bạn nhập dữ liệu vào cột A. Hy vọng hữu ích cho bạn!

2

Hay quá! Vấn đề này nhiều người gặp phải nè. Để cột ngày tự động cập nhật theo từng dòng nhập liệu, mình nghĩ cách dùng VBA (Macro) là phù hợp nhất.

Bạn có thể dùng sự kiện Worksheet_Change để kiểm tra xem ở cột A có dữ liệu mới được nhập vào không. Nếu có, thì ở cột B tương ứng, bạn gán giá trị là Date (hàm trả về ngày hiện tại).

Ví dụ code đơn giản như sau:


Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then
        If Target.Cells.Count = 1 Then ' Chỉ xử lý khi nhập 1 ô
            If Target.Value  "" Then ' Nếu ô nhập vào không trống
                Me.Cells(Target.Row, "B").Value = Date ' Gán ngày hiện tại vào cột B
            End If
        End If
    End If
End Sub

Bạn chỉ cần paste đoạn code này vào module của sheet tương ứng là được.

Bạn thử xem sao nhé!

5

Cảm ơn bạn đã chia sẻ code VBA rất hay và hữu ích! Mình cũng từng gặp tình huống tương tự và thấy cách dùng Worksheet_Change kết hợp với kiểm tra ô ngày chưa có dữ liệu là giải pháp tối ưu nhất.

Một câu hỏi nhỏ mình muốn hỏi thêm là, nếu trường hợp mình muốn thêm một cột "Ngày Sửa Đổi Cuối" (ví dụ cột C) cũng tự động cập nhật mỗi khi có thay đổi ở bất kỳ ô nào trên dòng đó thì mình có thể áp dụng tương tự không ạ? Hay cần một đoạn code khác?

5

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký