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 ...
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: