Sắp xếp tăng dần không như ý

Liên hệ QC

Loan Châu

Thành viên hoạt động
Tham gia
17/6/17
Bài viết
136
Được thích
39
Giới tính
Nữ
Thân chào các anh chị và các bạn !
hiện tôi muốn sắp xếp dữ lieu đang lộn xộn theo thứ tự từ 1- đến lớn nhất. tôi có tìm kiếm trên diễn đàn và có code như sau:
Sub Test()
With Range("A1:N81")
.Sort .Cells(1, 3), xlAscending, Header:=xlYes
End With
End Sub
em gởi đính kèm file, em muốn sắp xếp cột A theo tứ tự Nhưng khi chạy code này thì lại vướng khó khan là nó không sắp xếp từ 1,2,..9,10,11,12 ….,999 mà nó sắp xếp theo kiểu của excel 1,2,9,10,100,101,.....
Quý anh chị và các bạn nào sửa giúp tôi code trên với!
Tôi xin cảm ơn trước rất nhiều!
 

File đính kèm

  • data.xls
    46.5 KB · Đọc: 11
Lần chỉnh sửa cuối:
Thân chào các anh chị và các bạn !
hiện tôi muốn sắp xếp dữ lieu đang lộn xộn theo thứ tự từ 1- đến lớn nhất. tôi có tìm kiếm trên diễn đàn và có code như sau:
Sub Test()
With Range("A1:N81")
.Sort .Cells(1, 3), xlAscending, Header:=xlYes
End With
End Sub
Nhưng khi chạy code này thì lại vướng khó khan là nó không sắp xếp từ 1,2,..9,10,11,12 ….,999 mà nó sắp xếp theo kiểu của excel 1,2,9,10,100,101,.....
Quý anh chị và các bạn nào sửa giúp tôi code trên với!
Tôi cảm ơn trước rất nhiều!
PHP:
Function NCSort(ByVal NumText As String, Optional ByVal SortOrder As Boolean = True) As String
  Dim n As Long, aRes(9), sNum As String
  For n = 1 To Len(NumText)
    sNum = Mid(NumText, n, 1)
    aRes(sNum) = aRes(sNum) & sNum
  Next
  NCSort = IIf(SortOrder, Join(aRes, ""), StrReverse(Join(aRes, "")))
End Function
 
Upvote 0
PHP:
Function NCSort(ByVal NumText As String, Optional ByVal SortOrder As Boolean = True) As String
  Dim n As Long, aRes(9), sNum As String
  For n = 1 To Len(NumText)
    sNum = Mid(NumText, n, 1)
    aRes(sNum) = aRes(sNum) & sNum
  Next
  NCSort = IIf(SortOrder, Join(aRes, ""), StrReverse(Join(aRes, "")))
End Function
mình cảm ơn bạn rất nhiều trước đã, tiện đây Bạn cho mình hỏi, công thức này dung như thế nào bạn?
 
Upvote 0
Thân chào các anh chị và các bạn !
hiện tôi muốn sắp xếp dữ lieu đang lộn xộn theo thứ tự từ 1- đến lớn nhất. tôi có tìm kiếm trên diễn đàn và có code như sau:
Sub Test()
With Range("A1:N81")
.Sort .Cells(1, 3), xlAscending, Header:=xlYes
End With
End Sub
em gởi đính kèm file, em muốn sắp xếp cột A theo tứ tự Nhưng khi chạy code này thì lại vướng khó khan là nó không sắp xếp từ 1,2,..9,10,11,12 ….,999 mà nó sắp xếp theo kiểu của excel 1,2,9,10,100,101,.....
Quý anh chị và các bạn nào sửa giúp tôi code trên với!
Tôi xin cảm ơn trước rất nhiều!
Thử:
PHP:
Sub abc()
    With ActiveSheet
        Range("A1:N81").Sort [C1], 1
    End With
End Sub
 
Upvote 0
Thân chào các anh chị và các bạn !
hiện tôi muốn sắp xếp dữ lieu đang lộn xộn theo thứ tự từ 1- đến lớn nhất. tôi có tìm kiếm trên diễn đàn và có code như sau:
Sub Test()
With Range("A1:N81")
.Sort .Cells(1, 3), xlAscending, Header:=xlYes
End With
End Sub
em gởi đính kèm file, em muốn sắp xếp cột A theo tứ tự Nhưng khi chạy code này thì lại vướng khó khan là nó không sắp xếp từ 1,2,..9,10,11,12 ….,999 mà nó sắp xếp theo kiểu của excel 1,2,9,10,100,101,.....
Quý anh chị và các bạn nào sửa giúp tôi code trên với!
Tôi xin cảm ơn trước rất nhiều!
Cột A là Text nên bạn khó Sort theo Number.
"Chơi chiêu" nó 1 chút:
PHP:
Public Sub s_Gpe()
Dim Arr(), I As Long, R As Long
Arr = Range("A1", Range("A1").End(xlDown)).Resize(, 101).Value
R = UBound(Arr)
For I = 1 To R
    Arr(I, 101) = Split(Arr(I, 1), "-")(1)
Next I
Range("A1").Resize(R, 101) = Arr
Range("A1").Resize(R, 101).Sort Key1:=Range("CW1"), Order1:=xlAscending
Range("CW1").Resize(R).ClearContents
End Sub
 
Upvote 0
Bạn ơi, nó vẫn sắp sắp xếp từ NTC10,NTX100,NTX101 mà không theo tứ tự NTX10,NTX11,NTX12,... , NTX99, NTX100 bạn à
Lúc tôi làm, bạn chưa gửi File.
Bạn không nói rõ dữ liệu của bạn trong mỗi Cell có cả chữ lẫn số.
Với bài toán của bạn, cũng đơn giản thôi, đầu tiên là tách số, tiếp đến là Sort.
Vậy nhé.
 
Upvote 0
Cột A là Text nên bạn khó Sort theo Number.
"Chơi chiêu" nó 1 chút:
PHP:
Public Sub s_Gpe()
Dim Arr(), I As Long, R As Long
Arr = Range("A1", Range("A1").End(xlDown)).Resize(, 101).Value
R = UBound(Arr)
For I = 1 To R
    Arr(I, 101) = Split(Arr(I, 1), "-")(1)
Next I
Range("A1").Resize(R, 101) = Arr
Range("A1").Resize(R, 101).Sort Key1:=Range("CW1"), Order1:=xlAscending
Range("CW1").Resize(R).ClearContents
End Sub

em cảm ơn anh rất nhiều nhé! code của anh rất tuyệt. Chúc anh có một tuần mới với nhiều niềm vui!
Bài đã được tự động gộp:

Lúc tôi làm, bạn chưa gửi File.
Bạn không nói rõ dữ liệu của bạn trong mỗi Cell có cả chữ lẫn số.
Với bài toán của bạn, cũng đơn giản thôi, đầu tiên là tách số, tiếp đến là Sort.
Vậy nhé.
cảm ơn bạn rất nhiều, chúc bạn tuần mới làm việc hiệu quả nhé!
 
Upvote 0
Thân chào các anh chị và các bạn !
hiện tôi muốn sắp xếp dữ lieu đang lộn xộn theo thứ tự từ 1- đến lớn nhất. tôi có tìm kiếm trên diễn đàn và có code như sau:
Sub Test()
With Range("A1:N81")
.Sort .Cells(1, 3), xlAscending, Header:=xlYes
End With
End Sub
em gởi đính kèm file, em muốn sắp xếp cột A theo tứ tự Nhưng khi chạy code này thì lại vướng khó khan là nó không sắp xếp từ 1,2,..9,10,11,12 ….,999 mà nó sắp xếp theo kiểu của excel 1,2,9,10,100,101,.....
Quý anh chị và các bạn nào sửa giúp tôi code trên với!
Tôi xin cảm ơn trước rất nhiều!
Bạn thử với hàm Sort2DArray của thầy NDu xem
 

File đính kèm

  • data.xls
    86.5 KB · Đọc: 5
Upvote 0
Cột A là Text nên bạn khó Sort theo Number.
"Chơi chiêu" nó 1 chút:
PHP:
Public Sub s_Gpe()
Dim Arr(), I As Long, R As Long
Arr = Range("A1", Range("A1").End(xlDown)).Resize(, 101).Value
R = UBound(Arr)
For I = 1 To R
    Arr(I, 101) = Split(Arr(I, 1), "-")(1)
Next I
Range("A1").Resize(R, 101) = Arr
Range("A1").Resize(R, 101).Sort Key1:=Range("CW1"), Order1:=xlAscending
Range("CW1").Resize(R).ClearContents
End Sub

Nhân đây anh cho em làm phiền anh thêm một xí đó là anh cho em hỏi là em muốn đổi cột mình sắp xếp thứ tự thì mình thay đổi dong nào vậy anh?
 
Upvote 0
Web KT
Back
Top Bottom