thêm điều kiện giờ phút để trích lọc (1 người xem)

  • Thread starter Thread starter cachabu
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

cachabu

Thành viên hoạt động
Tham gia
27/4/14
Bài viết
122
Được thích
2
bài này em muốn trích lọc theo nhiều điều kiện,
hiện tại em đã có code trích lọc theo điều kiện mã, ngày bắt đầu ngày kết thúc, nhưng muốn thêm điều kiện giờ và phút tại cột E sheet1 phải lớn hơn hoặc bằng với ô D4 và D5 tại sheet 2 thì không biết phải viết thêm thế nào

vậy nhờ anh chị giúp em phải thêm code thế nào để được kết quả mong muốn nhé.

cám ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Mình xài AdvancedFilter trong file

[Thongbao]
Bài này em muốn trích lọc theo nhiều điều kiện, theo mã, ngày bắt đầu ngày kết thúc;
Nhưng muốn thêm điều kiện giờ và phút tại cột E sheet1 phải lớn hơn hoặc bằng với ô D4 và D5 tại sheet 2 thì không biết phải viết thêm thế nào

vậy nhờ anh chị giúp em phải thêm code thế nào để được kết quả mong muốn nhé.

cám ơn[/Thongbao]
 

File đính kèm

Upvote 0
[Thongbao]
Bài này em muốn trích lọc theo nhiều điều kiện, theo mã, ngày bắt đầu ngày kết thúc;
Nhưng muốn thêm điều kiện giờ và phút tại cột E sheet1 phải lớn hơn hoặc bằng với ô D4 và D5 tại sheet 2 thì không biết phải viết thêm thế nào

vậy nhờ anh chị giúp em phải thêm code thế nào để được kết quả mong muốn nhé.

cám ơn[/Thongbao]
anh ơi hình như anh hiểu sai ý thì phải, điều kiện là giờ đến và phút đến tại sheet 1 cột "giờ đến" số giờ và phút lớn hơn hoặc bằng sheet 2 ô D4 giờ và ô D5 là phút không liên quan gì đến giờ đi anh nhé
anh xem lại giúp em nhé.
cám ơn
 
Upvote 0
anh ơi hình như anh hiểu sai ý thì phải, điều kiện là giờ đến và phút đến tại sheet 1 cột "giờ đến" số giờ và phút lớn hơn hoặc bằng sheet 2 ô D4 giờ và ô D5 là phút không liên quan gì đến giờ đi anh nhé
anh xem lại giúp em nhé.
cám ơn

nhờ các anh xem giúp bài này phải điều chỉnh code thế nào để được kết quả mong muốn nhé

cám ơn
 
Upvote 0
nhờ các anh xem giúp bài này phải điều chỉnh code thế nào để được kết quả mong muốn nhé

cám ơn
Tôi dùng AdvancedFilter:
[GPECODE=vb]Sub FilterData()
With Sheet2
.[B9:G10000].Clear
.[J2].FormulaR1C1 = "=AND(Sheet1!R[1]C[-7]=Sheet2!R1C4,Sheet1!R[1]C[-8]>=R2C4,Sheet1!R[1]C[-8]<=R3C4,TEXT(Sheet1!R[1]C[-5],""HH:mm:ss"")*1>=TIME(R4C4,R5C4,0))"
Sheet1.[B2].CurrentRegion.AdvancedFilter 2, .[J1:J2], .[B9:G9]
.[J2].Clear
End With
End Sub[/GPECODE]
Hy vọng đúng ý bạn.
 

File đính kèm

Upvote 0
Tôi dùng AdvancedFilter:
[GPECODE=vb]Sub FilterData()
With Sheet2
.[B9:G10000].Clear
.[J2].FormulaR1C1 = "=AND(Sheet1!R[1]C[-7]=Sheet2!R1C4,Sheet1!R[1]C[-8]>=R2C4,Sheet1!R[1]C[-8]<=R3C4,TEXT(Sheet1!R[1]C[-5],""HH:mm:ss"")*1>=TIME(R4C4,R5C4,0))"
Sheet1.[B2].CurrentRegion.AdvancedFilter 2, .[J1:J2], .[B9:G9]
.[J2].Clear
End With
End Sub[/GPECODE]
Hy vọng đúng ý bạn.
tôi thấy bạn dùng công thức bang excel rui record lại thì phải
có cách viết vba nào khác không vậy bạn ơi
cám ơn
 
Upvote 0
tôi thấy bạn dùng công thức bang excel rui record lại thì phải
có cách viết vba nào khác không vậy bạn ơi
cám ơn
Túm lại là cách này có ra được kết quả đúng ý bạn không? Nếu đúng thì việc record hay không đâu có gì là quan trọng?!
 
Upvote 0
Túm lại là cách này có ra được kết quả đúng ý bạn không? Nếu đúng thì việc record hay không đâu có gì là quan trọng?!
đúng thì đúng rồi bạn ơi, nhưng có phần tiêu đề, nếu nhu mình thay đổi phần tiêu đề thi nó sẽ không ra

có cách nào cố đinh phần tiêu đề mà vẫn ra kết quả đúng không
 
Upvote 0
đúng thì đúng rồi bạn ơi, nhưng có phần tiêu đề, nếu nhu mình thay đổi phần tiêu đề thi nó sẽ không ra

có cách nào cố đinh phần tiêu đề mà vẫn ra kết quả đúng không
Tiêu đề ở Sheet2 là bê nguyên từ Sheet1 qua mà. Nếu bạn muốn sửa tiêu đề thì cứ sửa bên Sheet1 là được chứ có vấn đề gì đâu. Hoặc cùng lắm là sau khi lọc xong thì xóa dòng tiêu đề ở Sheet2 đi là được chứ khó gì.
 
Upvote 0
Tiêu đề ở Sheet2 là bê nguyên từ Sheet1 qua mà. Nếu bạn muốn sửa tiêu đề thì cứ sửa bên Sheet1 là được chứ có vấn đề gì đâu. Hoặc cùng lắm là sau khi lọc xong thì xóa dòng tiêu đề ở Sheet2 đi là được chứ khó gì.
vấn đề là ở chổ không muốn đụng đến cái tiêu đề vì có thể tiêu đề sẽ khác nhau 1 tí, nên mới cần không đụng đến tiêu đề, bạn xem có cách nào khác giúp mình nhé
cám ơn
 
Upvote 0
bài này em muốn trích lọc theo nhiều điều kiện,
hiện tại em đã có code trích lọc theo điều kiện mã, ngày bắt đầu ngày kết thúc, nhưng muốn thêm điều kiện giờ và phút tại cột E sheet1 phải lớn hơn hoặc bằng với ô D4 và D5 tại sheet 2 thì không biết phải viết thêm thế nào

vậy nhờ anh chị giúp em phải thêm code thế nào để được kết quả mong muốn nhé.

cám ơn

có khó khăn gì đâu,

thêm 1 cái .AutoFilter vào code cũ của bạn đó (như thế có 3 cái lun), như sau,
PHP:
.AutoFilter 4, ">=" & CDbl(Sh.[D2] + Sh.[D4] / 24 + Sh.[D5] / 60 / 24)

nhớ kiểm soát kết quả, và ngày giữa cột 1 và cột 4 sheet1 có hợp nhau không (?) để dùng cho đúng
 
Upvote 0
có khó khăn gì đâu,
............
nhớ kiểm soát kết quả, và ngày giữa cột 1 và cột 4 sheet1 có hợp nhau không (?) để dùng cho đúng

nếu ở sheet1: cột 1 và cột 4 là ngày cùng, hoặc lấy cột 4 là chuẩn ngày giờ đến thì:

