Cách tự động ghi nhận thời gian nhập dữ liệu bằng VBA

Lê Nguyễn Nhật Phương
Lê Nguyễn Nhật Phương
Jul 28 2021

Nếu bạn và các đòng nghiệp cùng làm việc trên 1 file Excel thì việc nội dung thường được chỉnh sửa nhiều lần trong các khoảng thời gian khác nhau. Nhưng làm thế nào để quản lý, kiểm soát thông tin về thời gian tạo, chỉnh sửa file gần nhất? Cách đơn giản là tạo code VBA tự động ghi nhận thời gian dữ liệu được nhập vào file Excel, từ đó thời gian nhập liệu của tất cả nội dung đều được ghi lại và hiển thị ngay trong Excel. Hãy cùng Gitiho tìm hiểu cách làm trong bài viết này nhé!

Xem thêm: Hướng dẫn cách viết các hàm trong Excel chi tiết, dễ hiểu nhất

Biến Excel thành công cụ phân tích dữ liệu chuyên sâu.

Hướng dẫn cách viết code tự động ghi nhận thời gian nhập dữ liệu bằng VBA

Sử dụng hàm NOW trong Excel

Hàm NOW trong Excel có chức năng xác định thời điểm hiện tại, hàm NOW sẽ trả kết quả bao gồm cả ngày/tháng/năm và giờ/phút/giây theo thời gian thực. Cũng chính vì thế mà bất kỳ khi nào Excel thực hiện tính toán thì kết quả hàm NOW sẽ tự động thay đổi. Tuy nhiên, nhiệm vụ của chúng ta là ghi nhận thời điểm kết thúc nhập dữ liệu vào Excel, như vậy kết quả đó không được thay đổi.


Để xem xét thời gian kết thúc nhập dữ liệu bằng hàm NOW trong Excel bạn làm theo các bước sau:

Bước 1: Viết hàm NOW với cú pháp: =NOW()
Bước 2: Sao chép kết quả của hàm
Bước 3: Dán kết quả của hàm để hàm không tự động cập nhật.

Xem thêm: Làm thế nào dùng hàm NOW TODAY TIME trong VBA Excel

Sử dụng code VBA để ghi nhận thời gian nhập dữ liệu

VBA như một vị cứu tinh để bạn không phải thực hiện những thao tác thủ công, bất tiện, mất thời gian như trên nữa. Với VBA tất cả sẽ được tự động hóa chỉ sau vài bước đơn giản:

Ví dụ bạn nhập liệu vào ô A3 và muốn nhận kết quả tại ô B3

Bước 1: Sử dụng hàm NOW trong VBA

Bạn nhập câu lệnh hàm NOW sau vào ô B3:

ActiveSheet.Range(“B3”).Value = Now

Bước 2: Gắn câu lệnh hàm NOW vào sự kiện trong VBA tức là gắn với sự kiện thay đổi dữ liệu trong ô A3.

- Trong VBA Excel có 2 loại sự kiện chính:

1. Sự kiện cho Workbook
Gồm nhiều đối tượng đa dạng thuộc các sự kiện xảy ra với 1 file Excel (Workbook) như chọn 1 file Excel, mở, đóng 1 file Excel, lưu 1 file Excel.


2. Sự kiện cho Worksheet
Là các sự kiện gắn liền đến 1 sheet trong file Excel (Worksheet trong Workbook), các đối tượng trong sự kiện Worksheet ít hơn trong Workbook, nó thường liên quan đến sự thay đổi trong tính toán, lựa chọn hay cập nhật dữ liệu trong sheet.

Xem thêm: Hướng dẫn tìm hiểu về ý nghĩa và cách dùng các sự kiện trong VBA Excel

Tiếp tục với ví dụ của chúng ta: Nếu bạn thay đổi dữ liệu tại ô A3 thuộc Sheet1 thì bạn phải thực hiện gọi sự kiện Worksheet_Change tại Sheet1 và gắn câu lệnh hàm NOW vào như sau:

- Tại cửa sổ Project, nháy đúp chuột vào Worksheet cần tọa sự kiện (Sheet1)

- Chọn Worksheet, sau đó chọn sự kiện Change

- Từ đó Sub Worksheet_Change được tạo tự động

- Tiếp theo bạn nhập đoạn mã VBA sau:

Trong đó: 

If Not Application.Intersect(Range(“A3”), Target) Is Nothing Then
....
End If

- Xét xem tại ô A3 có xảy ra thay đổi dữ liệu không

ActiveSheet.Range(“B3”).Value = Now

- Gán kết quả hàm NOW vào ô B3
Bây giờ khi bạn nhập dữ liệu tại ô A3 trong Excel, kết quả sẽ tự động trả về ô B3.

Bước 3: Tối ưu phạm vi tác động của câu lệnh

Như vậy là bạn đã thực hiện thành công việc ghi nhận thời gian nhập dữ liệu tự động bằng VBA trên 1 ô tính trong Excel. Bây giờ chúng ta hãy thử áp dụng câu lệnh với 1 vùng rộng hơn từ A2 đến A100 hay cả cột A nhé!

Đoạn mã VBA để kết quả hàm NOW được trả về cột B với tất cả các ô cột A tương ứng được nhập dữ liệu như sau:

If Not Application.Intersect(Range(“A2:A100”), Target) Is Nothing Then
   If Range(“A” & Target.Row).Value = “” Then
      Range(“B” & Target.Row).ClearContents
   Else
      Range(“B” & Target.Row).Value = Now
   End If
End If

Trong đó:

  • Intersect(Range(“A2:A100”), Target): Xét sự kiện diễn ra trong vùng A2:A100 (nếu muốn thay đổi vùng sự kiện bạn chỉ cần thay đổi tại Range("vùng sự kiện"))
  • If Range(“A” & Target.Row).Value = “” Then: Nếu giá trị tại cột A ở dòng tác động rỗng thì
  • Range(“B” & Target.Row).ClearContents: Xóa nội dung tại dòng tương ứng ở cột B
  • Else: Mặt khác
  • Range(“B” & Target.Row).Value = Now: Gắn kết quả hàm NOW tại dòng tương ứng tác động vào cột B
  • End if: Kết thúc hàm if xét giá trị rỗng
  • End if: Kết thúc hàm if xét vùng sự kiện

Kết quả:


 

Xem chi tiết cách Tự động ghi nhận thời gian nhập dữ liệu trên Excel bằng VBA


Kết luận

Trong bài viết trên, Gitiho đã cùng bạn tìm hiểu về cách tự động ghi nhận thời gian nhập dữ liệu bằng VBA với ví dụ cụ thể. Như vậy là chỉ với vài mã code đơn giản trong VBA đã có thể tự hóa các thao tác Excel và tiết kiệm thời gian làm việc của mình rồi đó. 

Hy vọng bạn đã hiểu rõ và áp dụng thành công cho công việc của mình. Đừng quên theo dõi chúng mình để xem thêm các bài viết bổ ích khác nhé!

Ngay bây giờ hãy cùng luyện tập thêm với bộ bài tập Excel có đáp án của Gitiho để nằm lòng tin học văn phòng nhé! 

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

Bài viết liên quan

Hướng dẫn về đối tượng Range trong VBA cơ bản

Hướng dẫn về đối tượng Range trong VBA cơ bản

Hướng dẫn cách dùng các toán tử logic AND, OR, NOT trong VBA

Hướng dẫn cách dùng các toán tử logic AND, OR, NOT trong VBA

Hướng dẫn cách gọi Sub trong VBA qua các ví dụ

Hướng dẫn cách gọi Sub trong VBA qua các ví dụ

Hướng dẫn cách viết các toán tử so sánh trong VBA

Hướng dẫn cách viết các toán tử so sánh trong VBA

Tìm kiếm bằng trình duyệt Google thật dễ dàng với VBA

Tìm kiếm bằng trình duyệt Google thật dễ dàng với VBA

Tìm kiếm bằng trình duyệt Google thật dễ dàng với VBA

Tìm kiếm bằng trình duyệt Google thật dễ dàng với VBA

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội