Vấn đề Code Filter

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Tôi ghi 1 macro về Filter như sau:
PHP:
Sub SapXepCSDL()
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Add Key _
       :=Range("A5:A65536"), SortOn:=xlSortOnValues, Order:=xlAscending, _
       DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Add Key _
       :=Range("D5:D65536"), SortOn:=xlSortOnValues, Order:=xlAscending, _
       DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort
       .Header = xlYes
'.MatchCase = False '
       .Orientation = xlTopToBottom
'.SortMethod = xlPinYin '
       .Apply
End With
End Sub

Tôi có thể bỏ 2 cái MatchCase = False và SortMethod = XlPinYin được không, có ảnh hưởng gì không (bởi tôi cũng đã thử, vẫn sắp xếp như thường, không thấy lỗi)?
Có cách nào rút gọn hơn nữa không?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tôi ghi 1 macro về Filter như sau:
PHP:
Sub SapXepCSDL()
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Add Key _
:=Range("A5:A65536"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort.SortFields.Add Key _
:=Range("D5:D65536"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CSDL_TONG_HOP").AutoFilter.Sort
.Header = xlYes
'.MatchCase = False
.Orientation = xlTopToBottom
'.SortMethod = xlPinYin
.Apply
End With
End Sub
Tôi có thể bỏ 2 cái MatchCase = False và SortMethod = XlPinYin được không, có ảnh hưởng gì không (bởi tôi cũng đã thử, vẫn sắp xếp như thường, không thấy lỗi)?
Có cách nào rút gọn hơn nữa không?
Sort dử liệu mà record macro trong Excel 2007 thì thật lằng nhằng ---> Code ghi cả đóng
Bạn sort cột A tăng dần.. then by cột D tăng dần.. vậy thì code theo dạng này đi:
PHP:
Sub Macro1()
  With Range([A1], [D65536].End(xlUp))
    .Sort .Cells(1, 1), 1, .Cells(1, 4), , 1, , , xlYes
  End With
End Sub
 
Upvote 0
Trời, Code ngắn đến không ngờ, đã kiểm chứng và "trên cả tuyệt vời". Cám ơn Thầy Ndu.

Làm ơn cho em hỏi chút nữa nhé!
Hình như Code này đủ điều kiện 4 cột có giá trị nó mới chạy? Còn không thì nó chẳng nhúc nhích gì hết phải không ạ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bạn thử cái này xem
Mã:
Sub Sortaz()
   [a:d].Sort [a1], 1, [d1], , 1
End Sub
Nếu bạn muốn sort giảm dần thì đổi số 1 thành số 2
Trong code của Ndu tôi Không hiểu xlYes có nghĩa là gì ?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử cái này xem
Mã:
Sub Sortaz()
   [a:d].Sort [a1], 1, [d1], , 1
End Sub

Em cám ơn Anh, Code ngắn quá (làm em sợ!) hehehe
thực ra cái sheet của em nó có đến cột từ A đến H lận, và chừa hàng từ 1 đến 5, nhưng em muốn cơ sở dữ liệu được Sort ở 2 điều kiện là Cột A sau đó là cột D, các cột còn lại ăn theo. Làm ơn chừa dùm cái tiêu đề cho em ở hàng thứ 5 nhé, tức là hàng thứ 6 đến 65536 mới Sort.
Thanks.**~**
 
Upvote 0
Vậy thì sửa lại như thế này
Mã:
Sub SortA_Z()
   Rows("6:65536").Sort [A6], 1, [d6], , 1
End Sub
 
Upvote 0
Trong code của Ndu tôi Không hiểu xlYes có nghĩa là gì ?

xlYes là Sort với dòng đầu tiên là dòng chứa các Header đấy! Tương đương với việc chọn option Header Row trong cửa sổ Sort ấy!
attachment.php


@minhthien321: Anh nhìn vào code rồi tùy biến chút là ra mà.
PHP:
Sub Sortaz()
   [A6:H65536].Sort [A6], 1, [D6], , 1
End Sub
Hoặc:
PHP:
Sub Sortaz()
   [A5:H65536].Sort [A5], 1, [D5], , 1, , , xlYes
End Sub
 

File đính kèm

  • Pic01.jpg
    Pic01.jpg
    34.1 KB · Đọc: 260
Lần chỉnh sửa cuối:
Upvote 0
Code của Các Anh ngắn đến không ngờ! Từ 16 dòng ban đầu, còn lại có 3 dòng Ẹc... Ẹc... Quá hay! Cám ơn các anh nhiều nhé!@$@!^%
 
Upvote 0
Bạn thử cái này xem
Mã:
Sub Sortaz()
   [a:d].Sort [COLOR=Red][B][a1][/B][/COLOR], 1, [B][COLOR=Red][d1][/COLOR][/B], , 1
End Sub
Nếu bạn muốn sort giảm dần thì đổi số 1 thành số 2
Thật ra code nào cũng đúng, nhưng có lần em đã đề cập, với code sort chúng ta không nên ghi kiểu này! (ý em là ở những chổ tô đỏ ấy ---> Lý do là nếu anh thay đổi vùng sort, anh phải mất công chỉnh đến 3, 4 chổ ---> Trong khi code của em chỉ chỉnh 1 chổ duy nhất (ngay hàng With_
 
Upvote 0
Thật ra code nào cũng đúng, nhưng có lần em đã đề cập, với code sort chúng ta không nên ghi kiểu này! (ý em là ở những chổ tô đỏ ấy ---> Lý do là nếu anh thay đổi vùng sort, anh phải mất công chỉnh đến 3, 4 chổ ---> Trong khi code của em chỉ chỉnh 1 chổ duy nhất (ngay hàng With_

Giờ mới hiểu tại sao ndu dùng .Cells(1,1) mà không dùng [a1]. Bái phục khả năng bao quát của bạn!
 
Upvote 0
Tại sao lại không sort được dòng đầu tiên các bác ạ/ Chẳng lẽ lại khai tăng range lên 1 dòng à?
 
Upvote 0
Tại sao lại không sort được dòng đầu tiên các bác ạ/ Chẳng lẽ lại khai tăng range lên 1 dòng à?
Bạn nên đọc lại bài số 7 của Bạn CADAIF; Nếu muốn sort được dòng đầu thì bạn thay xlno bằng xlyes và nhớ khi đặt vùng dữ liệu phải chứa cả dòng đầu tiên. Thân
 
Upvote 0
Sort dử liệu mà record macro trong Excel 2007 thì thật lằng nhằng ---> Code ghi cả đóng
Bạn sort cột A tăng dần.. then by cột D tăng dần.. vậy thì code theo dạng này đi:
PHP:
Sub Macro1()
  With Range([A1], [D65536].End(xlUp))
    .Sort .Cells(1, 1), 1, .Cells(1, 4), , 1, , , xlYes
  End With
End Sub

Hôm nay mới phát hiện: khi dữ liệu lớn hơn 22.500 dòng thì không Sort được. Vậy làm thế nào để Sort được vùng dữ liệu khoảng 50.000 ? Nhờ các bạn tư vấn giúp. Thanks !
 
Upvote 0
Hôm nay mới phát hiện: khi dữ liệu lớn hơn 22.500 dòng thì không Sort được. Vậy làm thế nào để Sort được vùng dữ liệu khoảng 50.000 ? Nhờ các bạn tư vấn giúp. Thanks !
Không sort được nghĩa là sao anh?
- Báo lỗi?
- Sort sai?
 
Upvote 0
Không sort được nghĩa là sao anh?
- Báo lỗi?
- Sort sai?

Code báo lỗi Run-time error '1004' ndu à. Mình nghĩ có thể là do hạn chế của Excel không biết có phải vậy không ? bạn xem giúp nhé mình đang rất cần

Nói thêm: yêu cầu phải xắp xếp từ nhỏ đến lớn theo cột E và cột F vì các lý do sau: Xắp xếp theo cột E để tách các loại đất ra theo từng tờ bản đồ giải thửa. Xắp xếp theo cột F để đối chiếu số liệu với các mảnh trên bản đồ giải thửa, ở bản đồ giải thửa số hiệu thửa đất được đánh liên tục từ nhỏ đến lớn (dữ liệu trong File đính kèm).
 

File đính kèm

Upvote 0
Mình Sort bình thường mà Trung Chinh ơi, mình điền đầy dữ liệu 56536 dòng Sort xoẹt 1 cái là xong
 
Lần chỉnh sửa cuối:
Upvote 0
Code báo lỗi Run-time error '1004' ndu à. Mình nghĩ có thể là do hạn chế của Excel không biết có phải vậy không ? bạn xem giúp nhé mình đang rất cần

Nói thêm: yêu cầu phải xắp xếp từ nhỏ đến lớn theo cột E và cột F vì các lý do sau: Xắp xếp theo cột E để tách các loại đất ra theo từng tờ bản đồ giải thửa. Xắp xếp theo cột F để đối chiếu số liệu với các mảnh trên bản đồ giải thửa, ở bản đồ giải thửa số hiệu thửa đất được đánh liên tục từ nhỏ đến lớn (dữ liệu trong File đính kèm).
File của anh sort không được là vì có cell bị merge thôi (cell J23583)
Ngoài ra về cách viết code để xác định Range, anh viết vầy:
With Range("a8:m" & [d65536].End(xlUp))
là sai cú pháp
Ít ra cũng phải là:
With Range("a8:m" & [d65536].End(xlUp).Row)
Còn em thì thích dùng kiểu này hơn:
With Range([B8], [B65536].End(xlUp)).Resize(, 12)
(cột A không có dữ liệu cơ mà)
Mà công nhận file của anh "nặng" thật đấy ---> Phát hiện có hàng đóng name rác và vô số object trên file này...
Anh chỉnh lại thế này nhé:
- Xóa hết name rác (chú ý có rất nhiều name đang ẩn)
- Xóa hết Object
- Bỏ MergeCell tại J23583
- Clear hết Format từ dòng 8 trở xuống
- Chỉnh lại code như em nói ở trên
Kết quả mở file và sort sẽ nhanh như chớp
(file cũ của anh sort quá chậm mà mở file cũng chậm)
 
Upvote 0
File của anh sort không được là vì có cell bị merge thôi (cell J23583)
Ngoài ra về cách viết code để xác định Range, anh viết vầy:
With Range("a8:m" & [d65536].End(xlUp))
là sai cú pháp
Ít ra cũng phải là:
With Range("a8:m" & [d65536].End(xlUp).Row)
Còn em thì thích dùng kiểu này hơn:
With Range([B8], [B65536].End(xlUp)).Resize(, 12)
(cột A không có dữ liệu cơ mà)
Mà công nhận file của anh "nặng" thật đấy ---> Phát hiện có hàng đóng name rác và vô số object trên file này...
Anh chỉnh lại thế này nhé:
- Xóa hết name rác (chú ý có rất nhiều name đang ẩn)
- Xóa hết Object
- Bỏ MergeCell tại J23583
- Clear hết Format từ dòng 8 trở xuống
- Chỉnh lại code như em nói ở trên
Kết quả mở file và sort sẽ nhanh như chớp
(file cũ của anh sort quá chậm mà mở file cũng chậm)

Cảm ơn Ndu ! Mình làm theo cách của bạn OK rồi
 
Upvote 0
Cảm ơn Ndu ! Mình làm theo cách của bạn OK rồi
File của bác một rừng name rác luôn bác ơi, CSDL của bác cũng không đồng nhất, hàng, cột nên rất khó khăn cho việc sort.
Bác dùng Code này để hiện lên mấy cái "thằng cha" name rác ra đi rồi "tiêu diệt" chúng nhé!
PHP:
Sub HienName()
  Dim N As Name
  For Each N In ThisWorkbook.Names
    N.Visible = True
  Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom