Làm sao sort danh sách theo tháng!

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,905
Giã sử tôi có 1 bảng tính với nhiều cột, trong đó có cột ngày tháng năm (chẳng hạn là cột B)... Vậy làm thế nào tôi có thể Sort danh sách theo THÁNG trong cột B này... tức là tháng 1 sẽ đứng trước.. vân vân.. đến tháng 12... Tất nhiên là ko dùng cột phụ!
Mến
ANH TUẤN
 
Đầu tiên anh cần format cột B qua dạng (mmmm) dùng custom format đấy. Xong rồi tha hồ sort kiểu nào cũng được.

Thân
 
Tôi không nghĩ anhtuan1066 lại hỏi câu này.
 
À. Cách trên có dạng tên tháng theo tiếng Anh. Nếu anh bạn muốn tháng có dạng số thì vô custom format cho nó là (mm).

Mến
 
Sort rồi... ko dc... nó ko tài nó sắp lại tháng 1 nằm trên cả...
Chú ý rằng cột ngày tháng năm này đang lộn xộn nha! Tôi chỉ cần cùng tháng thì xếp gần nhau và xếp tăng dần, mặc kệ ngày và năm là gì?
Tôi ko nghĩ là Custom Format có thể giãi quyết dc vấn đề, các bạn thử lại đi... Vì theo nguyên tắc thì Custom Format chỉ là cách hiển thị, ngày 2/5/2007 dù có format custom kiểu nào thì bản chất của nó vẫn là số 39204... Vậy làm sao có thể dựa vào Custom Format đễ Excel hiểu rằng ngày 2/5/2006 (38839) và ngày 2/5/2007 (39204) là cùng 1 dạng đễ chúng xếp cạnh nhau? Rất vô lý, phải ko?
Nói chung là tôi đã thử các kiểu, nhưng ko dc!
Đây là file đính kèm, các bạn hảy làm sao sort cột NGAY SINH tăng dần theo tháng : Từ tháng 1 đến tháng 12
ANH TUẤN
 

File đính kèm

  • Sort.zip
    23.2 KB · Đọc: 129
Lần chỉnh sửa cuối:
Ở đây thì bác nói:
anhtuan1066 đã viết:
Giã sử tôi có 1 bảng tính với nhiều cột, trong đó có cột ngày tháng năm (chẳng hạn là cột B)... Vậy làm thế nào tôi có thể Sort danh sách theo THÁNG trong cột B này... tức là tháng 1 sẽ đứng trước.. vân vân.. đến tháng 12... Tất nhiên là ko dùng cột phụ!
Đến đây bác lại nói:
anhtuan1066 đã viết:
Nói chung là tôi đã thử các kiểu, nhưng ko dc!
Nếu thật sự bác đã dùng các kiểu, cho em hỏi: Dùng cột phụ không phải là kiểu sao? Với em bài này nếu không dùng cột phụ để tách tháng ra thì em bó tay.

À... em hiểu rồi. Bác đố mọi người chớ gì? Tại nếu đã dùng cột phụ thì bác hỏi làm chi :
Chibi đã viết:
Tôi không nghĩ anhtuan1066 lại hỏi câu này.
 
Ko phài là đố! hi... hi... (chắc tại đố nhiều quá nên mọi người nghi ngờ)... Tôi bí vụ này thật đấy! Bạn nghĩ đi, dùng cột phụ thì dễ rồi, nhưng nếu dử liệu trên 20.000 dòng thì công thức tách tháng cũng phải chạy theo 20.000 dòng.. nhiều quá làm dung lượng file tăng và có thể bảng tính sẽ chậm!
Nếu giãi quyết vấn đề này bằng VBA thì phải làm thế nào đây? Bác BNTT hướng dẩn tôi với.. Bí thật đó!
Giá như chức năng Sort có thể chơi dc với 1 "mãng ảo" thì ngon rồi... tôi sẽ đặt name đễ tạo 1 mãng theo tháng (ko phải cột phụ) rồi cho chức năng sort sắp xếp theo "mãng ảo" này... Hic..
ANH TUẤN
 
