Lấy giá trị ngày tháng trong Sheet để thực hiện trên VBA?

  • Thread starter undefinite
  • Ngày gửi
U

undefinite

Sơ cấp
14/3/07
6
0
0
Hanoi
#1
Mọi người ơi, cho mình hỏi một chút nhé. Mình có một file bao gồm dữ liệu, trong đó có một cột định dạng là dd/mm/yyyy. Khi mình tiến hành lọc bằng AutoFilter để lọc các dữ liệu từ ngày A đến ngày B thì thực hiện được. Để đơn giản hơn trong việc chọn ngày tháng, mình để hai ô, ví dụ là ô B1 có giá trị là ngày bắt đầu (01/01/2007) và ô B2 có giá trị là ngày kết thúc (10/01/2007). Khi nhập xong giá trị tại ô B2, thì Excel sẽ tự động thực hiện lọc theo điều kiện đã đưa ra tại ô B1 và B2 (01/01/2007<=điều kiện<=10/01/2007) thông qua một Macro. Tuy nhiên, khi mình sửa lại macro để lấy giá trị từ ô B1 và B2, thì mặc dù đã kiểm tra đã lấy dữ liệu từ ô B1; B2 nhưng kết quả lại là không có row nào đáp ứng được điều kiện đã đưa ra
Đây là code của mình

Sub Macro1()
Range("B1").Select
NgayBD=ActiveCell.Value
Range("B2").Select
NgayKT=ActiveCell.Value
Range("A3").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=">=NgayBD", Operator:=xlAnd _
, Criteria2:="<=NgayKT"
End Sub


Cho mình hỏi là đoạn code này bị sai ở đâu mà khi thực hiện lại không có Row nào đáp ứng được yêu cầu của mình vậy. Hãy giúp mình với!
 
Sửa lần cuối:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#2
Hình như nó lầ vầy:

Option Explicit
Sub Auto_Filter()

Dim NgayBD, NgayKT
NgayBD = Range("D1").Value
NgayKT = Range("D1").Offset(1).Value ' "D2"
Range("A1:B12").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">=" & NgayBD, Operator:=xlAnd _
, Criteria2:="<=" & NgayKT

End Sub
Ngày tháng này phải theo định dạng cũa bọn mẽo chứ không thể theo hệ Pháp được! (đáng tiếc!)
Theo mình bạn nên khai báo biến một cách mà người ta hay gọi là: 'tường minh'
 
U

undefinite

Sơ cấp
14/3/07
6
0
0
Hanoi
#3
Ngày tháng này phải theo định dạng cũa bọn mẽo chứ không thể theo hệ Pháp được! (đáng tiếc!)
Theo mình bạn nên khai báo biến một cách mà người ta hay gọi là: 'tường minh'
Cám ơn bạn rất nhiều. Mình đã thực hiện được rồi. Nhưng định dạng ngày vẫn bị sai. Trong ví dụ trên, thực hiện theo code của bạn, thì nó lọc một lèo từ ngày 01/01/07 đến tận ngày 01/10/07. Dù sao cũng cám ơn bạn rất nhiều
 
Sửa lần cuối:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#4
Đưa bạn ví dụ mình đã làm

Bạn hãy xem VD như thế này, & phát biểu sau đó:
:dance2:
Option Explicit
Sub Auto_Filter()

Dim NgayBD, NgayKT
NgayBD = Range("D1").Value
NgayKT = Range("D1").Offset(1).Value ' "D2"
Range("A1:B12").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">=" & NgayBD, Operator:=xlAnd _
, Criteria2:="<=" & NgayKT

End Sub
/)/hờ Mod /Smod nào ngang qua đây xóa dùm bài trên của mình!
 

Đính kèm

darkmoon

darkmoon

Tiền và tiền $$$
12/9/03
404
9
0
36
HCM
#5
Lâu quá mới thấy pác SA_DQ ghé diễn đàn:bigok:. Tưởng pác quên chúng em roài chứ:freddy:

Cám ơn bạn rất nhiều. Mình đã thực hiện được rồi. Nhưng định dạng ngày vẫn bị sai. Trong ví dụ trên, thực hiện theo code của bạn, thì nó lọc một lèo từ ngày 01/01/07 đến tận ngày 01/10/07. Dù sao cũng cám ơn bạn rất nhiều
Bạn thêm đoạn code màu đỏ xem thế nào.

Option Explicit
Sub Auto_Filter()
Dim NgayBD, NgayKT
Range("D1:D2").NumberFormat = "General"
NgayBD = Range("D1").Value
NgayKT = Range("D1").Offset(1).Value ' "D2"
Range("A1:B12").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">=" & NgayBD, Operator:=xlAnd _
, Criteria2:="<=" & NgayKT
End Sub
 
U

undefinite

Sơ cấp
14/3/07
6
0
0
Hanoi
#6
Bạn hãy xem VD như thế này, & phát biểu sau đó:
:dance2:
/)/hờ Mod /Smod nào ngang qua đây xóa dùm bài trên của mình!
Hi hi, tớ đã tải về VD của bạn, và sau đó thực hiện Macro mà bạn viết => Kết quả là không có Row nào phù hợp với điều kiện đưa ra. Tại vì NgayKT nhận giá trị là 03/17/2007
 
U

undefinite

Sơ cấp
14/3/07
6
0
0
Hanoi
#7
Lâu quá mới thấy pác SA_DQ ghé diễn đàn:bigok:. Tưởng pác quên chúng em roài chứ:freddy:


Bạn thêm đoạn code màu đỏ xem thế nào.
Option Explicit
Sub Auto_Filter()
Dim NgayBD, NgayKT
Range("D1:D2").NumberFormat = "General"
NgayBD = Range("D1").Value
NgayKT = Range("D1").Offset(1).Value ' "D2"
Range("A1:B12").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=">=" & NgayBD, Operator:=xlAnd _
, Criteria2:="<=" & NgayKT
Range("D1:D2").NumberFormat = "dd/mm/yyyy"
End Sub
Tớ xin phép bổ sung thêm dòng lệnh màu đỏ trả lại định dạng như ban đầu để người sử dụng biết được là lọc từ ngày nào đến ngày nào. Rất cám ơn bạn Darkmoon.
 
T

tranxuanthien

Sơ cấp
27/3/05
99
0
0
Tam Ky
#8
Các bác chú ý: với kiểu dữ liệu ngày, khi khai báo phải rõ ràng Dim XXX as Date và tại Regional and Language của Control Panel phải khai báo định dạng giống như sử dụng trong bảng tính thì VBA mới hiểu được
 

Thành viên trực tuyến

Không có thành viên trực tuyến.




Xem nhiều