Vinay sử dụng bảng tính Excel để nhập liệu. Thông tin được nhập vào cột A và Vinay muốn có cách tự động thêm thời gian vào cột B, liền kề với giá trị đã nhập trong cột A, cho biết thời điểm nhập giá trị.

Có một số cách khác nhau để bạn có thể hoàn thành nhiệm vụ này. Đầu tiên là nhập thời gian theo cách thủ công bằng cách chọn ô liền kề trong cột B và nhấn Ctrl + Shift +; (đó là dấu chấm phẩy). Phím tắt này nhập thời gian hiện tại trong ô. Tất nhiên, vấn đề với cách tiếp cận này là nó không tự động và cần thêm một số chuyển động và tổ hợp phím để thực hiện.

Một cách tiếp cận tốt hơn sẽ là sử dụng một công thức để nhập thời gian. Hàm NOW trả về ngày và giờ hiện tại và bạn có thể sử dụng nó trong một ô theo cách sau:

=NOW()

Tất nhiên, công thức đơn giản này được cập nhật mỗi khi trang tính tính toán lại. Điều đó có nghĩa là hàm trả về thời gian hiện tại mỗi khi bạn nhập giá trị vào cột A. Điều này là không mong muốn vì bạn không muốn các lần trước cập nhật. Bạn có thể thử sử dụng một công thức để kiểm tra xem có thứ gì đó nằm trong cột A hay không, như sau:

=IF(A3="","",IF(B3="",NOW(),B3))

Vấn đề là một công thức như thế này đưa một tham chiếu vòng tròn vào trang tính, điều này đưa ra một loạt các thách thức để làm việc. Một cách tiếp cận tốt hơn là tạo macro tự động chạy mỗi khi nhập nội dung nào đó vào cột A. Nhấp chuột phải vào tab của trang tính được sử dụng để nhập dữ liệu và chọn Mã Chế độ xem từ trình đơn Ngữ cảnh. Bạn sẽ thấy cửa sổ Mã cho trang tính trong Trình soạn thảo Visual Basic, sau đó nhập cửa sổ này vào cửa sổ:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim rCell As Range     Dim rChange As Range          On Error GoTo ErrHandler     Set rChange = Intersect(Target, Range("A:A"))

If Not rChange Is Nothing Then         Application.EnableEvents = False         For Each rCell In rChange             If rCell > "" Then                 With rCell.Offset(0, 1)

.Value = Now                     .NumberFormat = "hh:mm:ss"

End With             Else                 rCell.Offset(0, 1).Clear             End If         Next     End If

ExitHandler:

Set rCell = Nothing     Set rChange = Nothing     Application.EnableEvents = True     Exit Sub ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Với macro tại chỗ, bất cứ khi nào bạn nhập nội dung nào đó vào ô trong cột A, ô liền kề trong cột B sẽ chứa ngày và giờ (được định dạng để chỉ hiển thị thời gian). Nếu bạn xóa nội dung nào đó trong cột A, thì ô liền kề trong cột B cũng sẽ bị xóa.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (12811) áp dụng cho Microsoft Excel 2007, 2010 và 2013. Bạn có thể tìm phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: