Hỏi về lọc duy nhất theo điều kiện (1 người xem)

Liên hệ QC

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

Em bắt đầu hứng thú với cái màu đỏ rồi đây. Nếu cá về thời gian cũng như tính chính xác thì xin mời với file này!

Giả sử số liệu là một series, nhưng vì lý do nào đó lại có vài trường hợp bị trùng, thế thì phải lọc không trùng!

Với dữ liệu là 65536 dòng, hãy thử với cột B tức điều kiện là XN2 với code của Thầy hay bất cứ của ai lọc bằng Advanced Filter


Kết quả đúng sẽ là không trùng và lọc đến 65517 dòng!

Cũng nhanh đấy nhưng mà chưa có nhanh hơn công cụ Excel đâu
Tôi dùng con dao bén hơn chút:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range) 'Bo so 1 o Change1 de thu.
  Dim rng As Range
  Dim lC As Long
  Dim t As Double
  If Target.Address = "$E$2" Then
    t = Timer
    Set rng = Range("A3:A65536")
    Select Case Target.Value
      Case Is = "XN1": lC = 0
      Case Is = "XN2": lC = 1
      Case Is = "XN3": lC = 2
    End Select
    Set rng = rng.Offset(, lC)
    With Target.Offset(1).Resize(rng.Rows.Count)
      .Value = rng.Value
      .RemoveDuplicates 1, xlNo
    End With
    MsgBox Format(Timer - t, "0.000")
  End If
End Sub
Thi đấu với điều kiện lọc ="XN2", code tôi nhanh hơn của Nghĩa 3 lần
Ẹc... Ẹc...
---------------
Tuy nhiên, như thế cũng chưa có sướng, làm vầy cho nó sung:
- Hãy SaveAs file thành xlsm rồi copy dữ liệu ra 400,000 dòng, xong thử code nhé
- Riêng cột XN2, hãy chọn cell B3 rồi fill xuống "mút chỉ" đến cuối ---> Mục đích không cho em nào trùng
- Giờ dùng code lọc theo điều kiện "XN2"
 
Cũng nhanh đấy nhưng mà chưa có nhanh hơn công cụ Excel đâu
Tôi dùng con dao bén hơn chút:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range) 'Bo so 1 o Change1 de thu.
  Dim rng As Range
  Dim lC As Long
  Dim t As Double
  If Target.Address = "$E$2" Then
    t = Timer
    Set rng = Range("A3:A65536")
    Select Case Target.Value
      Case Is = "XN1": lC = 0
      Case Is = "XN2": lC = 1
      Case Is = "XN3": lC = 2
    End Select
    Set rng = rng.Offset(, lC)
    With Target.Offset(1).Resize(rng.Rows.Count)
      .Value = rng.Value
      .RemoveDuplicates 1, xlNo
    End With
    MsgBox Format(Timer - t, "0.000")
  End If
End Sub
Thi đấu với điều kiện lọc ="XN2", code tôi nhanh hơn của Nghĩa 3 lần
Ẹc... Ẹc...
---------------
Tuy nhiên, như thế cũng chưa có sướng, làm vầy cho nó sung:
- Hãy SaveAs file thành xlsm rồi copy dữ liệu ra 400,000 dòng, xong thử code nhé
- Riêng cột XN2, hãy chọn cell B3 rồi fill xuống "mút chỉ" đến cuối ---> Mục đích không cho em nào trùng
- Giờ dùng code lọc theo điều kiện "XN2"
Mình nghĩ với chiêu RemoveDuplicates thì có lẽ vô địch rồi, không cần bàn cãi gì ráo.
 
Mình nghĩ với chiêu RemoveDuplicates thì có lẽ vô địch rồi, không cần bàn cãi gì ráo.

Ngoài ra còn có ADO cũng cho tốc độ rất nhanh.
ADO được cái là cho tốc độ ổn định, dù số lượng phần tử trùng nhiều hay ít thì thời gian lọc cũng không chênh lệch bao nhiêu
Có điều có 1 thắc mắc. Câu lệnh:
PHP:
SELECT DISTINCT FieldName FROM [DataBase]
Thí nghiệm thấy DataBase nếu vượt quá 65536 dòng thì code báo lỗi, chẳng biết tại sao?
 
Cũng nhanh đấy nhưng mà chưa có nhanh hơn công cụ Excel đâu
Tôi dùng con dao bén hơn chút:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range) 'Bo so 1 o Change1 de thu.
  Dim rng As Range
  Dim lC As Long
  Dim t As Double
  If Target.Address = "$E$2" Then
    t = Timer
    Set rng = Range("A3:A65536")
    Select Case Target.Value
      Case Is = "XN1": lC = 0
      Case Is = "XN2": lC = 1
      Case Is = "XN3": lC = 2
    End Select
    Set rng = rng.Offset(, lC)
    With Target.Offset(1).Resize(rng.Rows.Count)
      .Value = rng.Value
      .RemoveDuplicates 1, xlNo
    End With
    MsgBox Format(Timer - t, "0.000")
  End If
End Sub
Thi đấu với điều kiện lọc ="XN2", code tôi nhanh hơn của Nghĩa 3 lần
Ẹc... Ẹc...
---------------
Tuy nhiên, như thế cũng chưa có sướng, làm vầy cho nó sung:
- Hãy SaveAs file thành xlsm rồi copy dữ liệu ra 400,000 dòng, xong thử code nhé
- Riêng cột XN2, hãy chọn cell B3 rồi fill xuống "mút chỉ" đến cuối ---> Mục đích không cho em nào trùng
- Giờ dùng code lọc theo điều kiện "XN2"

Đúng ra mà nói thì Advanced Filter Unique nó rất nhanh, với điều kiện các mục lọc được trong khoảng 20,000 dòng thì không có cái Hàm nào hay phương thức nào lọc nhanh hơn được.

Vì muốn chứng minh câu nói "Advanced Filter (là công cụ có sẵn) luôn tỏ ra ưu việt hơn so với việc ta viết 1 hàm tự tạo" của Thầy là chưa chính xác nên mới đưa ra số mục hơn số đó, cho nên AFU bị "tèo".

Riêng với phương thức Remove Duplicates thì nó tỏ ra rất nhanh, phải copy qua 1 vùng khác, từ vùng này sẽ thực hiện RD. Tuy nhiên, cái này cũng sẽ "tèo" nếu thực hiện trên Excel 2003 trở về trước.

==> Tùy "phương tiện" của mình đang có là gì, tùy vào trường hợp trên sheet hay mảng... ta có 1 phương thức thực hiện cái này hay cái khác hoặc kết hợp nhiều phương thức lại để thực hiện.

Tuy nhiên, để dung hòa về thời gian, phiên bản, tính chính xác thì dùng HÀM để lọc thì tôi cho là hợp lý nhất.
 
Tuy nhiên, để dung hòa về thời gian, phiên bản, tính chính xác thì dùng HÀM để lọc thì tôi cho là hợp lý nhất.

Ấy! Có hợp lý hay không thì phải xem NGƯỜI DÙNG: Nếu họ xài cái của mình thì kết luận cái của mình hợp lý, ngược lại thì... Ẹc... Ẹc...
Tôi nói đúng chứ? Tôi nói câu này là nói chung cho bất kỳ ai viết phần mềm, không riêng gì hàm của Nghĩa đâu!
(Nay là năm 2013 rồi, ai còn xài Office 2003 thì ráng chịu thôi, trách ai?)
 
Ấy! Có hợp lý hay không thì phải xem NGƯỜI DÙNG: Nếu họ xài cái của mình thì kết luận cái của mình hợp lý, ngược lại thì... Ẹc... Ẹc...

Em đã nói câu này:

==> Tùy "phương tiện" của mình đang có là gì, tùy vào trường hợp trên sheet hay mảng... ta có 1 phương thức thực hiện cái này hay cái khác hoặc kết hợp nhiều phương thức lại để thực hiện.

Còn câu nói cuối cùng đó là quan điểm của cá nhân em thôi.


Tôi nói đúng chứ? Tôi nói câu này là nói chung cho bất kỳ ai viết phần mềm, không riêng gì hàm của Nghĩa đâu!
(Nay là năm 2013 rồi, ai còn xài Office 2003 thì ráng chịu thôi, trách ai?)