khi đó chỉ cần 2 autoFilter như sau (sửa lại autoFilter thứ 2)

PHP:
.AutoFilter 2, Sheet2.[D1]
.AutoFilter 4, ">=" & CDbl(Sh.[D2]) + Sh.[D4] / 24 + Sh.[D5] / 60 / 24, xlAnd, "<=" & CDbl(Sh.[D3]) + 1 - 1 / 24 / 60 / 60

với hiểu là giờ kết thúc nhận khách là 23h59'59" của ngày kết thúc D3 sheet 2
 
Upvote 0
nếu ở sheet1: cột 1 và cột 4 là ngày cùng, hoặc lấy cột 4 là chuẩn ngày giờ đến thì:

khi đó chỉ cần 2 autoFilter như sau (sửa lại autoFilter thứ 2)

PHP:
.AutoFilter 2, Sheet2.[D1]
.AutoFilter 4, ">=" & CDbl(Sh.[D2]) + Sh.[D4] / 24 + Sh.[D5] / 60 / 24, xlAnd, "<=" & CDbl(Sh.[D3]) + 1 - 1 / 24 / 60 / 60

với hiểu là giờ kết thúc nhận khách là 23h59'59" của ngày kết thúc D3 sheet 2

anh ơi nội dung của bài này là trích lọc có điều kiện
code ban đâu là trích lọc có điều kiện bao gồm,"mã", ngày bắt đầu , ngày kết thúc ở đây ngày bắt đầu và ngày kết thúc được hiểu là ngày tại cột B sheet 1 có nghĩa là giới hạn trong khoảng thời gian từ ngày này đến ngày kia

và bây giờ em muốn thêm điều kiện là giờ và phút.
điều kiện là giờ và phút tại cột E(giờ đến) sheet 1 lơn hơn hoặc bằng giờ tại Ô D4 và phút tại Ô D5(có nghĩa là chỉ lấy những dữ liệu có giờ và phút lớn hơn hoặc bằng tại ô D4 và D5.
nhờ anh xem lại giúp nhé
cám ơn
 
Upvote 0
anh ơi nội dung của bài này là trích lọc có điều kiện
code ban đâu là trích lọc có điều kiện bao gồm,"mã", ngày bắt đầu , ngày kết thúc ở đây ngày bắt đầu và ngày kết thúc được hiểu là ngày tại cột B sheet 1 có nghĩa là giới hạn trong khoảng thời gian từ ngày này đến ngày kia

và bây giờ em muốn thêm điều kiện là giờ và phút.
điều kiện là giờ và phút tại cột E(giờ đến) sheet 1 lơn hơn hoặc bằng giờ tại Ô D4 và phút tại Ô D5(có nghĩa là chỉ lấy những dữ liệu có giờ và phút lớn hơn hoặc bằng tại ô D4 và D5.
nhờ anh xem lại giúp nhé
cám ơn

Thử vào file của bạn chưa, mà phát biểu thế, cứ thử rui sẽ thấy, thay vào trong code cũ trong file bạn post lên
Nếu như bạn nói thì sử dụng ở bài 11 đó
 
Lần chỉnh sửa cuối:
Upvote 0
Thử vào file của bạn chưa, mà phát biểu thế, cứ thử rui sẽ thấy, thay vào trong code cũ trong file bạn post lên
Nếu như bạn nói thì sử dụng ở bài 11 đó

không đúng anh ơi. em đã thay vào và text thử rồi

em ví dụ: mã 2003 từ ngày 10/8 đến 31/8 và chọn giờ là 10h phút thì chọn 0 cũng được vậy kết quả phải ra là chỉ lấy những dữ liệu là 10h mới đúng sáo nó vẫn ra những dữ liệu trước 10h
 
Upvote 0
không đúng anh ơi. em đã thay vào và text thử rồi

em ví dụ: mã 2003 từ ngày 10/8 đến 31/8 và chọn giờ là 10h phút thì chọn 0 cũng được vậy kết quả phải ra là chỉ lấy những dữ liệu là 10h mới đúng sáo nó vẫn ra những dữ liệu trước 10h

10h của ngày 10/8
hay sau 10h của tất cả các ngày từ 10-31/8 (ngày nào cũng đều sau 10h??)???
 
Upvote 0
có nghĩa là trong khoảng ngày từ 10-31/8 có những dữ liệu nào có mã = D1 và có giờ đến tại cột E sheet 1 lớn hơn từ 10h và 0 phút trở đi thì liệu kê ra

thử code này có kết quả ,

PHP:
Sub subFilter()
    Dim a(), b(), sC As Worksheet, sR As Worksheet
    Dim dB As Long, dE As Long, hH, pP, mA, vH As Double
    Dim m As Long, n As Long, i As Long, j As Long, k As Long
    
    Set sC = Sheet1
    Set sR = Sheet2
    n = 6
    
    With sC
        a = .Range(.[B3], .[C65536].End(xlUp)).Resize(, n).Value2
    End With
    
    With sR
        mA = .[D1].Value2
        dB = .[D2].Value2
        dE = .[D3].Value2
        vH = .[D4].Value2 / 24 + .[D5].Value2 / 60 / 24
        
        .[B9].Resize(10000, n).ClearContents
    End With
    
    
    m = UBound(a)
    ReDim b(1 To m, 1 To n)
    
    For i = 1 To m
        If a(i, 2) = mA Then
            If a(i, 1) >= dB And a(i, 1) <= dE Then
                If a(i, 4) - Int(a(i, 4)) >= vH Then
                    k = k + 1
                    For j = 1 To n
                        b(k, j) = a(i, j)
                    Next j
                End If
            End If
        End If
    Next i

    If k > 0 Then
        sR.[B9].Resize(k, n) = b
    Else
        MsgBox "Khong co ngay nao thoa man d/k"
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
thử code này có kết quả ,
PHP:
Sub subFilter()    Dim a(), b(), sC As Worksheet, sR As Worksheet    Dim dB As Long, dE As Long, hH, pP, mA, vH As Double    Dim m As Long, n As Long, i As Long, j As Long, k As Long        Set sC = Sheet1    Set sR = Sheet2    n = 6        With sC        a = .Range(.[B3], .[C65536].End(xlUp)).Resize(, n).Value2    End With        With sR        mA = .[D1].Value2        dB = .[D2].Value2        dE = .[D3].Value2        vH = .[D4].Value2 / 24 + .[D5].Value2 / 60 / 24                .[B9].Resize(10000, n).ClearContents    End With            m = UBound(a)    ReDim b(1 To m, 1 To n)        For i = 1 To m        If a(i, 2) = mA Then            If a(i, 1) >= dB And a(i, 1) = vH Then                    k = k + 1                    For j = 1 To n                        b(k, j) = a(i, j)                    Next j                End If            End If        End If    Next i    If k > 0 Then        sR.[B9].Resize(k, n) = b    Else        MsgBox "Khong co ngay nao thoa man d/k"    End IfEnd Sub
về mặt giờ thì ok nhưng về phút thì chưa đúng lắm anh ơiyêu cầu là giờ và phút tại sheet 1(cột giờ đến) lớn hơn hoặc bằng D4 và D5 sheet 2 trong đoạn code trên em thử thì phút lấy lớn hơn tại D5, ví dụ: mã 2003 chọn ngày từ 10-31/8 chọn 9h 35 phút thì nó chỉ cho ra dữ liệu la từ trên 35 phút còn= 35 phút thì nó ko ra anh xem lại giúp em nhé
 
Upvote 0
về mặt giờ thì ok nhưng về phút thì chưa đúng lắm anh ơiyêu cầu là giờ và phút tại sheet 1(cột giờ đến) lớn hơn hoặc bằng D4 và D5 sheet 2 trong đoạn code trên em thử thì phút lấy lớn hơn tại D5, ví dụ: mã 2003 chọn ngày từ 10-31/8 chọn 9h 35 phút thì nó chỉ cho ra dữ liệu la từ trên 35 phút còn= 35 phút thì nó ko ra anh xem lại giúp em nhé
Thử với cái này coi sao
[GPECODE=vb]Public Sub BuLuXu()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Ma As Long
Dim Ngay1 As Double, Ngay2 As Double, DKGio As Double
With Sheet1
sArr = .Range(.[B3], .[B65536].End(xlUp)).Resize(, 6).Value2
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 6)
With Sheet2
Ngay1 = .[D2].Value2: Ngay2 = .[D3].Value2
Ma = .[D1].Value2: DKGio = TimeSerial(.[D4], .[D5], 0)
For I = 1 To UBound(sArr, 1)
If sArr(I, 2) = Ma Then
If sArr(I, 1) >= Ngay1 Then
If sArr(I, 1) <= Ngay2 Then
If TimeSerial(Hour(sArr(I, 4)), Minute(sArr(I, 4)), 0) >= DKGio Then
K = K + 1
For J = 1 To 6
dArr(K, J) = sArr(I, J)
Next J
End If
End If
End If
End If
Next I
.[B9:G1000].ClearContents
If K Then .[B9].Resize(K, 6) = dArr
End With
End Sub[/GPECODE]
 
Upvote 0
Thử với cái này coi sao
[GPECODE=vb]Public Sub BuLuXu()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, Ma As Long
Dim Ngay1 As Double, Ngay2 As Double, DKGio As Double
With Sheet1
sArr = .Range(.[B3], .[B65536].End(xlUp)).Resize(, 6).Value2
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 6)
With Sheet2
Ngay1 = .[D2].Value2: Ngay2 = .[D3].Value2
Ma = .[D1].Value2: DKGio = TimeSerial(.[D4], .[D5], 0)
For I = 1 To UBound(sArr, 1)
If sArr(I, 2) = Ma Then
If sArr(I, 1) >= Ngay1 Then
If sArr(I, 1) <= Ngay2 Then
If TimeSerial(Hour(sArr(I, 4)), Minute(sArr(I, 4)), 0) >= DKGio Then
K = K + 1
For J = 1 To 6
dArr(K, J) = sArr(I, J)
Next J
End If
End If
End If
End If
Next I
.[B9:G1000].ClearContents
If K Then .[B9].Resize(K, 6) = dArr
End With
End Sub[/GPECODE]
anh ơi
em thử text thì nó vẫn ko ra kết qua đúng e xem file nhé,
em chọn 7h đúng ra nó phải ra 1 dòng có giờ là 7 và 0 phút nhưng nó lại ra cả dòng 10h30 nữa
 

File đính kèm

Upvote 0
anh ơi
em thử text thì nó vẫn ko ra kết qua đúng e xem file nhé,
em chọn 7h đúng ra nó phải ra 1 dòng có giờ là 7 và 0 phút nhưng nó lại ra cả dòng 10h30 nữa
Má ơi! Từ 7 giờ trở lên hay đúng 7giờ? Hay từ 7 đến bi nhiêu? Vòng vo hơn 20 bài vẫn chưa rõ.
Chắc "chạy" quá!
bài này em muốn trích lọc theo nhiều điều kiện,
hiện tại em đã có code trích lọc theo điều kiện mã, ngày bắt đầu ngày kết thúc, nhưng muốn thêm điều kiện giờ và phút tại cột E sheet1 phải lớn hơn hoặc bằng với ô D4 và D5 tại sheet 2 thì không biết phải viết thêm thế nào

vậy nhờ anh chị giúp em phải thêm code thế nào để được kết quả mong muốn nhé.

cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0

Bài viết mới nhất

Back
Top Bottom