Trang 1/6 1 2 3 4 5 ... cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 53
  1. #1
    Tham gia ngày
    10 2007
    Nơi Cư Ngụ
    TP Hồ Chí Minh
    Bài gởi
    516
    Cảm ơn
    925
    Được cảm ơn 737 lần trong 365 bài viết

    So sánh trùng và không trùng trên 2 cột.

    Tôi làm file có các cột như sau :
    1. Cột A : Dữ liệu so sánh 1
    2. Cột B : Dữ liệu so sánh 2
    3. Cột C : Lọc dữ liệu có trong cột A mà không có trong cột B
    4. Cột D : Lọc dữ liệu có trong cột B mà không có trong cột A
    5. Cột E : Lọc dữ liệu trùng cột A và B

      Sau khi thử dữ liệu 300 dòng thì nó đã "lết bánh" rồi, trong khi công việc đang cần so sánh số liệu khoảng 50.000 dòng.
      Nhờ các Anh Chị xem hướng dẫn sửa Name và công thức dùm, làm bằng BVA cũng tốt, miễn sao nó chạy lẹ lẹ 1 tí. Thanks
    Tập tin đính kèm Tập tin đính kèm
    Bán tự vi Sư

  2. Có 5 thành viên cảm ơn viendo về bài viết này:


  3. #2
    Tham gia ngày
    06 2006
    Bài gởi
    3,232
    Cảm ơn
    5,845
    Được cảm ơn 6,234 lần trong 2,711 bài viết

    Bạn Thử Với 2 Cái Ni Xem Tốc Độ Ra Răng?

    PHP Code:
    Option Explicit
     Dim lRow 
    As LongjZ As Long
     Dim lRow0 
    As LongjW As Long
      
    Sub FilterAll
    ()
     
    Dim SChu As String
     Dim XH 
    As String
     
     XH 
    Chr(13) & Chr(10)
     
    lRow Range("A65432").End(xlUp).Row
     lRow0 
    Range("B65432").End(xlUp).Row
     SChu 
    "A: Co O Cot 'A', Khong Co O Cot 'B'" XH
     SChu 
    SChu "B: Co O Cot 'B', Khong Co O Cot 'A'"
     
    SChu SChu XH "C: Co O Ca 2 Cot"
     
    SChu InputBox(SChu"GPE - SaDQ")
     
    SChu UCase$(Left(SChu1))
     
    Application.ScreenUpdating False
     
    If SChu "A" Or SChu "B" Then
        TongHop SChu
     
    ElseIf SChu "C" Then
        Dim tRow 
    As Long
        
    If lRow lRow0 Then tRow lRow Else tRow lRow0
        Range
    ("E3:C" tRow).ClearContents
        
    For jZ 3 To lRow
            
    For jW 3 To lRow0
                
    If Cells(jZ1) = Cells(jW2Then _
                    Range
    ("E" Range("E65432").End(xlUp).Row 1) = Cells(jZ1)
            
    Next jW
        Next jZ
     
    Else
        
    XH "BAN CAN CHON 1 TRONG 3 FUONG AN!" XH
        MsgBox XH 
    "           BYE!", , "GPE - SaDQ"
     
    End If
    End Sub 
    PHP Code:
    Sub TongHop(MainCol As String)
     
    Dim Cot1 As LongCot2 As Long
     Dim StrC1 
    As StringStrC2 As String
     
     Select 
    Case UCase$(MainCol)
     Case 
    "A"
        
    Cot1 lRow:        Cot2 lRow0
        StrC1 
    "C":        StrC2 "C65432"
        
    Range("C3:C" lRow).ClearContents
     
    Case "B"
        
    Cot1 lRow0:        Cot2 lRow
        StrC1 
    "D":        StrC2 "D65432"
        
    Range("D3:d" lRow0).ClearContents
     End Select
     
    For jZ 3 To Cot1
        
    For jW 3 To Cot2
            
    If Cells(jZ1) = Cells(jW2Then _
                
    Exit For
        
    Next jW
        
    If jW Cot2 Then _
            Range
    (StrC1 Range(StrC2).End(xlUp).Row 1) = Cells(jZ1)
     
    Next jZ
    End Sub 
    (hào tất cả mọi người!

  4. Có 7 thành viên cảm ơn SA_DQ về bài viết này:


  5. #3
    Tham gia ngày
    09 2007
    Nơi Cư Ngụ
    Hải Phòng-
    Bài gởi
    426
    Cảm ơn
    505
    Được cảm ơn 404 lần trong 124 bài viết

    Cool

    bạn có thê dùng công thức mảng
    ={if(Or(phần tử cột A = cột B),"trùng","ko trùng")}
    Bạn làm tương tự cho cột B
    Dùng Filter, lọc và paste sang một vùng mới.
    Cái này tôi đã dùng rồi (Công ty tôi có danh sách gốc gần 200 người, danh sách tham gia cứu thương lần 1, .........tạo danh sách học cho những người chưa tham gia lần 1 sẽ tham gia lần 2 tôi cũng dùng cách này.

    Bạn có thể tham khảo ở bài viết, trong đó có những cách của AnhTuan 1006 cũng rất hay mà chưa cần phải dùng đến VBA

    http://www.giaiphapexcel.com/forum/s...ead.php?t=8170
    thay đổi nội dung bởi: feelingyes, 19-03-08 lúc 09:06 AM

  6. Có 5 thành viên cảm ơn feelingyes về bài viết này:


  7. #4
    Tham gia ngày
    10 2007
    Nơi Cư Ngụ
    TP Hồ Chí Minh
    Bài gởi
    516
    Cảm ơn
    925
    Được cảm ơn 737 lần trong 365 bài viết
    Sư phụ SA_DQ ơi tôi làm chưa được, phải nhờ các sư phụ chỉ tiếp và đừng la nhé vì chưa đủ hiểu cái code này và làm sao cho nó chạy, đang bị vướng thế này đây :
    1. Chép thử code 1 và code 2 lần lượt vào vùng Immediate để chạy thử nó báo lỗi là Invalid in Immediate pane.
    2. Chép code 1 lần lượt vào Module1, ThisworkkbbookkSheet1. Khi nhấn chạy nó đều báo lỗi là Sub or Function not defined. Ngoài ra nó tô vàng dòng Sub FillterAll() và tô đen Tonghop ở dòng TongHop Schu.
    3. Chép code 2 lần lượt vào Module1, ThisworkkbbookkSheet1. Khi nhấn chạy nó hiện bảng Macro mà chẳng có cái Macro nào để chọn.

      Phiền các sư phụ chỉ giáo tiếp dùm. Thanks
    Bán tự vi Sư

  8. #5
    Tham gia ngày
    06 2006
    Bài gởi
    3,232
    Cảm ơn
    5,845
    Được cảm ơn 6,234 lần trong 2,711 bài viết

    Talking

    phải nhờ các sư phụ chỉ tiếp vì chưa đủ hiểu cái code này và làm sao cho nó chạy, đang bị vướng. Phiền các sư phụ chỉ giáo tiếp dùm.
    Bạn nhấn tổ hợp fím {ALT} +{F11} để mở CS VBE
    Và chép cả 2 macro vô module 1
    Nói thêm: Macro TongHop được gọi bỡi macro còn lại & phải được nhận 1 đối số (biến) thích hợp 'A'/'B')
    Như vậy bạn cần chạy cái macro còn lại kia (tên nó là FilterAll)
    Khi đó 1 hộp thoại sẽ hỏi bạn cần chép vố cột nào tương ứng 'C', 'D' hay 'E'
    Nếu bạn nạp biến 'A' hay 'B' thì macro này sẽ gọi macro còn lại (TongHop) truyền cho nó đối số tương ứng để nó chạy ra kết quả (KQ sẽ thể hiện trên cột 'C' hay 'D' tương ứng)
    Nếu bạn nhập phương án 'C' thì macro FilterAll sẽ tiếp tục cho đến khi xong chuyện lọc ~ giá trị trùng trong 2 cột 'A' & 'B' ghi => 'E'
    Bổ sung:
    Nếu bạn muốn trường hợp 'C' nhanh hơn 1 tẹo nữa, thì trong macro FilterAll, tại dòng lệnh
    Code:
    If Cells(jZ, 1) = Cells(jW, 2) Then _ 
                    Range("E" & Range("E65432").End(xlUp).Row + 1) = Cells(jZ, 1)
    Nên sửa lại là (Chú í: tôi đã bỏ dấu gạch dưới dùng nối 2 dòng lệnh)
    PHP Code:
        If Cells(jZ1) = Cells(jW2Then 
                    Range
    ("E" Range("E65432").End(xlUp).Row 1) = Cells(jZ1
                    Exit For
        
    End If 
    thay đổi nội dung bởi: SA_DQ, 19-03-08 lúc 10:09 AM
    (hào tất cả mọi người!

  9. Có 3 thành viên cảm ơn SA_DQ về bài viết này:


  10. #6
    Tham gia ngày
    10 2007
    Nơi Cư Ngụ
    TP Hồ Chí Minh
    Bài gởi
    516
    Cảm ơn
    925
    Được cảm ơn 737 lần trong 365 bài viết
    Trích Nguyên văn bởi feelingyes
    bạn có thê dùng công thức mảng
    ={if(Or(phần tử cột A = cột B),"trùng","ko trùng")}
    Bạn làm tương tự cho cột B
    Dùng Filter, lọc và paste sang một vùng mới.
    Cái này tôi đã dùng rồi (Công ty tôi có danh sách gốc gần 200 người, danh sách tham gia cứu thương lần 1, .........tạo danh sách học cho những người chưa tham gia lần 1 sẽ tham gia lần 2 tôi cũng dùng cách này.
    Bạn có thể tham khảo ở bài viết, trong đó có những cách của AnhTuan 1006 cũng rất hay mà chưa cần phải dùng đến VBA
    http://www.giaiphapexcel.com/forum/s...ead.php?t=8170
    Cám ơn bạn nhiều, tôi đã tham khảo cách làm trên rồi, file tôi làm cũng đa phần là học từ các file của Anhtuan, trường hợp hiện tại của tôi là phải xử lý số liệu rất lớn và phải làm khoảng 4 lần (mỗi lần làm 1 quí khoảng 40 đến 50 ngàn dòng) rồi mới tổng hợp nên nó chạy không nổi luôn.
    Ý tôi làm file này để đối chiếu sai sót của số lượng kiểm kê thực tế và số liệu trong chương trình xuất ra có chênh lệch. Một mặt phiền các sư phụ giúp file xử lý, một mặt tôi đang đề nghị chỉ kiểm tra trong từng tháng thì số liệu còn khoảng mười mấy ngàn dòng thôi.

    To Sư phụ SA_DQ : để làm theo sư phụ chỉ, có gì sẽ phiền tiếp nhé, do công lực yếu kém quá nên tiếp thu cũng kém luôn hichic..
    Bán tự vi Sư

  11. Có 2 thành viên cảm ơn viendo về bài viết này:


  12. #7
    Tham gia ngày
    10 2007
    Nơi Cư Ngụ
    TP Hồ Chí Minh
    Bài gởi
    516
    Cảm ơn
    925
    Được cảm ơn 737 lần trong 365 bài viết
    Đã làm theo hướng dẫn của Sư phụ và chạy rất ok với dữ liệu <1.000 dòng. Cám ơn rất nhiều.
    Cho chạy thử Cột A 10.000 dòng và cột B 5.000 dòng nó chạy gần 20' Sư phụ ơi. (với cấu hình máy sau Processor: Intel(R) Pentium(R) 4 CPU 1.50GHz. Memory: 512MB RAM)
    Có cách nào để cải thiện tiếp về tốc độ xử lý phiền các Sư phụ chỉ giáo tiếp. Thanks
    Bán tự vi Sư

  13. #8
    Tham gia ngày
    06 2006
    Bài gởi
    3,232
    Cảm ơn
    5,845
    Được cảm ơn 6,234 lần trong 2,711 bài viết

    Talking

    Đã chạy rất ok với dữ liệu; Chạy thử Cột A 10.000 dòng và cột B 5.000 dòng nó chạy gần 20' Có cách nào để cải thiện tiếp về tốc độ xử lý phiền các Sư phụ chỉ giáo tiếp.
    1*/ Hãy cho biết t1, t2 & t3 tương ứng là bao nhiêu; Để còn định hướng cải thiện í mà!

    2*/ Dữ liệu của bạn có thể cho phép sắp xếp hay không?
    Nếu trong trường hợp được phép, thì thử trước khi chạy macro, cho xếp 2 cột này lại 1 cách riêng rẽ xem tình hình có cải thiện hơn không?
    (hào tất cả mọi người!

  14. #9
    Tham gia ngày
    10 2007
    Nơi Cư Ngụ
    TP Hồ Chí Minh
    Bài gởi
    516
    Cảm ơn
    925
    Được cảm ơn 737 lần trong 365 bài viết
    Trích Nguyên văn bởi SA_DQ
    1*/ Hãy cho biết t1, t2 & t3 tương ứng là bao nhiêu; Để còn định hướng cải thiện í mà!

    2*/ Dữ liệu của bạn có thể cho phép sắp xếp hay không?
    Nếu trong trường hợp được phép, thì thử trước khi chạy macro, cho xếp 2 cột này lại 1 cách riêng rẽ xem tình hình có cải thiện hơn không?
    1. Dữ liệu hàng tháng dao động từ 10.000 đến cao nhất là 15.000 dòng.
    2. Dữ liệu này có thể sắp xếp, sort đều được vì mục đích là tìm ra các mã bị chênh lệch giữa 2 cột mà. Dữ liệu so sánh 2 cột thế này đây :
      .....
      SJL436MDFQ0030
      SJL436MDFQ0025
      HUL773ZABJ0006
      HUL773ZABJ0010
      HUL773ZABJ0004
      ADXN001EABB0019
      ADXN001EABB0020
      AEJL064ZAEJ0006
      AEJL064ZAEJ0007
      .....
    Hy vọng Sư phụ tìm ra giải pháp giúp. Thanks
    Bán tự vi Sư

  15. #10
    Tham gia ngày
    06 2006
    Bài gởi
    3,232
    Cảm ơn
    5,845
    Được cảm ơn 6,234 lần trong 2,711 bài viết

    Talking Chúng ta thử từng phần việc, vậy!

    Bạn vô CS VBE như trên đã nêu; Vô menu Insert & thêm 1 module nữa (tạm là module2) Và chép 2 macro này & chạy thử, so sánh với macro FilterAll -> TongHop (A) & báo kết quả nha!
    Chú í: Mình mới tách & thử với trường hợp hình thành KQ trên cột 'C' thôi nha! Hai trường hợp còn lại sẽ tiếp, một khi cái này có xu hướng không tồi!

    PHP Code:
    Option Explicit
    Dim lRow 
    As LongjZ As Long
    Dim lRowB 
    As LongjW As Long
    Dim Timer_ 
    As Double

    Sub SearchColumnC
    ()
     
    Dim lTemp As Long
     
     Timer_ 
    Timer
     lRow 
    Range("A65432").End(xlUp).Row
     lRowB 
    Range("b65432").End(xlUp).Row
     Application
    .ScreenUpdating False
     Sort1Col Range
    ("A2:A" lRow), Range("A3")
     
    Sort1Col Range("B2:B" lRow), Range("B3")
     
    Range("C2") = "List1<>List2"
     
    Range("C3:C" lRowB).ClearContents
     lTemp 
    3
     
    For jZ 3 To lRow
        
    For jW lTemp To lRowB
            
    If Cells(jZ1) = Cells(jW2Then
                lTemp 
    jW:         Exit For
            
    End If
        
    Next jW
        
    If jW lRowB Then _
            Range
    ("C" Range("C65432").End(xlUp).Row 1) = Cells(jZ1)
     
    Next jZ
     MsgBox Str
    (Timer Timer_)
    End Sub 
    PHP Code:

    Sub Sort1Col
    (Rng As RangeClls As Range)
      
    Rng.Sort Key1:=CllsOrder1:=xlAscendingHeader:=xlGuess_
        OrderCustom
    :=1MatchCase:=FalseOrientation:=xlTopToBottom_
        DataOption1
    :=xlSortNormal
    End Sub 
    (hào tất cả mọi người!

Trang 1/6 1 2 3 4 5 ... cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]