Chỉnh lại bài lọc dữ liệu theo điề kiện (1 người xem)

Liên hệ QC

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

overnight_9

strive for mastery
Tham gia
4/7/12
Bài viết
160
Được thích
81
Nghề nghiệp
Công nhân
k/g: bác BATE,
bác chỉnh lạ giúp em bài lọc dữ liêu theo điều kiện, nội dung thay đổi như sau:
1./ File dulieu_tho tách và lọc dữ liệu. Tách dữ liệu căn cứ theo điều kiện của cột nhóm sheet này có 11 nhóm & 11 sheets tương ứng. Trong quá trình tách thì lọc dữ liệu theo 4 cột (B; C; D; E) nếu trùng nhau thì cộng cột số lượng (F) lại, 2 cells ART & Color (G; H) được đưa lên trên để gán số lượng.

2./Sheet Nhom1_X sẽ lấy dữ liệu từ sheet Nhom1 theo 5 điều kiện (J, L, M, N, O) nếu trùng với dl đả có ở sheet Nhom1_X thì bỏ qua nếu không trùng thì dán tiếp phía dưới không đè lên dl đã có. Phần số lượng cũng căn cứ theo 2 cell ART & Color ở trên (Y16 +Y17;.......) nếu 2 cells này trùng nhau thì dán đè lên số lượng củ nếu không trùng nhau thì lấy cột tiếp theo để gán số lượng, (riêng cột số TT thì cho Automatic từ trên xuống dưới)

Các cột khác em có đánh số như sheet(“dulieu_tho”) em đánh số ở dòng 2, & sheet(“Nhom….”) đánh số ở dòng 4 & sheet(“Nhom…X) đánh số ở dòng 23 để khi copy dữ liệu qua đúng vị trí của các cột.

file bác Bate đã có, em cám ơn bác nhiều.
 
gửi lại file đi BÁC em xem với để học hỏi???//
 
overnight thử làm thủ công 1 sheet kết quả xem thế nào? . nhiều lúc đọc cũng không thể trực quan bằng kết quả ví dụ mẫu

Bài này bác BaTe dùng ScriptingDictionary lọc OK,

từ sheet("dulieu_tho") lọc qua các sheets nhóm theo 4 điểu kiện, từ sheet("Nhom1") lọc qua sheet("Nhom1_X") theo 5 điều kiện.

& chuyển các cột qua đúng vị trí thôi

nhờ các anh & bác BaTe giúp em tí.
 

File đính kèm

Mình vọc ngồn code củ của bác BaTe, giờ nó chạy từa lưa hết trơn đau đầu thật, hok biết bác BaTe có để ý toptic help của không nữa.
 
Mình đính kèm file (nhờ bác BaTe giúp em chỉnh lại tí xíu)
Hổng dám một tí xíu đâu. Đưa file lên có miếng Code nào đâu mà chỉnh?
Dữ liệu sheet này nó nằm cột này, sheet khác nó nằm cột khác, dò qua dò lại muốn "lòi con mắt".
Sao lại tạo chi phiền phức thế nhỉ?
 

File đính kèm

Hổng dám một tí xíu đâu. Đưa file lên có miếng Code nào đâu mà chỉnh?
Dữ liệu sheet này nó nằm cột này, sheet khác nó nằm cột khác, dò qua dò lại muốn "lòi con mắt".
Sao lại tạo chi phiền phức thế nhỉ?

Cám ơn bác BaTe nhiều!
 
Lần chỉnh sửa cuối:
Hổng dám một tí xíu đâu. Đưa file lên có miếng Code nào đâu mà chỉnh?
Dữ liệu sheet này nó nằm cột này, sheet khác nó nằm cột khác, dò qua dò lại muốn "lòi con mắt".
Sao lại tạo chi phiền phức thế nhỉ?


Kg: bác BaTe,
bác xem giúp em code GPE2 sheet("Nhom1_X"),
1./ Chưa mặc định dòng dữ liệu đầu tiên là dòng 24, nếu double click macro 2 lần cho 1 kỳ nhập liệu từ sheet("Nhom1) qua thì nó sẽ đẩy dữ liệu từ dòng 23 xuống 24.
2./Vì sheet("Nhom1_X") là sheet gốc, nếu dữ liệu không trùng lặp thì sẽ sử dụng hết 256 cột và khoảng 40,000 dòng trong vòng 6 tháng, đến lúc nhiều dl thì lộn 1 èo thì coi như xong film.

Mong bác check lại giúp phần này. em cảm ơn
 
Lần chỉnh sửa cuối:
Kg: bác BaTe,
bác xem giúp em code GPE2 sheet("Nhom1_X"),
1./ Chưa mặt định dòng dữ liệu đầu tiên là dòng 24, nếu double click macro 2 lần cho 1 kỳ nhập liệu từ sheet("Nhom1) qua thì nó sẽ đẫy dữ liệu từ dòng 23 xuống 24.
2./Vì sheet("Nhom1_X") là sheet gốc, nếu dữ liệu không trùng lập thì sẽ sữ dụng hết 256 cột và khoảng 40,000 dòng trong vòng 6 tháng, đến lúc nhiều dl thì lộn 1 èo thì coi như xong film.

Mong bác check lại giúp phần này. em cảm ơn
Bạn đọc bài này :
http://www.giaiphapexcel.com/forum/...-một-số-ký-tự-trong-chuỗi&p=426875#post426875
Phải chi nói rõ từ đầu mọi chuyện thì người khác khỏi "phí công".
Viết Code từ đầu còn dễ hơn sửa từng chút, từng chút, có khi sửa không hết lỗi.
Bạn kiểm tra lại nhé.(Chính tả tiếng Việt sao bị lỗi nhiều hơn tiếng Anh thế?)
PHP:
Public Sub GPE2()
Dim Rng1(), Rng2(), Arr1(), Arr2(), I As Long, J As Long, K As Long, N As Long
Dim Dic1 As Object, Dic2 As Object, Cll As Range, Tem As String
Set Dic1 = CreateObject("Scripting.Dictionary")
Set Dic2 = CreateObject("Scripting.Dictionary")
ReDim Arr1(1 To 2, 1 To 250)
    For Each Cll In Sheets("Nhom1_X").[Y16:IV16]
        If Cll.Value <> "" Then
            N = N + 1
            Dic1.Add (Cll.Value & Cll.Offset(1).Value), N
            Arr1(1, N) = Cll.Value: Arr1(2, N) = Cll.Offset(1).Value
        End If
    Next
        For Each Cll In Sheets("Nhom1").[S2:AH2]
            If Not Dic1.Exists(Cll.Value & Cll.Offset(1).Value) Then
                N = N + 1
                Dic1.Add (Cll.Value & Cll.Offset(1).Value), N
                Arr1(1, N) = Cll.Value: Arr1(2, N) = Cll.Offset(1).Value
            End If
        Next
'---------------------------------------
    ReDim Arr2(1 To 65000, 1 To 250)
If Sheets("Nhom1_X").[A65000].End(xlUp).Row > 23 Then
    Rng1 = Sheets("Nhom1_X").Range([A24], [A65000].End(xlUp)).Resize(, 250).Value
    For I = 1 To UBound(Rng1, 1)
        If Not Dic2.Exists(Rng1(I, 16) & Rng1(I, 19) & Rng1(I, 21) & Rng1(I, 18) & Rng1(I, 20)) Then
            K = K + 1
            Dic2.Add (Rng1(I, 16) & Rng1(I, 19) & Rng1(I, 21) & Rng1(I, 18) & Rng1(I, 20)), K
                For J = 1 To 100
                    Arr2(K, J) = Rng1(I, J)
                Next J
        End If
    Next I
End If
    With Sheets("Nhom1")
    If .[A65000].End(xlUp).Row > 4 Then
        Rng2 = .Range(.[A5], .[A65000].End(xlUp)).Resize(, 40).Value
        For I = 1 To UBound(Rng2, 1)
                Tem = Rng2(I, 10) & Rng2(I, 13) & Rng2(I, 15) & Rng2(I, 12) & Rng2(I, 14)
            If Not Dic2.Exists(Tem) Then
                K = K + 1
                Dic2.Add (Tem), K
                Arr2(K, 1) = K: Arr2(K, 2) = Rng2(I, 2): Arr2(K, 3) = Rng2(I, 3): Arr2(K, 4) = Rng2(I, 4)
                Arr2(K, 10) = Rng2(I, 8): Arr2(K, 11) = Rng2(I, 9): Arr2(K, 13) = Rng2(I, 5): Arr2(K, 14) = Rng2(I, 6)
                Arr2(K, 15) = Rng2(I, 7): Arr2(K, 16) = Rng2(I, 10): Arr2(K, 18) = Rng2(I, 12): Arr2(K, 19) = Rng2(I, 13)
                Arr2(K, 20) = Rng2(I, 14): Arr2(K, 21) = Rng2(I, 15)
            End If
                For J = 19 To 40
                    If Rng2(I, J) <> "" Then
                        Arr2(Dic2.Item(Tem), Dic1.Item(.Cells(2, J) & .Cells(3, J)) + 24) = Rng2(I, J)
                    End If
                Next J
        Next I
    End If
    End With
    If N Then Sheets("Nhom1_X").[Y16].Resize(2, N).Value = Arr1
    If K Then Sheets("Nhom1_X").[A24].Resize(K, 250).Value = Arr2
Set Dic1 = Nothing
Set Dic2 = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Bạn đọc bài này :
Phải chi nói rõ từ đầu mọi chuyện thì người khác khỏi "phí công".
Viết Code từ đầu còn dễ hơn sửa từng chút, từng chút, có khi sửa không hết lỗi.
Bạn kiểm tra lại nhé.(Chính tả tiếng Việt sao bị lỗi nhiều hơn tiếng Anh thế?)
[/PHP]

Cám ơn thầy, đúng là sai chính tả trầm trọng, phải khắc phục cái này triệt để. HIC HIC.

em ngồi vọc code của thầy nhũng não luôn, không ra mới gọi thầy đó. cám ơn thầy nhé.
 
Lần chỉnh sửa cuối:
dear bác BaTe,
bác giúp em giải thích đoạn code này tí xíu, ngâm từ trên xuống đã hiểu, nhưng đến đoạn này không hiểu.
PHP:
End If
                For J = 19 To 40
                    If Rng2(I, J) <> "" Then
                        Arr2(Dic2.Item(Tem), Dic1.Item(.Cells(2, J) & .Cells(3, J)) + 24) = Rng2(I, J)


em đang gom code về 1 sheet & 1 file và đoạn code này bị lỗi là khi update số lượng mới thì code clear hết s.lượng củ đi (không dán đè mà clear) và để gán số lượng mới.
nhờ bác giải thích sơ sơ 1 chút để em ngâm và chỉnh lại, em cám ơn
 
Lần chỉnh sửa cuối:
dear bác BaTe,
bác giúp em giải thích đoạn code này tí xíu, ngâm từ trên xuống đã hiểu, nhưng đến đoạn này không hiểu.
PHP:
End If
                For J = 19 To 40
                    If Rng2(I, J) <> "" Then
                        Arr2(Dic2.Item(Tem), Dic1.Item(.Cells(2, J) & .Cells(3, J)) + 24) = Rng2(I, J)


em đang gom code về 1 sheet & 1 file và đoạn code này bị lỗi là khi update số lượng mới thì code clear hết s.lượng củ đi (không dán đè mà clear) và để gán số lượng mới.
nhờ bác giải thích sơ sơ 1 chút để em ngâm và chỉnh lại, em cám ơn

em tìm ra rồi bác BaTe ơi,
thiếu mỗi chỗ này mà code hành quá,

PHP:
If Rng2(I, J) <> "" Or Rng2(I, J) <= 0 Then

phải cho thêm 1 điều kiện trước khi gán số nữa là "<=0" code mới chịu tha cho HIC.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom