So sánh và lọc trùng bằng ký tự

Liên hệ QC

vanhesing

Thành viên thường trực
Tham gia
12/8/10
Bài viết
223
Được thích
30
Chào cả nhà!
Lâu rồi mới vô lại rum . Chúc cả nhà một ngày vui vẻ.
Mọi người vui lòng xem file đính kèm và giúp mình hiểu thêm về phần này .
-Ở cột A là danh sách số chứng từ nợ và có .
Mình muốn lọc ra những chứng từ về phần "co" dựa vào 4 ký tự đầu (mã nv ) = với cell B1.sau đó copy qua cột C .
- Sau đó , lọc ra những chứng từ về phần "no" cũng dựa vào 4 ký tự đầu = cell B1. Sau đó copy qua cột D với điều kiện là 4 ký tự cuối của cột C và cột D bằng nhau .
PS : có nhiều trường hợp , ví dụ như có khi chứng từ "CO" có trước chứng từ "NO" và ngược lại
Mong mọi người giúp đỡ
 

File đính kèm

  • sosanh.xls
    15 KB · Đọc: 40
Chào cả nhà!
Lâu rồi mới vô lại rum . Chúc cả nhà một ngày vui vẻ.
Mọi người vui lòng xem file đính kèm và giúp mình hiểu thêm về phần này .
-Ở cột A là danh sách số chứng từ nợ và có .
Mình muốn lọc ra những chứng từ về phần "co" dựa vào 4 ký tự đầu (mã nv ) = với cell B1.sau đó copy qua cột C .
- Sau đó , lọc ra những chứng từ về phần "no" cũng dựa vào 4 ký tự đầu = cell B1. Sau đó copy qua cột D với điều kiện là 4 ký tự cuối của cột C và cột D bằng nhau .
PS : có nhiều trường hợp , ví dụ như có khi chứng từ "CO" có trước chứng từ "NO" và ngược lại
Mong mọi người giúp đỡ
Bạn coi File đính kèm xem thử đã đúng yêu cầu của mình chưa nhé!
 

File đính kèm

  • sosanh1.xls
    17 KB · Đọc: 50
:((((((((((((((((((((((((((((((((((((((((
Thật ra đề bài này còn mấy chỗ phải làm rõ nhưng vì thấy ((((((( nhiều quá nên +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+ phải viết thôi
Mã:
Public Sub LocMai()
    Dim Vung, Cll, VungC, I, Mg(), Dk
    Vung = Range([a1], [a1000].End(xlUp)).Value
    ReDim Mg(1 To UBound(Vung), 1 To 1)
    [c2:d1000].ClearContents
        For I = 1 To UBound(Vung)
            Mg(I, 1) = Vung(I, 1)
            If Left(Vung(I, 1), 6) = [b1] & "CO" Then [c1000].End(xlUp)(2) = Vung(I, 1)
        Next I
            Set VungC = Range([c2], [c1000].End(xlUp))
            For Each Cll In VungC
                Dk = Replace(Cll, "C", "N")
                    For I = 1 To UBound(Vung)
                        If Dk = Mg(I, 1) Then
                            Cll.Offset(, 1) = Mg(I, 1)
                            Mg(I, 1) = vbNullString
                            Exit For
                        End If
                    Next I
            Next Cll
End Sub
Chạy thử code này, nếu trúng thì tốt, trật "záng" chịu :blowup::blowup::blowup:

Thân
 
Thật ra đề bài này còn mấy chỗ phải làm rõ nhưng vì thấy ((((((( nhiều quá nên +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+ phải viết thôi
Mã:
Public Sub LocMai()
    Dim Vung, Cll, VungC, I, Mg(), Dk
    Vung = Range([a1], [a1000].End(xlUp)).Value
    ReDim Mg(1 To UBound(Vung), 1 To 1)
    [c2:d1000].ClearContents
        For I = 1 To UBound(Vung)
            Mg(I, 1) = Vung(I, 1)
            If Left(Vung(I, 1), 6) = [b1] & "CO" Then [c1000].End(xlUp)(2) = Vung(I, 1)
        Next I
            Set VungC = Range([c2], [c1000].End(xlUp))
            For Each Cll In VungC
                Dk = Replace(Cll, "C", "N")
                    For I = 1 To UBound(Vung)
                        If Dk = Mg(I, 1) Then
                            Cll.Offset(, 1) = Mg(I, 1)
                            Mg(I, 1) = vbNullString
                            Exit For
                        End If
                    Next I
            Next Cll
End Sub
Chạy thử code này, nếu trúng thì tốt, trật "záng" chịu :blowup::blowup::blowup:

Thân
Hic , Anh concogia vui tính quá ^^
Em down về rồi coi sơ thấy ổn , lát rảnh em xem kĩ lại ^^
Cám ơn anh nhiều
 
Thật ra đề bài này còn mấy chỗ phải làm rõ nhưng vì thấy ((((((( nhiều quá nên +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+ phải viết thôi
Mã:
Public Sub LocMai()
    Dim Vung, Cll, VungC, I, Mg(), Dk
    Vung = Range([a1], [a1000].End(xlUp)).Value
    ReDim Mg(1 To UBound(Vung), 1 To 1)
    [c2:d1000].ClearContents
        For I = 1 To UBound(Vung)
            Mg(I, 1) = Vung(I, 1)
            If Left(Vung(I, 1), 6) = [b1] & "CO" Then [c1000].End(xlUp)(2) = Vung(I, 1)
        Next I
            Set VungC = Range([c2], [c1000].End(xlUp))
            For Each Cll In VungC
                Dk = Replace(Cll, "C", "N")
                    For I = 1 To UBound(Vung)
                        If Dk = Mg(I, 1) Then
                            Cll.Offset(, 1) = Mg(I, 1)
                            Mg(I, 1) = vbNullString
                            Exit For
                        End If
                    Next I
            Next Cll
End Sub
Chạy thử code này, nếu trúng thì tốt, trật "záng" chịu :blowup::blowup::blowup:

Thân
Hi anh concogia !
Code anh OK quá , nhưng em muốn biến tấu thêm chút nữa , phiền anh cho em 1 gợi ý .
Sau khi code anh lọc ra được theo ý em . giờ em mún filter lọc bỏ những cái trùng nhau với điều kiện :
- cả nợ và có đều giống nhau số nhảy ( 4 ký tự cuối ) , mã nhân viên đều giống nhau (3 ký tự đầu )
- Mỗi một lần Có là 1 lần xuất 1 vật tư . mỗi lần Nợ là 1 lần nhập VT .nếu "Có" có 4 lần xuất thì "Nợ" cũng có 4 lần nhập nên ta lọc bỏ trùng chỉ lấy 1 lần "có " và 1 lần "nợ"(đương nhiên phải bằng nhau )
- Nếu "có " có 4 lần xuất mà "nợ" chỉ có 3 lần xuất , nghĩa là còn nợ lại 1 lần nên khi lọc bỏ trùng như trên ta chỉ thấy được 1 lần "co" mà ko thấy được 1 lần "nợ" để ta nhìn vào biết được trong số phiếu này vẫn còn nợ ta 1 lần nợ .....!
Hic em diễn giải vậy ko biết có dễ hiểu ko !!!Phiền Anh !
Thanks
 
Hi anh concogia !
Code anh OK quá , nhưng em muốn biến tấu thêm chút nữa , phiền anh cho em 1 gợi ý .
Sau khi code anh lọc ra được theo ý em . giờ em mún filter lọc bỏ những cái trùng nhau với điều kiện :
- cả nợ và có đều giống nhau số nhảy ( 4 ký tự cuối ) , mã nhân viên đều giống nhau (3 ký tự đầu )
- Mỗi một lần Có là 1 lần xuất 1 vật tư . mỗi lần Nợ là 1 lần nhập VT .nếu "Có" có 4 lần xuất thì "Nợ" cũng có 4 lần nhập nên ta lọc bỏ trùng chỉ lấy 1 lần "có " và 1 lần "nợ"(đương nhiên phải bằng nhau )
- Nếu "có " có 4 lần xuất mà "nợ" chỉ có 3 lần xuất , nghĩa là còn nợ lại 1 lần nên khi lọc bỏ trùng như trên ta chỉ thấy được 1 lần "co" mà ko thấy được 1 lần "nợ" để ta nhìn vào biết được trong số phiếu này vẫn còn nợ ta 1 lần nợ .....!
Hic em diễn giải vậy ko biết có dễ hiểu ko !!!Phiền Anh !
Thanks
Cũng chưa hiểu lắm, làm đại thế này xem, trúng trật ....hên xui thôi ( kết quả ở C1 nhé)
Mã:
Public Sub LocMai123()
    Dim Vung, I, MgA(), Dk, d, iDau, iCuoi, K, MgKq(), Thay
    Set d = CreateObject("scripting.dictionary")
    Set Vung = Range([a1], [a1000].End(xlUp))
    ReDim MgA(1 To Vung.Rows.Count, 1 To 1)
    [c1:d1000].ClearContents
    K = 1
        For I = 1 To Vung.Rows.Count
            If Left(Vung(I), 6) = [b1] & "CO" And Not d.exists(Vung(I).Value) Then
                d.Add Vung(I).Value, Nothing
                MgA(K, 1) = Vung(I)
                K = K + 1
            End If
        Next I
            ReDim MgKq(1 To K - 1, 1 To 2)
            For I = 1 To K - 1
                Thay = Replace(MgA(I, 1), "CO", "NO")
                    With Application.WorksheetFunction
                        iDau = .CountIf(Vung, MgA(I, 1))
                        iCuoi = .CountIf(Vung, Thay)
                    End With
                            If iDau = iCuoi Then
                                MgKq(I, 1) = MgA(I, 1): MgKq(I, 2) = Thay
                            Else
                                MgKq(I, 1) = MgA(I, 1): MgKq(I, 2) = vbNullString
                            End If
            Next I
            [c1].Resize(K - 1, 2) = MgKq
End Sub
Mù mờ hiểu là bao giờ "CO" cũng nhiều hơn "NO", nhưng nếu rủi "CO" 4 lần, "NO" 2 lần, hoặc "CO" 8 lần mà "NO" 3 lần thì kết quả ???????????????? Híc
Thân
 
Lần chỉnh sửa cuối:
Cũng chưa hiểu lắm, làm đại thế này xem, trúng trật ....hên xui thôi ( kết quả ở C1 nhé)
Mã:
Public Sub LocMai123()
    Dim Vung, I, MgA(), Dk, d, iDau, iCuoi, K, MgKq(), Thay
    Set d = CreateObject("scripting.dictionary")
    Set Vung = Range([a1], [a1000].End(xlUp))
    ReDim MgA(1 To Vung.Rows.Count, 1 To 1)
    [c1:d1000].ClearContents
    K = 1
        For I = 1 To Vung.Rows.Count
            If Left(Vung(I), 6) = [b1] & "CO" And Not d.exists(Vung(I).Value) Then
                d.Add Vung(I).Value, Nothing
                MgA(K, 1) = Vung(I)
                K = K + 1
            End If
        Next I
            ReDim MgKq(1 To K - 1, 1 To 2)
            For I = 1 To K - 1
                Thay = Replace(MgA(I, 1), "CO", "NO")
                    With Application.WorksheetFunction
                        iDau = .CountIf(Vung, MgA(I, 1))
                        iCuoi = .CountIf(Vung, Thay)
                    End With
                            If iDau = iCuoi Then
                                MgKq(I, 1) = MgA(I, 1): MgKq(I, 2) = Thay
                            Else
                                MgKq(I, 1) = MgA(I, 1): MgKq(I, 2) = vbNullString
                            End If
            Next I
            [c1].Resize(K - 1, 2) = MgKq
End Sub
Mù mờ hiểu là bao giờ "CO" cũng nhiều hơn "NO", nhưng nếu rủi "CO" 4 lần, "NO" 2 lần, hoặc "CO" 8 lần mà "NO" 3 lần thì kết quả ???????????????? Híc
Thân
Đầu tiên . Câu "chưa hiểu lắm " của anh khiến em thấy mình nhỏ bé quá vì kết quả rất ok .
- Dù ok nhưng lại phát sinh thêm trường hợp oái ăm nữa . hic hic . sẽ có trường họp hiện trạng nữa. ví dụ em xuất thiết bị đó hiện trang tốt , số lượng 2 (chỉ tốn 1 dòng ). khi nhập về thì 1 cái hư 1 cái tốt (phải tốn 2 dòng ) ,hoặc là trường hợp "phân loại" có loại vật tư thuộc nhóm "xác đổi xác " có loại thuộc "hao mòn " có loại thuộc sử dụng , "xác đổi xác " thì buộc phải Có và Nợ , còn 2 cái kia thì khi xuất là đi luôn ko cần tính Có và Nợ !!!!!!!!! vì vậy kết quả đưa ra cũng ko được khả quan lắm nên chắc em phải chịu khó căng mắt sử dụng module đầu tiên anh đã làm cho em . hic hic (nhờ vả nhiều quá cũng ngại . hihihihi)
Thư Hai .ở câu "Mù mờ hiểu là bao giờ "CO" cũng nhiều hơn "NO"" em xin nói thêm là vật tư em xuất là thiết bị nên khi tính công nợ kiểu này là theo kiểu xác đổi xác , miễn xuất 2 thì phải nhập 2 (phụ thuộc vào hiện trạng,phân loại ,...) xuất 2 mà nhập 1 thì sẽ đòi cho bằng được .
Thư 3 . Công việc em như là đang đi vào bế tắc ................:(((((((
PS: Anh cho em hỏi 1 câu ngắn gọn nha.bây giờ dùng code như thế nào để copy
(ko lọc bỏ trùng ) vùng data chọn lọc dựa trên 1 dk . ví dụ vùng data gốc từ A1đến Z1000, khi đã thỏa dk thì sẽ chọn lọc copy da ta của cột B, cột D,cột E sang sheet khác chứ ko phải là copy từ A đến Z. Hiện em chỉ làm được việc copy từ A đến Z. hic
Thanks anh

 
Đầu tiên . Câu "chưa hiểu lắm " của anh khiến em thấy mình nhỏ bé quá vì kết quả rất ok .
PS: Anh cho em hỏi 1 câu ngắn gọn nha.bây giờ dùng code như thế nào để copy(ko lọc bỏ trùng ) vùng data chọn lọc dựa trên 1 dk . ví dụ vùng data gốc từ A1đến Z1000, khi đã thỏa dk thì sẽ chọn lọc copy da ta của cột B, cột D,cột E sang sheet khác chứ ko phải là copy từ A đến Z. Hiện em chỉ làm được việc copy từ A đến Z. hic
Thanks anh
Việc lọc dữ liệu xong đem đi chỗ khác có nhiều cách, đâu biết bạn sử dụng kiểu gì mà trả lời, ngắn gọn thế này:
1)- Lọc bằng autofilter theo điều kiện ==> chọn vùng "có mặt" đem qua chỗ cần dán
2)- Lọc bằng vòng lặp, cho một biến chạy trong vùng dữ liệu, cứ "em" nào thỏa diều kiện thì ta lượm "em" đó cùng "zí" mấy em ở cột B, D, E bỏ "zô" một mảng, khi nào chạy xong vòng lặp rồi ta đem cái mảng đó gán vào chỗ cần xuất kết quả
Cái "dzụ" này có nhiều trên diễn đàn rồi mà, bạn "sợt" nó ra "cả đống", còn nếu làm biếng nữa thì đưa file lên đây, NÓI RÕ YÊU CẦU & KẾT QUẢ
Thân
 
Việc lọc dữ liệu xong đem đi chỗ khác có nhiều cách, đâu biết bạn sử dụng kiểu gì mà trả lời, ngắn gọn thế này:
1)- Lọc bằng autofilter theo điều kiện ==> chọn vùng "có mặt" đem qua chỗ cần dán
2)- Lọc bằng vòng lặp, cho một biến chạy trong vùng dữ liệu, cứ "em" nào thỏa diều kiện thì ta lượm "em" đó cùng "zí" mấy em ở cột B, D, E bỏ "zô" một mảng, khi nào chạy xong vòng lặp rồi ta đem cái mảng đó gán vào chỗ cần xuất kết quả
Cái "dzụ" này có nhiều trên diễn đàn rồi mà, bạn "sợt" nó ra "cả đống", còn nếu làm biếng nữa thì đưa file lên đây, NÓI RÕ YÊU CẦU & KẾT QUẢ
Thân
Dear Anh ! em không có lười tại em bận quá nên hóa ra em lười ^^
Anh xem file nha. Em xin chú thích thêm :
-Trong file em đã lọc ra theo đối tượng (dựa vào mã nhân viên ) ở sheet data1 rồi .
- Giờ thì anh giúp em lọc thêm 1 lần nữa theo 2 điều kiện riêng biệt nằm ở ô H4 và L4 và chọn lọc những "ẻm" tiêu đề giống với sheet data 2
.Tuy nhiên , điều kiện H4 là "Có" nêú data thỏa mã điều kiện này sẽ hiện từ cột H đến cột K. còn điều kiện ở L4 là "nợ " khi có data thỏa mãn điều kiện này thì sẽ hiển từ cột L đến cột P .
- Còn tiêu đề ở A5 đến G5 dựa vào điều kiện nào đúng nhất .
Thanks Anh ! Nếu có chổ nào em nói khó hiểu quá thì anh rộng lòng hỏi lại em sẽ từ tốn trả lời . Em học dốt Văn lắm
 

File đính kèm

  • 4555444444441.rar
    15.4 KB · Đọc: 13
Lần chỉnh sửa cuối:
Dear Anh ! em không có lười tại em bận quá nên hóa ra em lười ^^
Anh xem file nha. Em xin chú thích thêm :
-Trong file em đã lọc ra theo đối tượng (dựa vào mã nhân viên ) ở sheet data1 rồi .
- Giờ thì anh giúp em lọc thêm 1 lần nữa theo 2 điều kiện riêng biệt nằm ở ô H4 và L4 và chọn lọc những "ẻm" tiêu đề giống với sheet data 2
.Tuy nhiên , điều kiện H4 là "Có" nêú data thỏa mã điều kiện này sẽ hiện từ cột H đến cột K. còn điều kiện ở L4 là "nợ " khi có data thỏa mãn điều kiện này thì sẽ hiển từ cột L đến cột P .
- Còn tiêu đề ở A5 đến G5 dựa vào điều kiện nào đúng nhất .
Thanks Anh ! Nếu có chổ nào em nói khó hiểu quá thì anh rộng lòng hỏi lại em sẽ từ tốn trả lời . Em học dốt Văn lắm
Ô, lala, hay quá, lần này bạn hỏi mình ......cũng hổng hiểu luôn
Thôi thì, ở sheet DATA 2, để nguyên điều kiện lọc đó, bạn chịu khó quánh "zô" cái kết quả mà bạn muốn lọc được _ nhớ quánh đủ các cột nhé_ may ra mình hiểu
( Mà sao 2 điều kiện lọc mình thấy chẳng liên quan gì tới nhau cả, bạn lọc 2 em đó làm quái gì nhỉ ? _ Híc, cái này hổng biết, hỏi ngoài lề thôi)
Thân
 
Ô, lala, hay quá, lần này bạn hỏi mình ......cũng hổng hiểu luôn
Thôi thì, ở sheet DATA 2, để nguyên điều kiện lọc đó, bạn chịu khó quánh "zô" cái kết quả mà bạn muốn lọc được _ nhớ quánh đủ các cột nhé_ may ra mình hiểu
( Mà sao 2 điều kiện lọc mình thấy chẳng liên quan gì tới nhau cả, bạn lọc 2 em đó làm quái gì nhỉ ? _ Híc, cái này hổng biết, hỏi ngoài lề thôi)
Thân
He he he he !
Dear Anh !
Em đã quánh đủ kết quả rồi , Anh xem file nhé . em cũng tô màu vùng mà em lọc theo 2 điều kiện bên data1 .
- Còn 2 cái điều kiện lọc mà anh nói chẳng liên quan gì thật ra nó cũng đơn giản lắm . do em đánh sai thôi . hihihihi
Thanks Anh
 

File đính kèm

  • loc .rar
    15.2 KB · Đọc: 15
He he he he !
Dear Anh !
Em đã quánh đủ kết quả rồi , Anh xem file nhé . em cũng tô màu vùng mà em lọc theo 2 điều kiện bên data1 .
- Còn 2 cái điều kiện lọc mà anh nói chẳng liên quan gì thật ra nó cũng đơn giản lắm . do em đánh sai thôi . hihihihi
Thanks Anh
Hihi
Mình nghi bạn quánh "tầm bậy tầm bạ" cái điều kiện nên mới hỏi thế ai dè ...trúng. Híc
Đứng ở sheet DATA2, bạn chạy code này
Mã:
Public Sub LocLocLoc()
Dim Vung As Range, J As Long, K As Long, Mg(), Ws As Worksheet, Cll, iHang
    Set Ws = Sheets("DATA1"):     Set Vung = Ws.Range(Ws.[d3], Ws.[d10000].End(xlUp))
    ReDim Mg(1 To Vung.Rows.Count, 1 To 18)
    K = 1:  J = 1
        For Each Cll In Vung
            If Cll = [d4] Then
                Mg(K, 1) = K: Mg(K, 2) = Cll.Offset(, 17): Mg(K, 3) = Cll.Offset(, 18)
                Mg(K, 4) = Cll.Offset(, 2): Mg(K, 5) = Cll.Offset(, 3): Mg(K, 6) = Cll.Offset(, 4)
                Mg(K, 7) = Cll.Offset(, -2): Mg(K, 8) = Cll.Offset(, -1)
                Mg(K, 9) = Cll.Offset(, 8) + Cll.Offset(, 11) + Cll.Offset(, 14): Mg(K, 10) = Cll.Offset(, 5)
                K = K + 1
            ElseIf Cll = [k4] Then
                Mg(J, 1) = J: Mg(J, 11) = Cll.Offset(, 2): Mg(J, 12) = Cll.Offset(, 3): Mg(J, 13) = Cll.Offset(, 4)
                Mg(J, 14) = Cll.Offset(, -2): Mg(J, 15) = Cll.Offset(, -1): Mg(J, 16) = Cll.Offset(, 7) + Cll.Offset(, 10) + Cll.Offset(, 13)
                Mg(J, 17) = Cll.Offset(, 5): J = J + 1
            End If
        Next
    [a7:r100].ClearContents
    iHang = Application.WorksheetFunction.Max(K, J)
    [a7].Resize(iHang, 18) = Mg
End Sub
Viết theo yêu cầu trong bài thôi chứ mình thấy hình như lọc theo điều kiện 2 còn thiếu cái ràng buộc gì đó
Cái này cũng hỏi ngoài lề, bạn nói: Có "CO" ==> xuất thì mới có "NO" ==> nhập ==> vậy sao "NO" nhiều hơn "CO" ?+-+-+-+?+-+-+-+?+-+-+-+
Thân
 
Hihi
Mình nghi bạn quánh "tầm bậy tầm bạ" cái điều kiện nên mới hỏi thế ai dè ...trúng. Híc
Đứng ở sheet DATA2, bạn chạy code này
Mã:
Public Sub LocLocLoc()
Dim Vung As Range, J As Long, K As Long, Mg(), Ws As Worksheet, Cll, iHang
    Set Ws = Sheets("DATA1"):     Set Vung = Ws.Range(Ws.[d3], Ws.[d10000].End(xlUp))
    ReDim Mg(1 To Vung.Rows.Count, 1 To 18)
    K = 1:  J = 1
        For Each Cll In Vung
            If Cll = [d4] Then
                Mg(K, 1) = K: Mg(K, 2) = Cll.Offset(, 17): Mg(K, 3) = Cll.Offset(, 18)
                Mg(K, 4) = Cll.Offset(, 2): Mg(K, 5) = Cll.Offset(, 3): Mg(K, 6) = Cll.Offset(, 4)
                Mg(K, 7) = Cll.Offset(, -2): Mg(K, 8) = Cll.Offset(, -1)
                Mg(K, 9) = Cll.Offset(, 8) + Cll.Offset(, 11) + Cll.Offset(, 14): Mg(K, 10) = Cll.Offset(, 5)
                K = K + 1
            ElseIf Cll = [k4] Then
                Mg(J, 1) = J: Mg(J, 11) = Cll.Offset(, 2): Mg(J, 12) = Cll.Offset(, 3): Mg(J, 13) = Cll.Offset(, 4)
                Mg(J, 14) = Cll.Offset(, -2): Mg(J, 15) = Cll.Offset(, -1): Mg(J, 16) = Cll.Offset(, 7) + Cll.Offset(, 10) + Cll.Offset(, 13)
                Mg(J, 17) = Cll.Offset(, 5): J = J + 1
            End If
        Next
    [a7:r100].ClearContents
    iHang = Application.WorksheetFunction.Max(K, J)
    [a7].Resize(iHang, 18) = Mg
End Sub
Viết theo yêu cầu trong bài thôi chứ mình thấy hình như lọc theo điều kiện 2 còn thiếu cái ràng buộc gì đó
Cái này cũng hỏi ngoài lề, bạn nói: Có "CO" ==> xuất thì mới có "NO" ==> nhập ==> vậy sao "NO" nhiều hơn "CO" ?+-+-+-+?+-+-+-+?+-+-+-+
Thân
Hi Anh !
Anh nói đúng rõ ràng nó phải được áp đặt sự ràng buộc dựa vào 2 cột :
+Cột Phân loại : nếu là sử dụng hay hao mòn thì không cần phải đổi xác . nếu là đổi xác thì bắt buộc phải trả xác ko quan trọng hiện trạng.
+ Cột Hiện Trạng : đây , chổ này như anh nói : tại sao "NO" lại nhiều hơn "CO".ví dụ như trong bài khi xuất 1 TB số lượng :3 Hiện trạng Tốt , phân Loại :Đổi Xác , Khi nhập thì cũng phải nhập 3 nhưng vì 1 cái tốt (không dùng nên trả lại) còn 2 cái hư . 2 hiện trạng khác nên buộc phải tách ra ,chính vì vậy "NO" nhiều hơn "CO" nhưng về mặt số lượng thì nó bằng nhau . Em ko biết diễn giải thế nào để khi gặp trường hợp này thì nó sẽ thông báo là nợ đã trả , không ai nợ ai ......
Em ko biết excel có thỏa mãn được 2 việc trên không nên trước mắt cứ như thế này đã sau đó sẽ rút gọn và gáng sự ràng buộc luôn . hihihi
- Code của anh chuẩn quá , em thì dở vòng lặp, chỉ biết vòng lặp đơn giản . Chắc còn phải học hỏi nhiều . Thanks Anh ^^ bữa nào nhậu 1 bữa nha Anh
 
Lần chỉnh sửa cuối:
Dear Anh !
Em không hiểu chổ này lắm , anh có thể giải thích em hiểu ko ?
If Cll = [d4] Then
Mg(K, 1) = K: Mg(K, 2) = Cll.Offset(, 17): Mg(K, 3) = Cll.Offset(, 18)
Mg(K, 4) = Cll.Offset(, 2): Mg(K, 5) = Cll.Offset(, 3): Mg(K, 6) = Cll.Offset(, 4)
Mg(K, 7) = Cll.Offset(, -2): Mg(K, 8) = Cll.Offset(, -1)
Mg(K, 9) = Cll.Offset(, 8) + Cll.Offset(, 11) + Cll.Offset(, 14): Mg(K, 10) = Cll.Offset(, 5)
K = K + 1
ElseIf Cll = [k4] Then
Mg(J, 1) = J: Mg(J, 11) = Cll.Offset(, 2): Mg(J, 12) = Cll.Offset(, 3): Mg(J, 13) = Cll.Offset(, 4)
Mg(J, 14) = Cll.Offset(, -2): Mg(J, 15) = Cll.Offset(, -1): Mg(J, 16) = Cll.Offset(, 7) + Cll.Offset(, 10) + Cll.Offset(, 13)
Mg(J, 17) = Cll.Offset(, 5): J = J + 1


Trường hợp em mún insert thêm cột thì phải làm sao ?
Thanks Anh



À , nãy giờ nghiên cứu đã tìm ra hướng giải quyết . Em phục em quá. đã hiểu hết bài của anh
Thanks ^^
 
Lần chỉnh sửa cuối:
Thật ra đề bài này còn mấy chỗ phải làm rõ nhưng vì thấy ((((((( nhiều quá nên +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+ phải viết thôi
Mã:
Public Sub LocMai()
    Dim Vung, Cll, VungC, I, Mg(), Dk
    Vung = Range([a1], [a1000].End(xlUp)).Value
    ReDim Mg(1 To UBound(Vung), 1 To 1)
    [c2:d1000].ClearContents
        For I = 1 To UBound(Vung)
            Mg(I, 1) = Vung(I, 1)
            If Left(Vung(I, 1), 6) = [b1] & "CO" Then [c1000].End(xlUp)(2) = Vung(I, 1)
        Next I
            Set VungC = Range([c2], [c1000].End(xlUp))
            For Each Cll In VungC
                Dk = Replace(Cll, "C", "N")
                    For I = 1 To UBound(Vung)
                        If Dk = Mg(I, 1) Then
                            Cll.Offset(, 1) = Mg(I, 1)
                            Mg(I, 1) = vbNullString
                            Exit For
                        End If
                    Next I
            Next Cll
End Sub
Chạy thử code này, nếu trúng thì tốt, trật "záng" chịu :blowup::blowup::blowup:

Thân
Dear Anh concogia!
Ở bài #3 phiền anh thêm vô cho em 1 trường hợp nữa nha anh . em làm đủ kiểu vẫn khô ra.
Tình hình là có 2 trường hợp : "CO" trước - "NO" sau và "NO" trươc "CO" sau. trong bài anh chỉ có 1 trường hợp là "CO" trước - "NO" sau thôi nên khi mà "NO" trươc "CO" sau em không truy ra được là mình đã nợ ai .hic
Thanks Anh
 
:((((((((((((((((((((((((((((((((9
 
Dear Anh concogia và cả nhà !
Làm phiền mọi người một lần nữa theo mong muốn ở bài # 15
Chân thành cảm ơn
 
Web KT

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

Back
Top Bottom