Theo thống kê tại Việt Nam thì cho tới hiện nay có tới hơn 85% người dùng đang xài WinXP và Excel 2003 đó Thầy, liệu 85% người dùng Việt Nam có chịu đổi tất cả qua phiên bản mới hay không? Liệu có thay đổi hết máy tính hay không vì nếu thay phiên bản Win mới thì phải thay đổi luôn cả máy tính lỗi thời, chưa kể giá bản quyền của mỗi loại Win và Office nó có thể lên tới chục triệu! Thử hỏi có nên thay đổi hay không nếu người ta không cần đến những cái xa xỉ trong những phiên bản mới?

Đồng ý rằng chúng ta cập nhật cái mới, nhưng chắc cũng để đó, cho đến khi "dân giàu, nước mạnh" thì cũng sẽ dùng tới thôi!
 
Lần chỉnh sửa cuối:
Theo thống kê tại Việt Nam thì cho tới hiện nay có tới hơn 85% người dùng đang xài WinXP và Excel 2003 đó Thầy, liệu 85% người dùng Việt Nam có chịu đổi tất cả qua phiên bản mới hay không? Liệu có thay đổi hết máy tính hay không vì nếu thay phiên bản Win mới thì phải thay đổi luôn cả máy tính lỗi thời, chưa kể giá bản quyền của mỗi loại Win và Office nó có thể lên tới chục triệu! Thử hỏi có nên thay đổi hay không nếu người ta không cần đến những cái xa xỉ trong những phiên bản mới?

Đồng ý rằng chúng ta cập nhật cái mới, nhưng chắc cũng để đó, cho đến khi "dân giàu, nước mạnh" thì cũng sẽ dùng tới thôi!
Tôi nghĩ vấn đề cập nhật mới không phải liên quan đến tiền mà là thói quen (xài quen thì không muốn thay đổi)
Tuy nhiên....
Lần trước khi tôi đi mua Laptop, người ta cài sẵn cho Windows 7 + Office 2010. Vì tôi không quen xài nên dự định sẽ cài lại Windows XP + Office 2003
Ác cái là sau khi cài xong thì chẳng tìm thấy đâu ra Driver tương thích với XP (hảng sản xuất không hổ trợ).
Trường hợp này Nghĩa nghĩ sao? Một là cứ dùng XP + Office 2003 và.. chịu thiệt thòi, hai là cố mà tìm hiểu cái mới
Vậy đấy! Mấy chục phần trăm xài cái gì thây kệ họ, đến lúc họ cảm thấy thiệt thòi thì tự họ sẽ phải nâng cấp (ví dụ nhận file xlsx của ai đó gửi mà cóc mở được)
---------------------------------------
Cũng là tản mạn chơi trong ngày đầu xuân chứ quan điểm mỗi người thi... Ẹc... Ẹc... Ai cấm! Thích sao, cứ tùy ý!
 
cũng xin góp tí gió... vào câu chuyện của các anh (cũng xin lỗi ko phải box giao lưu).
thực ra máy tinh cá nhân thì xài phiên bản nào cũng được (miễm là cấu hình đủ chơi là được).
nhưng ở môi trường công ty thì khác, vì phải sử dụng phiên bản có bản quyền nên mỗi lần nâng cấp là phiền phức lắm, mấy xếp cứ hỏi mày nâng cấp để làm gì? nhiều đó xài đủ rồi.....
chắn lẻ nói với xếp để em cập nhật cho kịp GPE.....hì hì.....
năm hết tết đến, tám vài câu cho vui
chúc các anh ăn tết vui vẻ
 
mấy xếp cứ hỏi mày nâng cấp để làm gì? nhiều đó xài đủ rồi.....
chắn lẻ nói với xếp để em cập nhật cho kịp GPE.....hì hì.....ẻ
Khi nào sếp bạn nhận được file xlsx từ đối tác nước ngoài gửi đến, ổng đọc không được thì tự nhiên ổng sẽ.. hết ngay chứ gì
Chuyện thường!
 
Khi nào sếp bạn nhận được file xlsx từ đối tác nước ngoài gửi đến, ổng đọc không được thì tự nhiên ổng sẽ.. hết ngay chứ gì
Chuyện thường!

Có khi ông ta đề nghị đối tác Convert xuống 2003 trước khi gửi nữa chứ! Gửi mail lẹ hơn đổi toàn bộ máy tính mà Thầy!
 
Web KT

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

  • Dán lên cao
Trả lời
26
Đọc
9K
Back
Top Bottom