Lọc dữ liệu bằng VBA

Liên hệ QC

gianghan_ks

Thành viên mới
Tham gia
2/11/18
Bài viết
4
Được thích
0
NHờ các thành viên giúp tôi lọc dữ liệu ra một sheet khác theo file đính kèm
 

File đính kèm

  • Loc du lieu theo ngay.xls
    23 KB · Đọc: 14
NHờ các thành viên giúp tôi lọc dữ liệu ra một sheet khác theo file đính kèm
em nói ở đây lọc theo ngày nhưng mà có cả trường hợp nghỉ việc nữa là sao mà sao biết họ đã nghỉ và nghỉ từ ngày nào em phải nêu rõ ra chứ
 
em nói ở đây lọc theo ngày nhưng mà có cả trường hợp nghỉ việc nữa là sao mà sao biết họ đã nghỉ và nghỉ từ ngày nào em phải nêu rõ ra chứ
Em đã ghi ngày nghỉ rồi mà. Chốt tại cột làm việc đến ngày.
Bài đã được tự động gộp:

Em đã ghi ngày nghỉ rồi mà. Chốt tại cột làm việc đến ngày.
em nói ở đây lọc theo ngày nhưng mà có cả trường hợp nghỉ việc nữa là sao mà sao biết họ đã nghỉ và nghỉ từ ngày nào em phải nêu rõ ra chứ
Trong phần ví dụ đó a/c
Bài đã được tự động gộp:

em nói ở đây lọc theo ngày nhưng mà có cả trường hợp nghỉ việc nữa là sao mà sao biết họ đã nghỉ và nghỉ từ ngày nào em phải nêu rõ ra chứ
Sẽ đối chiếu cột ngày vào làm và cột Làm đến ngày để lọc danh sách.
 
Em đã ghi ngày nghỉ rồi mà. Chốt tại cột làm việc đến ngày.
Bài đã được tự động gộp:



Trong phần ví dụ đó a/c
Bài đã được tự động gộp:


Sẽ đối chiếu cột ngày vào làm và cột Làm đến ngày để lọc danh sách.
Đọc thì cũng hiểu nhưng ví dụ lung tung, lúc 7, lúc 8, ra kết quả lúc 8 lúc 7.
Ngày vào 2/10/2018, làm đến 30/9/2018, do nhập "tào lao" hay thực tế thế nào?
 

File đính kèm

  • Loc du lieu theo ngay.xlsm
    24.6 KB · Đọc: 12
Lần chỉnh sửa cuối:
Bạn xài macro sự kiện này tại trang 'Data':
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [C2]) Is Nothing Then
    Dim Rws As Long, Dat As Date, J As Long
    Dim hRng As Range
   
    Rws = [B4].CurrentRegion.Rows.Count
    Rows("4:" & Rws + 5).Hidden = False
    Dat = Target.Value
    For J = 4 To Rws + 4
        If Cells(J, "C").Value > Dat Or Cells(J, "D").Value < Dat Then
                Rows(J & ":" & J).Hidden = True
        Else
        End If
    Next J
End If
End Sub
Chúc vui & thành công!
 
Đọc thì cũng hiểu nhưng ví dụ lung tung, lúc 7, lúc 8, ra kết quả lúc 8 lúc 7.
Ngày vào 2/10/2018, làm đến 30/9/2018, do nhập "tào lao" hay thực tế thế nào?
Đây là ví dụ để em chốt lại. Ví như em dò lại (khi cần em kiểm tra lại ngày đó có những nhân viên nào, tại thời điểm ngày 30/9/2018.
khi lọc, danh sách sẽ đối chiếu cột C và D trong sheet data để chọn kết quả chính xác là có bao nhiêu nhân viên tại thời điểm đó (nó sẽ loại ra những người vào làm sau (cột C) và những người nghỉ trước ngày lọc (cột D).
Vậy đó anh
Bài đã được tự động gộp:

Đọc thì cũng hiểu nhưng ví dụ lung tung, lúc 7, lúc 8, ra kết quả lúc 8 lúc 7.
Ngày vào 2/10/2018, làm đến 30/9/2018, do nhập "tào lao" hay thực tế thế nào?
Anh bỏ cho em hiển thị cột J và K trong "sheet DS hien tai" giúp
 
Lần chỉnh sửa cuối:
Đây là ví dụ để em chốt lại. Ví như em dò lại (khi cần em kiểm tra lại ngày đó có những nhân viên nào, tại thời điểm ngày 30/9/2018.
khi lọc, danh sách sẽ đối chiếu cột C và D trong sheet data để chọn kết quả chính xác là có bao nhiêu nhân viên tại thời điểm đó (nó sẽ loại ra những người vào làm sau (cột C) và những người nghỉ trước ngày lọc (cột D).
Vậy đó anh

- Bạn vẫn chưa hiểu? Bạn tùy tiện nhập thí thí ngày vào, ngày nghỉ.
Sao có chuyện vào 2/10/2018 mà nghỉ ngày 30/9/2018? Giả lập dữ liệu cũng phải hợp lý, tôn trọng người đọc chứ.
Anh bỏ cho em hiển thị cột J và K trong "sheet DS hien tai" giúp

- Phải bỏ Merge Cells các ô trong các dòng trong bảng.
- Vào Module. Thay Sub cũ thành Sub này :
PHP:
Public Sub sGpe()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Ngay As Long
sArr = Sheets("data").Range("B4", Sheets("data").Range("B4").End(xlDown)).Resize(, 8).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 7)
With Sheets("DS hien tai")
    Ngay = .Range("C3").Value
    For I = 1 To R
        If sArr(I, 2) <= Ngay Then
            If sArr(I, 3) >= Ngay Then
                K = K + 1
                dArr(K, 1) = K
                dArr(K, 2) = sArr(I, 1)
                For J = 3 To 7
                    dArr(K, J) = sArr(I, J + 1)
                Next J
            End If
        End If
    Next I
    .Range("A5").Resize(1000, 7).ClearContents
    If K Then .Range("A5").Resize(K, 7) = dArr
End With
End Sub
 

File đính kèm

  • Loc du lieu theo ngay.rar
    20.9 KB · Đọc: 10
Lần chỉnh sửa cuối:
- Bạn vẫn chưa hiểu? Bạn tùy tiện nhập thí thí ngày vào, ngày nghỉ.
Sao có chuyện vào 2/10/2018 mà nghỉ ngày 30/9/2018? Giả lập dữ liệu cũng phải hợp lý, tôn trọng người đọc chứ.
- Phải bỏ Merge Cells các ô trong các dòng trong bảng.
- Vào Module. Thay Sub cũ thành Sub này :
PHP:
Public Sub sGpe()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Ngay As Long
sArr = Sheets("data").Range("B4", Sheets("data").Range("B4").End(xlDown)).Resize(, 8).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 7)
With Sheets("DS hien tai")
    Ngay = .Range("C3").Value
    For I = 1 To R
        If sArr(I, 2) <= Ngay Then
            If sArr(I, 3) >= Ngay Then
                K = K + 1
                dArr(K, 1) = K
                dArr(K, 2) = sArr(I, 1)
                For J = 3 To 7
                    dArr(K, J) = sArr(I, J + 1)
                Next J
            End If
        End If
    Next I
    .Range("A5").Resize(1000, 7).ClearContents
    If K Then .Range("A5").Resize(K, 7) = dArr
End With
End Sub
Cảm ơn anh đã giúp.
thật sự em hiểu ý anh nói. Do cột D của data em để hàm =$C$5 của sheet DS hien tại, ý em muốn nhập là để cho dữ liệu của ngày chốt mình dò tìm để kiểm tra; những người nghỉ làm em sẻ nhập chốt ngày cụ thể vào ô D... tương ứng , đồng thời đánh dấu x tại cột chuyển. Vậy đó anh
 
Web KT

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

Back
Top Bottom