À, anh muốn sort theo năm sinh. Cái này thì dùng VBA lấy dữ liệu ra từng tháng một theo auto filter thì mới được nếu không xài cột phụ lấy giá trị tháng.

Anh thữ làm trước đi rồi mọi người giúp ý kiến.

Mến
 
Tôi ko biết VBA nên ko nghĩ ra dc cách nào... Bạn BNTT và Digita có thể giúp tôi 1 code ko? Miển sao toàn bộ cột NGAY SINH sẽ dc sắp xếp tháng 1 đừng trước.. vân.. vân.. đến tháng 12 đứng sau cùng (ngày và năm ko quan trọng)... Có file đính kèm theo ở bài #5 đấy!
ANH TUẤN
 
anhtuan1066 đã viết:
... Tôi bí vụ này thật đấy! Bạn nghĩ đi, dùng cột phụ thì dễ rồi, nhưng nếu dử liệu trên 20.000 dòng thì công thức tách tháng cũng phải chạy theo 20.000 dòng.. nhiều quá làm dung lượng file tăng và có thể bảng tính sẽ chậm!
Nếu giãi quyết vấn đề này bằng VBA thì phải làm thế nào đây?
Tôi xin đề xuất: Dùng VBA và cột phụ
- Đưa giá trị month vào cột phụ
- Sort theo cột phụ
- Xoá giá trị trong cột phụ.
 
Néu không cột phụ thì giống như tự làm khó mình!

Nếu Là VBA thì mình nêu thử đường hướng như sau, các bạn cho ý kiến:

* Xác định số Record, cho vô biến LastRow;
* Khai 12 biến mãng (cho 12 tháng), kèm theo nó lá 12 biến đếm;
* Duyệt từ dòng thứ 2 (dòng 1 là tên trường) tất thẩy các records; gặp tháng nào gán vô mãng ứng với tháng nấy;
* Xóa toàn bộ records sau khi duyệt xong;
* Chép từ các mãng sang Sheet theo trình tự to đến nhỏ hay ngược lại

(chĩ mới xếp theo tháng thôi; kết quả chưa xếp theo năm)
 
Anh Tuấn down file sau có hướng dẩn cách làm ở cột F đấy nhá.

Mên
 

File đính kèm

  • sort.zip
    27.1 KB · Đọc: 132
Bác xài thử cái code này xem
Mã:
[color=darkblue]Sub[/color] Macro2()
[color=green]'[/color]
' Macro2 Macro
[color=green]' Macro recorded 12/11/2007 by QuocAnh[/color]
[color=green]'[/color]
'
    Sheet1.Select
    Cells.Find(What:="ngay sinh", SearchOrder:=xlByRows).Activate
    [color=darkblue]Dim[/color] sodong [color=darkblue]As[/color] [color=darkblue]Long[/color]
    sodong = ActiveCell.CurrentRegion.Rows.Count
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.Insert Shift:=xlToRight
    ActiveCell.FormulaR1C1 = "cot phu"
    ActiveCell.Offset(1, 0).FormulaR1C1 = "=DATE(9999,MONTH(RC[1]),DAY(RC[1]))"
    ActiveCell.Offset(1, 0).AutoFill Destination:=ActiveCell.Range("A2:A" & sodong)
    ActiveCell.Range("A1").Select
    Selection.Sort Key1:=ActiveCell, Order1:= _
        xlAscending, Key2:=ActiveCell.Offset(0, -2).Range("A1"), Order2:=xlAscending _
        , Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
        xlTopToBottom
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.Delete Shift:=xlToLeft
    ActiveCell.Select
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
 
SA_DQ đã viết:
Nếu Là VBA thì mình nêu thử đường hướng như sau, các bạn cho ý kiến:

