Cách sử dụng Autofilter trong VBA để lọc dữ liệu ngày tháng

Cách lọc dữ liệu ngày (Date) trong VBA

Khi sử dụng công cụ Macro Recorder trong Excel để ghi lại thao tác lọc dữ liệu trên cột ngày tháng. Bạn sẽ nhận được một câu lệnh VBA tương tự như sau:

Range("A1").AutoFilter Field:=1, Criteria1:=">12/08/2006"

Tuy nhiên khi bạn bấm nút chạy Macro này thì lại gặp lỗi hoặc ra kết quả không mong muốn. Điều này là vì Excel nhận dữ liệu ngày tháng theo kiểu Mỹ, không phải kiểu ngày tháng ở trong thiết lập Windows Regional Settings. Một cách để xử lý điểu này là chuyển dữ liệu ngày tháng thành dữ liệu kiểu Long bằng cách sử dụng hàm DateSerial:

Dim dDate As Date
If IsDate(Range("A1")) Then
    dDate = Range("A1")
    dDate = DateSerial(Year(dDate), Month(dDate), Day(dDate))
End if

Sau khi dữ liệu ngày tháng đã được lưu vào biến dDate (kiểu Date), chúng ta có thể đưa giá trị này vào 1 biến kiểu Long:

Dim dDate as Date
Dim lDate as Long
If IsDate(Range("A1")) Then
    dDate = Range("A1")
    lDate = DateSerial(Year(dDate), Month(dDate), Day(dDate))
End If

Sau khi chuyển dữ liệu ngày tháng sang dạng Long thì chúng ta có thể thực hiện việc lọc dựa trên dữ liệu này một cách dễ dàng như sau:

Range("A1").AutoFilter Field:=1, Criteria1:=">" & lDate

Dấu “=” phía sau tham số Criteria1: có thể được thay bằng:

  • “>=” : lớn hơn hoặc bằng
  • “<“ : nhỏ hơn
  • “<=” : nhỏ hơn hoặc bằng
  • “=” : bằng

Đăng ký ngay: khóa học lập trình VBA trong excel

Cách lọc dữ liệu ngày và thời gian (Date & Time) trong VBA

Nếu bạn cần phải lọc dữ liệu thời gian ở mức độ chi tiết hơn – tức không chỉ có dữ liệu ngày tháng mà còn là dữ liệu thời gian thì chúng ta có thể áp dụng chuyển phần dữ liệu ngày tháng sang dạng long (với hàm DateSerial), sau đó cộng thêm dữ liệu về thời gian (với hàm TimeSerial) rồi chuyển sang dạng Double:


Tác giả: dtnguyen (Nguyễn Đức Thanh)

@ Học Excel Online | DTNguyen.business
· · ·

Khóa học mới xuất bản