Lọc dữ liệu theo khoảng thời gian mình chọn

Liên hệ QC
Xin lỗi bạn, cho mình phiền thêm xíu, ở #7, bạn có giúp mình đoạn code lọc cho "venue" trong khoảng thời gian mình chọn. Giờ mình muốn thêm điều kiện là khi ô lọc theo "venue" trống thì nó vẫn lọc những sự kiện diễn ra trong khoảng thời gian mình chọn thì phải thêm hay sửa code thế nào. Cảm ơn bạn.
[GPECODE=vb]
Option Explicit
Sub Loc()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1 As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
With Sheet1
DL = .Range(.[A2], .[D65000].End(3))
End With
For r = 2 To UBound(DL)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 And (DL(r, 3) = Dk3 Or Dk3 = Empty) Then
i = i + 1
For j = 1 To 4
kq(i, j) = DL(r, j)
Next j
End If
Next r
With Sheet2
If i Then
.Range("A5:D65000").ClearContents
.Range("A5").Resize(i, 4) = kq
Else
.Range("A5:D65000").ClearContents
End If
End With
Application.ScreenUpdating = True
End Sub
[/GPECODE]
 
Lần chỉnh sửa cuối:
Mọi người sửa code hộ mình theo yêu cầu trong file.tks all

Tự nhiên bạn chen ngang topic của người ta vậy???
[GPECODE=vb]
Option Explicit
Sub Loc3()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1, nextrow As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
With Sheet1
DL = .Range(.[A3], .[D65000].End(3))
End With
For r = 1 To UBound(DL)
If Dk3 = Empty Then
If IsEmpty(DL(r, 1)) Then DL(r, 1) = DL(r - 1, 1)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 Then
i = i + 1
If DL(r, 1) <> nextrow Then kq(i, 1) = DL(r, 1)
For j = 2 To 4
kq(i, j) = DL(r, j)
Next j
End If
nextrow = DL(r, 1)
Else
If DL(r, 3) = Dk3 Then
i = i + 1
For j = 2 To 4
kq(i, j) = DL(r, j)
Next j
End If
End If
Next r
With Sheet2
If i Then
.Range("A5:D65000").ClearContents
.Range("A5").Resize(i, 4) = kq
Else
.Range("A5:D65000").ClearContents
End If
End With
Application.ScreenUpdating = True
End Sub
[/GPECODE]
 
[GPECODE=vb]
Option Explicit
Sub Loc()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1 As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
With Sheet1
DL = .Range(.[A3], .[D65000].End(3))
End With
For r = 2 To UBound(DL)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 And (DL(r, 3) = Dk3 Or Dk3 = Empty) Then
i = i + 1
For j = 1 To 4
kq(i, j) = DL(r, j)
Next j
End If
Next r
With Sheet2
If i Then
.Range("A5:D65000").ClearContents
.Range("A5").Resize(i, 4) = kq
Else
.Range("A5:D65000").ClearContents
End If
End With
Application.ScreenUpdating = True
End Sub
[/GPECODE]

code dữ quá hic
mình chỉ biết làm cách "yếu đuối" vầy thôi . hi hi

Mã:
Public Sub hello()
With Worksheets("report")
    .[H2].Value = "=AND( data!A3>=$B$2,data!A3<=$D$2,OR($F$2="""",data!C3=$F$2))"
    Sheet1.Range("A2:D" & Sheet1.[C1000000].End(xlUp).Row).AdvancedFilter xlFilterCopy, _
    .[H1:H2], .[A4:D4]
    .[H2].ClearContents
End With
End Sub
 
code dữ quá hic
mình chỉ biết làm cách "yếu đuối" vầy thôi . hi hi

Mã:
Public Sub hello()
With Worksheets("report")
    .[H2].Value = "=AND( data!A3>=$B$2,data!A3<=$D$2,OR($F$2="""",data!C3=$F$2))"
    Sheet1.Range("A2:D" & Sheet1.[C1000000].End(xlUp).Row).AdvancedFilter xlFilterCopy, _
    .[H1:H2], .[A4:D4]
    .[H2].ClearContents
End With
End Sub

Hehe. Cái này vẫn biết, nhưng làm biếng làm động tác copy cái Điều kiện Ad dán xuống, chạy code xong, ->Clear. Muốn làm trên cái điều kiện người ta đặt đâu nằm đó đó mà..........--=0--=0--=0
 
[GPECODE=vb]
Option Explicit
Sub Loc()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1 As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
With Sheet1
DL = .Range(.[A2], .[D65000].End(3))
End With
For r = 2 To UBound(DL)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 And (DL(r, 3) = Dk3 Or Dk3 = Empty) Then
i = i + 1
For j = 1 To 4
kq(i, j) = DL(r, j)
Next j
End If
Next r
With Sheet2
If i Then
.Range("A5:D65000").ClearContents
.Range("A5").Resize(i, 4) = kq
Else
.Range("A5:D65000").ClearContents
End If
End With
Application.ScreenUpdating = True
End Sub
[/GPECODE]

Cảm ơn bạn nhiều nha /-*+/
 
code dữ quá hic
mình chỉ biết làm cách "yếu đuối" vầy thôi . hi hi

Mã:
Public Sub hello()
With Worksheets("report")
    .[H2].Value = "=AND( data!A3>=$B$2,data!A3<=$D$2,OR($F$2="""",data!C3=$F$2))"
    Sheet1.Range("A2:D" & Sheet1.[C1000000].End(xlUp).Row).AdvancedFilter xlFilterCopy, _
    .[H1:H2], .[A4:D4]
    .[H2].ClearContents
End With
End Sub

Bạn giải thích đoạn code này giúp mình với, mình không hiểu gì hết (@$%@
 
Mình biết là nó thực thi lệnh giống với code #21, mình muốn biết thêm ý nghĩa của đoạn code bạn viết /-*+/, để có thêm kiến thức đó mà, chứ đọc vô không hiểu gì hết -+*/

Muốn biết thì quay lại #3 tôi có nói bạn rồi mà (xem Link đó). Chính là cái đó,......
Cái đó có thể làm bằng tay.....Nhưng anh "Chim Hồng" ở trên thích đưa vào code thui ấy mà. (Thay vì ta lọc bằng tay phải thực hiện nhiều thao tác thì anh ấy gắn các thao tác vào 1 cái Nút thôi, đơn giản là vậy)........Cho nên đừng có hoảng. Không hiểu code thì đọc lý thuyết để hiểu cách làm bằng tay trước đi đã......đừng vội......
 
Xin lỗi, đọc toppic thấy hay nêu thêm trường hợp xảy ra nhờ mọi người xử lý dùm. Cũng muốn áp dụng vào công việc của mình. tks all
 
Tự nhiên bạn chen ngang topic của người ta vậy???
[GPECODE=vb]
Option Explicit
Sub Loc3()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1, nextrow As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
With Sheet1
DL = .Range(.[A3], .[D65000].End(3))
End With
For r = 1 To UBound(DL)
If Dk3 = Empty Then
If IsEmpty(DL(r, 1)) Then DL(r, 1) = DL(r - 1, 1)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 Then
i = i + 1
If DL(r, 1) <> nextrow Then kq(i, 1) = DL(r, 1)
For j = 2 To 4
kq(i, j) = DL(r, j)
Next j
End If
nextrow = DL(r, 1)
Else
If DL(r, 3) = Dk3 Then
i = i + 1
For j = 2 To 4
kq(i, j) = DL(r, j)
Next j
End If
End If
Next r
With Sheet2
If i Then
.Range("A5:D65000").ClearContents
.Range("A5").Resize(i, 4) = kq
Else
.Range("A5:D65000").ClearContents
End If
End With
Application.ScreenUpdating = True
End Sub
[/GPECODE]
Không đc bạn ơi vì nếu con nó không hiện thị ngày tháng nếu chọn HN hay lao cai
 
Joy cũng có câu hỏi tương tự như bạn chủ Topic.
Dữ liệu: 23-1am: Tý , 1-3AM: Sửu, 3-5am: Dần
Có cách nào để khi Joy nhập giờ sinh: 2.30am thì ra được kết quả là : Dần
Joy ko biết về Code ạ.
Các sư huynh, tỷ, đệ, muội chỉ Joy với ạ. Thanks! :)
 
[GPECODE=vb]
Option Explicit
Sub Loc()
Application.ScreenUpdating = False
Dim DL, kq(1 To 65000, 1 To 4), Dk1 As Date, Dk2 As Date
Dim r As Long, i As Long, j As Long, Dk3 As String
Dk1 = Sheet2.[B2].Value
Dk2 = Sheet2.[D2].Value
Dk3 = Sheet2.[F2].Value
DL = Sheet1.Range("A2:D65000")
For r = 2 To UBound(DL)
If DL(r, 1) >= Dk1 And DL(r, 1) <= Dk2 And DL(r, 3) = Dk3 Then
i = i + 1
For j = 1 To 4
kq(i, j) = DL(r, j)
Next j
End If
Next r
If i Then
Sheet2.Range("A5:D65000").ClearContents
Sheet2.Range("A5").Resize(i, 4) = kq
Else
Sheet2.Range("A5:D65000").ClearContents
End If
Application.ScreenUpdating = True
End Sub
[/GPECODE]
khi mình không chọn venue nào thì tự hiểu là lọc tất cả venue thì thêm code như nào ạ, với code hiện tại thì khi không chọn venue thì nó không lọc bất cứ cái nào ạ. Cảm ơn bạn nhiều!
 
Dùng công thức thì thử cái này
sheet report
A5=IFERROR(INDIRECT("data!"&ADDRESS(SUMPRODUCT(LARGE((data!$A$3:$A$9>=$B$2)*(data!$A$3:$A$9<=$D$2)*ROW(data!$A$3:$A$9),ROWS($A$5:A5))),COLUMN())),"")
copy xuống dưới và sang ngang
NẾU NHƯ DÙNG CÔNG THỨCTRÊN, THÌ VỪA DÒ TÌM NGÀY THÁNG VỪA TÌM THEO DỮ LIỆU " VENUE " NHƯ TRONG FILE CỦA BẠN KIA THÌ LÀM SAO Ạ? GIÚP EM Ạ. E CŨNG CẦN
 
Web KT
Back
Top Bottom