* Xác định số Record, cho vô biến LastRow;
* Khai 12 biến mãng (cho 12 tháng), kèm theo nó lá 12 biến đếm;
* Duyệt từ dòng thứ 2 (dòng 1 là tên trường) tất thẩy các records; gặp tháng nào gán vô mãng ứng với tháng nấy;
* Xóa toàn bộ records sau khi duyệt xong;
* Chép từ các mãng sang Sheet theo trình tự to đến nhỏ hay ngược lại

(chĩ mới xếp theo tháng thôi; kết quả chưa xếp theo năm)

Nếu theo cách VBA cách của anh Sa thì các bước anh nêu ra thì đúng theo tuần tự. Nhưng kiểm tra từng hàng cho 12 biến đếm trong thì hơi lâu. Nên kết hợp chức năng auto filter lọc từng tháng rồi copy dữ liệu được lọc qua sheet khác.

Tuy nhiên vì có cách sort không cần cột phụ nên khỏi cần dùng "thuốc" VBA trong trường hợp này.

Mến
 
Oh... rõ ràng hổi nảy làm theo cách Digita ko tài nào dc, sao giờ lại dc ta? Còn cách Soibien thì cũng giống mình đang làm.. hi.. hi.. Là có dùng cột phụ, tuy nhiên xong thì xóa luôn
Vụ này lạ thật...
Rất hay, và nếu đúng như Digita nói thì ta còn có thể sort theo năm luôn nữa đấy! Hay nói chung là sort theo bất cứ giống gì ta nghĩ dc, đó là dựa vào Custom List trong Options và dựa và Custom Format... Hay thật...
Lở dùng VBA rồi thì làm luôn code cho đở mất công chạy tới chạy lui:
Mã:
Sub SAPXEP()
    Range("D2:D10000").NumberFormat = "mmm"
    Range("B2:K10000").Sort Key1:=Range("D2"), Order1:=xlAscending
    Range("D2:D10000").NumberFormat = "dd/mm/yyyy"
End Sub
Quá gọn!...
Một phát hiện cực kỳ! Chân thành cảm ơn Digita!
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
Tôi lại hỏi thêm 1 chuyện nữa: Vì sort giống Digiata nói sẽ có liên quan đến Custom List... Ta đễ ý list mặc định của Excel là ko thể Remove dc... Vậy có phương pháp nào xóa dc Custom list này ko? (kể cả lập trình)
 
Không lẽ nói bó tay với bác rồi thì lơ luôn, thế là em ra ngoài mày mò nãy giờ. Bi giờ vào lại nhà thì thấy bài giải quá trời. Nhưng xem lại thì bài của em làm cũng có cái khác, vì bài của mấy bác sort xong cái cột STT nó lung tung cả lên, còn theo bài #15 của bác thì lỡ bác có một record nào đó nằm ở hàng thứ 100001 thì sao? Nên thui, cho em tham gia với. (Chỉ được góp ý, không được chê à nghen)
 

File đính kèm

  • utf-8''Sort_2.zip
    57 KB · Đọc: 65
Nó báo lỗi dòng này bác ơi:
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ANH TUẤN
 
Thua các Bác này luôn , hợi bị ghiền VBA rồi.
 
Ko phải đâu ThuNghi ơi... Thật ra cách sort thế này quả là lạ ko phải ai cũng biết... Nhưng rõ ràng nếu thao tác bằng tay cho dử liệu 10.000 dòng thì kéo lên kéo xuống nội cái chuyện Format ko cũng thấy mệt rồi.. Nên mượn tí code cho nhẹ công việc thôi mà... hi... hi... Và còn 1 điểm quan trọng nữa, bỏ đi cột phụ rồi dung lượng file giảm đáng kễ: File gốc của tôi là 1,5M... giờ bỏ cột phụ còn có 390KB... Sướng thấy mồ ngu sao ko làm...
Sẳn đây tôi nhờ các cao thủ làm cách nào bỏ dc cột phụ P (đang đặt name là STT)... Đại khái làm thế nào vẫn có dc name STT đễ dùng cho các sheet khác mà ko cần đến cột P
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom