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

Làm thế nào để có thể tự động ghi nhận thời gian dữ liệu được nhập vào trong file Excel? Chỉ với vài dòng code đơn giản trong VBA là bạn có thể làm được việc này rồi. Hãy cùng bostonenglish tìm hiểu cách làm nhé:

ghi lại thời gian nhập liệu trong excel

ghi lại thời gian nhập liệu trong excel

Code tự động ghi nhận thời gian nhập dữ liệu

Đặc điểm hàm NOW trong Excel

Thông thường để xác định một thời điểm cụ thể trong Excel, chúng ta có hàm NOW. Ví dụ như sau:

Hàm NOW sẽ ghi nhận cả Ngày/tháng/năm và Giờ:phút:giây theo thời gian thực.

Tuy nhiên nếu sử dụng hàm NOW, kết quả của hàm sẽ luôn tự động thay đổi mỗi khi Excel thực hiện tính toán. Trong khi đó mục tiêu của chúng ta là chỉ ghi nhận kết quả thời điểm khi chúng ta kết thúc thao tác nhập dữ liệu, và kết quả đó không được thay đổi.

Để làm điều đó mà không dùng tới VBA, bạn phải làm thủ công các bước sau:

  • Bước 1: Viết hàm NOW, sau đó copy kết quả của hàm
  • Bước 2: Dán kết quả của hàm để tránh hàm tự động cập nhật kết quả

Viết Code VBA để tự động ghi nhận thời gian nhập dữ liệu

Nếu việc nhập dữ liệu liên tục thì cách làm trên khá bất tiện vì số thao tác nhiều và thủ công. Do đó để có thể tự động hóa việc này, chúng ta ứng dụng VBA trong Excel như sau:

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

Ví dụ bạn nhập dữ liệu vào ô A3, muốn điền kết quả thời gian thực vào ô B3, câu lệnh như sau:

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

Bước 2: Gắn câu lệnh hàm NOW vào sự kiện khi nhập dữ liệu

See also  Homogeneous Là Gì - Nghĩa Của Từ Homogeneous | Bostonenglish.edu.vn

(tham khảo: Tìm hiểu về ý nghĩa và cách dùng các sự kiện trong VBA Excel)

Để có thể tự động điền thời gian thực bởi hàm NOW trong VBA, chúng ta phải gắn với sự kiện thay đổi dữ liệu trong ô A3.

Ví dụ bạn thay đổi dữ liệu tại ô A3 trong Sheet1 thì sẽ gọi sự kiện Worksheet_Change tại Sheet1 và đưa câu lệnh trong bước 1 vào

1, Nháy đúp vào Worksheet cần tạo sự kiện trong cửa sổ Project, ví dụ là Sheet1

2, Chọn đối tượng Worksheet

3, Chọn sự kiện Change

4, Một Sub được tự động tạo ra là Worksheet_Change

5, Viết code bên trong Sub đó:

Cú pháp:

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

End If

Nghĩa là xét sự thay đổi có diễn ra trong ô A3 hay không

Cú pháp:

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

Nghĩa là gán giá trị Now vào ô B3

Khi đó quay trở lại Excel, nhập dữ liệu tại ô A3 sẽ có ngay giá trị thời gian thực tại ô B3

Bước 3: Tổng quát câu lệnh, mở rộng phạm vi tác động

Để câu lệnh được tối ưu, chúng ta không chỉ xét 1 ô A3 mà có thể sẽ áp dụng trong 1 vùng rộng hơn: A2:A100, hoặc hơn nữa là cả cột A.

Tại bất cứ ô nào được nhập nội dung trong cột A, tại cột B trên dòng tương ứng cũng sẽ lấy giá trị kết quả hàm NOW

Như vậy câu lệnh tổng quát là:

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) là vùng diễn ra sự kiện. Bạn thay đổi tọa độ trong Range(“….”) là được.

Target chính là mục tiêu (ô được chọn).

Target.Row là số dòng của ô được chọn.

Logic là:

Xét sự kiện diễn ra trong vùng A2:A100

Nếu giá trị trong cột A tại dòng tác động là rỗng (không có nội dung) thì

See also  Thủ Đô Của Brazil Tên Là Gì, Chính Xác, Thủ Đô Của Brazil Là Brasilia | Bostonenglish.edu.vn

Xóa nội dung trong cột B, tại dòng tương ứng với dòng đang tác động

Còn lại / Mặt khác (giả định trên bị sai)

Gán giá trị kết quả hàm NOW vào cột B, tại dòng đang tác động

Kết thúc hàm if xét giá trị rỗng

Kết thúc hàm if xét vùng diễn ra sự kiện

Kết quả thu được như sau:

Xem thêm:

*

2. Sự kiện cho WorksheetLà 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.

*

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 ô B3Bâ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ệcghi 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:

See also  Tôi đã học Excel như thế nào - Phần 1

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 IfEnd 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 BElse: Mặt khácRange(“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 BEnd if: Kết thúc hàm if xét giá trị rỗngEnd if: Kết thúc hàm if xét vùng sự kiện

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 Bostonenglish để nằm lòng tin học văn phòng nhé!

Bostonenglish.edu.vn cũng giúp giải đáp những vấn đề sau đây: 

  • Ghi lại thời gian nhập liệu trong Google Sheet
  • Hiển thị thời gian nhập dữ liệu trong Excel
  • Cố định hàm NOW trong Excel
  • Tự nhảy giờ trong Excel
  • Hàm tự điền dữ liệu trong Excel
  • Tạo nút chọn ngày tháng trong Excel
  • Code nhập dữ liệu trong Excel
  • Tự điền thời gian trong Excel
See more articles in the category: Wiki

Leave a Reply