Code sắp xếp theo tên ABC trong trường hợp họ và tên trong cùng 1 cột (1 người xem)

  • Thread starter Thread starter van80
  • Ngày gửi Ngày gửi

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

van80

Thành viên chính thức
Tham gia
5/7/09
Bài viết
73
Được thích
4
Chào các anh chị trên diễn đàn !
Trong trường hợp họ và tên nằm trong một cột thì làm cách để sắp xếp theo thứ tự ABC
Code sắp xếp theo tên ABC trong trường hợp họ và tên trong cùng 1 cột
Trân trọng cám ơn 1
File đính kèm View attachment file.xls
 
Lần chỉnh sửa cuối:
Chào các anh chị trên diễn đàn !
Trong trường hợp họ và tên nằm trong một cột thì làm cách để sắp xếp theo thứ tự ABC
Code sắp xếp theo tên ABC trong trường hợp họ và tên trong cùng 1 cột
Trân trọng cám ơn 1
File đính kèm View attachment 109651
Cách thì luôn có nhưng chỉ sợ bạn không xài cách này thôi. Thử copy code này về coi sao. Cách này gọi là tà đạo hay gì gì đó.
PHP:
Sub sapxep()
Dim nguon(), i As Long, tam
nguon = Range([C4], [C65536].End(3)).Resize(, 3)
For i = 1 To UBound(nguon)
   tam = Right(nguon(i, 1), Len(nguon(i, 1)) - InStrRev(nguon(i, 1), " "))
   nguon(i, 3) = AscW(Left(tam, 1))
Next
[C4].Resize(i - 1, 3) = nguon
[C4].Resize(i - 1, 3).Sort [E3]
[E4].Resize(i - 1).ClearContents
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cách thì luôn có nhưng chỉ sợ bạn không xài cách này thôi. Thử copy code này về coi sao. Cách này gọi là tà đạo hay gì gì đó.
PHP:
Sub sapxep()
Dim nguon(), i As Long, tam
nguon = Range([C4], [C65536].End(3)).Resize(, 3)
For i = 1 To UBound(nguon)
   tam = Right(nguon(i, 1), Len(nguon(i, 1)) - InStrRev(nguon(i, 1), " "))
   nguon(i, 3) = AscW(Left(tam, 1))
Next
[C4].Resize(i - 1, 3) = nguon
[C4].Resize(i - 1, 3).Sort [E3]
[E4].Resize(i - 1).ClearContents
End Sub
Hihi ! Cám ơn anh nhiều, để mình thử xem sao.
 
Upvote 0
Cách thì luôn có nhưng chỉ sợ bạn không xài cách này thôi. Thử copy code này về coi sao. Cách này gọi là tà đạo hay gì gì đó.
PHP:
Sub sapxep()
Dim nguon(), i As Long, tam
nguon = Range([C4], [C65536].End(3)).Resize(, 3)
For i = 1 To UBound(nguon)
   tam = Right(nguon(i, 1), Len(nguon(i, 1)) - InStrRev(nguon(i, 1), " "))
   nguon(i, 3) = AscW(Left(tam, 1))
Next
[C4].Resize(i - 1, 3) = nguon
[C4].Resize(i - 1, 3).Sort [E3]
[E4].Resize(i - 1).ClearContents
End Sub
Anh quanghai ơi code chạy rất tốt, nhưng mình vận dụng vào File của mình thì bị lỗi. Mình có sửa chữa code nhưng không làm được. File của mình có 8 cột, anh giúp dùm nha. Thân ái chào anh.
File đính kèm View attachment file mau.xls
 
Upvote 0
Anh quanghai ơi code chạy rất tốt, nhưng mình vận dụng vào File của mình thì bị lỗi. Mình có sửa chữa code nhưng không làm được. File của mình có 8 cột, anh giúp dùm nha. Thân ái chào anh.
File đính kèm View attachment 109656

Sửa code của quanghai thành vầy:
Mã:
Sub sapxep()
  Dim arr, tmp, rng As Range
  Dim i As Long, lCs As Long
  [COLOR=#ff0000]Set rng = Range("A3:I10000")[/COLOR] '<--- Vùng du lieu bao gom tiêu de
 [COLOR=#ff0000] Const lColName = 2[/COLOR]  '<--- Vi trí cot TÊN
  With rng.Resize(, rng.Columns.Count + 1)
    lCs = .Columns.Count
    arr = .Value
    For i = 2 To UBound(arr)
      tmp = Trim(CStr(arr(i, lColName)))
      If Len(tmp) Then
        tmp = Mid(tmp, InStrRev(tmp, " ") + 1)
        arr(i, lCs) = tmp
      End If
    Next
    .Value = arr
    .Sort .Cells(1, lCs), 1, Header:=xlYes
    .Resize(, 1).Offset(, lCs - 1).ClearContents
  End With
End Sub
Bạn chỉ cần chú ý 2 dòng màu đỏ là được:
- Dòng đầu: khai báo vùng dữ liệu bao gồm cả dòng tiêu đề
- Dòng 2: Vị trí cột TÊN (trong file của bạn là cột thứ 2)
Các chổ khác để nguyên
 
Upvote 0
Sửa code của quanghai thành vầy:
Mã:
Sub sapxep()
  Dim arr, tmp, rng As Range
  Dim i As Long, lCs As Long
  [COLOR=#ff0000]Set rng = Range("A3:I10000")[/COLOR] '<--- Vùng du lieu bao gom tiêu de
 [COLOR=#ff0000] Const lColName = 2[/COLOR]  '<--- Vi trí cot TÊN
  With rng.Resize(, rng.Columns.Count + 1)
    lCs = .Columns.Count
    arr = .Value
    For i = 2 To UBound(arr)
      tmp = Trim(CStr(arr(i, lColName)))
      If Len(tmp) Then
        tmp = Mid(tmp, InStrRev(tmp, " ") + 1)
        arr(i, lCs) = tmp
      End If
    Next
    .Value = arr
    .Sort .Cells(1, lCs), 1, Header:=xlYes
    .Resize(, 1).Offset(, lCs - 1).ClearContents
  End With
End Sub
Bạn chỉ cần chú ý 2 dòng màu đỏ là được:
- Dòng đầu: khai báo vùng dữ liệu bao gồm cả dòng tiêu đề
- Dòng 2: Vị trí cột TÊN (trong file của bạn là cột thứ 2)
Các chổ khác để nguyên
Cám ơn 2 Anh đã giúp, mình sẽ vận dụng vào file của mình. Nhân đây cho mình hỏi mình có xem qua code save sheet hiện hành thành một file của anh ndu mình có vận dụng vào chương trình của mình nhưng không được. Khi save thì chỉ tạo ra thư mục ABC rỗng trong ổ đĩa D, (mình dùng excel 2003) mình có sửa chữa code nhưng không được. Cuối chỉ xuất ra một thư mục rỗng. Anh giúp dùm nha. Thân ái chào các anh.
 
Upvote 0
Nhân đây cho mình hỏi mình có xem qua code save sheet hiện hành thành một file của anh ndu mình có vận dụng vào chương trình của mình nhưng không được. Khi save thì chỉ tạo ra thư mục ABC rỗng trong ổ đĩa D, (mình dùng excel 2003) mình có sửa chữa code nhưng không được. Cuối chỉ xuất ra một thư mục rỗng. Anh giúp dùm nha. Thân ái chào các anh.

Sang topic kia mà hỏi nhé! Đề tài này đã xong, đúng không?
http://www.giaiphapexcel.com/forum/showthread.php?84992-Code-save-as-sheet-hiện-hành
 
Upvote 0
Chào các anh chị trên diễn đàn !
Trong trường hợp họ và tên nằm trong một cột thì làm cách để sắp xếp theo thứ tự ABC
Code sắp xếp theo tên ABC trong trường hợp họ và tên trong cùng 1 cột
Trân trọng cám ơn 1
File đính kèm View attachment 109651

Góp ý thêm:
Ko biết số liệu file của bạn có nhiều ko?
Theo kinh nghiệm của mình, nếu có vài trăm tên hoặc có thể là vài nghìn thì nên tách ra làm 2 cột họ và tên -> Khi lọc sẽ ra số liệu chính xác hơn. %#^#$
 
Upvote 0
Sửa code của quanghai thành vầy:
Mã:
Sub sapxep()
  Dim arr, tmp, rng As Range
  Dim i As Long, lCs As Long
  [COLOR=#ff0000]Set rng = Range("A3:I10000")[/COLOR] '<--- Vùng du lieu bao gom tiêu de
 [COLOR=#ff0000] Const lColName = 2[/COLOR]  '<--- Vi trí cot TÊN
  With rng.Resize(, rng.Columns.Count + 1)
    lCs = .Columns.Count
    arr = .Value
    For i = 2 To UBound(arr)
      tmp = Trim(CStr(arr(i, lColName)))
      If Len(tmp) Then
        tmp = Mid(tmp, InStrRev(tmp, " ") + 1)
        arr(i, lCs) = tmp
      End If
    Next
    .Value = arr
    .Sort .Cells(1, lCs), 1, Header:=xlYes
    .Resize(, 1).Offset(, lCs - 1).ClearContents
  End With
End Sub
Bạn chỉ cần chú ý 2 dòng màu đỏ là được:
- Dòng đầu: khai báo vùng dữ liệu bao gồm cả dòng tiêu đề
- Dòng 2: Vị trí cột TÊN (trong file của bạn là cột thứ 2)
Các chổ khác để nguyên
Mình áp dụng code này thấy rất hay. Nhưng với tình huống của mình có một vấn đề này nhờ các anh em chỉnh giúp.
Mình có danh sách bảng điểm HS nằm từ cột A đến cộ AG. Từ cột A đến E chứa thông tin HS, từ cộ F đến cột AG chứa điểm và các công thức để tính điểm và xếp thứ,... mình chỉ khai báo sắp xếp dữ liệu từ cột A đến cột E (khi lập danh sách) nhưng khi sắp xếp xong thì toàn bộ công thức từ cột F đến cột AG bị xóa mất.
Mình đã chỉnh lệnh nhưng không được. AE có thể chỉnh lại giúp mình được không.
Đây là File dữ liệu
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Không có ae nào nghiên cứu giúp mình sao
 
Upvote 0

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

Back
Top Bottom