Lọc các dòng mà 1 người làm liên tiếp từ 3 ngày trở lên bằng Advance Filter (2 người xem)

  • Thread starter Thread starter LinDan
  • Ngày gửi Ngày gửi
Liên hệ QC

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

LinDan

Thành viên tiêu biểu
Tham gia
8/2/12
Bài viết
412
Được thích
111
Bài toán của em là nếu người A làm trong 3 ngày liên tiếp trở lên tức là không gián đoạn (1/1;1/2;1/3) thì ta lọc 3 ngày này ra

Trong file đính kèm những dòng cần lọc em minh họa bằng việc bôi đỏ. Em đang luyện tập về Advanced Filter, rất mong mọi người chỉ dùm yêu cầu trên có thể làm bằng cách này hay không? (nếu không có thể làm bằng cách khác).
 

File đính kèm

Bài toán của em là nếu người A làm trong 3 ngày liên tiếp trở lên tức là không gián đoạn (1/1;1/2;1/3) thì ta lọc 3 ngày này ra

Trong file đính kèm những dòng cần lọc em minh họa bằng việc bôi đỏ. Em đang luyện tập về Advanced Filter, rất mong mọi người chỉ dùm yêu cầu trên có thể làm bằng cách này hay không? (nếu không có thể làm bằng cách khác).
Hổng biết Advanced Filter có làm được không, nếu được chắc phải thêm cột phụ.
Làm thử bằng VBA xem nó hoạt động ra sao.
Hơi bị "lùng bùng" chắc code còn "lòng thòng" nhiều.
PHP:
Public Sub GPE()
Dim Rng(), Arr(), I As Long, J As Long, K As Long,  Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
    Rng = Range([A3], [A65000].End(xlUp)).Resize(, 2).Value
ReDim Arr(1 To UBound(Rng, 1), 1 To 2)
    For I = 3 To UBound(Rng, 1)
        If Rng(I, 1) - 1 = Rng(I - 1, 1) And Rng(I, 1) - 2 = Rng(I - 2, 1) And Rng(I, 2) = Rng(I - 1, 2) And Rng(I, 2) = Rng(I - 2, 2) Then
            If Not Dic.Exists(Rng(I - 2, 1) & Rng(I - 2, 2)) Then
                Dic.Add Rng(I - 2, 1) & Rng(I - 2, 2), ""
                K = K + 1
                Arr(K, 1) = Rng(I - 2, 1): Arr(K, 2) = Rng(I - 2, 2)
            End If
            If Not Dic.Exists(Rng(I - 1, 1) & Rng(I - 1, 2)) Then
                Dic.Add Rng(I - 1, 1) & Rng(I - 1, 2), ""
                K = K + 1
                Arr(K, 1) = Rng(I - 1, 1): Arr(K, 2) = Rng(I - 1, 2)
            End If
                K = K + 1
                Dic.Add Rng(I, 1) & Rng(I, 2), ""
                Arr(K, 1) = Rng(I, 1): Arr(K, 2) = Rng(I, 2)
        End If
    Next I
If K Then [D3].Resize(K, 2).Value = Arr
Set Dic = Nothing
End Sub
 
Tham khảo thêm 1 file này nữa nè!
 

File đính kèm

Nhờ lọc ra số người đạt CSTĐ cấp cơ sở từ 3 năm liên tiếp trở lên

Xin cảm ơn các thày rất nhiều, ví dụ này em đưa ra xuất phát từ tình huống bài toán nhân sự: Hãy lọc ra những người là Chiến sĩ thi đua cấp cơ sở trong 3 năm liên tiếp (dữ liệu nó gần tương tự như thế này).

Về Code thì các thày có rất nhiều cách giải quyết, nó giúp em có thêm cơ hội để học tập các phương án xử lý bài toán. Tuy nhiên, em muốn nghiên cứu kỹ cái vụ Advance Filter trước, xem nó có khả năng xử lý vụ này không?

-----------------
Em xin gửi file dữ liệu bài toán cơ quan em lên,
Yêu cầu bài toán: hãy trích lọc ra những người đạt chiến sĩ thi đua cấp cơ sở từ 3 năm liên tiếp trở lên (tức 4,5 năm liên tiếp đều được...)

Kính mong nhận được sự quan tâm, giúp đỡ
 

File đính kèm

Lần chỉnh sửa cuối:
Xin cảm ơn các thày rất nhiều, ví dụ này em đưa ra xuất phát từ tình huống bài toán nhân sự: Hãy lọc ra những người là Chiến sĩ thi đua cấp cơ sở trong 3 năm liên tiếp (dữ liệu nó gần tương tự như thế này).

Về Code thì các thày có rất nhiều cách giải quyết, nó giúp em có thêm cơ hội để học tập các phương án xử lý bài toán. Tuy nhiên, em muốn nghiên cứu kỹ cái vụ Advance Filter trước, xem nó có khả năng xử lý vụ này không?

-----------------
Em xin gửi file dữ liệu bài toán cơ quan em lên,
Yêu cầu bài toán: hãy trích lọc ra những người đạt chiến sĩ thi đua cấp cơ sở từ 3 năm liên tiếp trở lên (tức 4,5 năm liên tiếp đều được...)

Kính mong nhận được sự quan tâm, giúp đỡ
Muốn nghiên cứu AF thì cứ nghiên cứu.
Xem tạm VBA này đi.
Tên nhập không giống nhau là "ùi"
 

File đính kèm

Cái ni gần giống với AdvancedFilter hơn nè

--=0 --=0 --=0
}}}}} }}}}} }}}}}
-=.,, -=.,, -=.,,
 

File đính kèm

Web KT

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

Back
Top Bottom