Lọc excel từ A đến Z. (1 người xem)

Liên hệ QC

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

Nguyễn Thành Châu

Thành viên mới
Tham gia
12/10/17
Bài viết
46
Được thích
6
Giới tính
Nam
Em có file excel như trên, em lọc cột vị trí nhưng không theo tứ tự tứ 1 đến cuối được. Mong anh em hỗ trợ em với.
 

File đính kèm

Em có file excel như trên, em lọc cột vị trí nhưng không theo tứ tự tứ 1 đến cuối được. Mong anh em hỗ trợ em với.
Về Sort Chuỗi trong Excel, không tuân theo vị trí dấu trừ ( - ) nha bạn. Nó theo quy tắc này: 0,1,2,...9,a/A,b/B,c/C, ...z/Z.
Thứ tự chuỗi không phân biệt chữ in hoa và chữ thường.
Đối với yêu cầu cua bạn, nên quy định lại chuỗi ở cột A, ví dụ: 0000-Z00-0-0, cân nhắn số lượng ký tự, ví dụ: 4014-Z1-2-1 sẽ thành 4014-Z01-2-1
 
Em có file excel như trên, em lọc cột vị trí nhưng không theo tứ tự tứ 1 đến cuối được. Mong anh em hỗ trợ em với.
Thứ tự ưu tiên : Z..., các chỉ số tiếp theo.
Nếu yêu cầu sort khác, bạn làm rõ rồi tính tiếp.
Kết quả ghi tại cột M để so sánh
Mã:
Sub Sort_B()
Dim Nguon, Dong, Cot
Dim Mang
Dim Thg, Max, Tam
Dim Kq
Dim CSD
Dim i, j, k
Nguon = Sheet1.Range("A2", Sheet1.Range("K2").End(xlDown))
Dong = UBound(Nguon)
Cot = UBound(Nguon, 2)
ReDim CSD(1 To Dong, 1 To 1)
For i = 1 To Dong
    CSD(i, 1) = i
Next i
ReDim Mang(1 To Dong, 1 To 5)
For i = 1 To Dong
    k = 5
    For Each j In Split(Nguon(i, 1), "-")
        If IsNumeric(j) = True Then
            Mang(i, k) = CLng(j)
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
        Else
            Mang(i, k) = CLng(Right(j, Len(j) - 1))
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
            Mang(i, k) = AscW(Left(j, 1))
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
        End If
    Next j
Next i
For j = 5 To 1 Step -1
    ReDim Thg(Max)
    For i = 1 To Dong
        Thg(Mang(CSD(i, 1), j)) = Thg(Mang(CSD(i, 1), j)) + 1
    Next i
    k = 0
    For i = 0 To Max
        If Thg(i) <> "" Then
            k = k + Thg(i)
            Thg(i) = k
        End If
    Next i
    ReDim Tam(1 To Dong, 1 To 1)
    For i = Dong To 1 Step -1
        k = Thg(Mang(CSD(i, 1), j))
        Thg(Mang(CSD(i, 1), j)) = Thg(Mang(CSD(i, 1), j)) - 1
        Tam(k, 1) = CSD(i, 1)
    Next i
    CSD = Tam
Next j
ReDim Kq(1 To Dong, 1 To Cot)
For i = 1 To Dong
    k = CSD(i, 1)
    For j = 1 To Cot
        Kq(i, j) = Nguon(k, j)
    Next j
Next i
With Sheet1
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)).Clear
    .Range("M2").Offset(, 1).Resize(UBound(Kq), 1).NumberFormat = "@"
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)).Columns.AutoFit
End With
End Sub
 
Lần chỉnh sửa cuối:
Về Sort Chuỗi trong Excel, không tuân theo vị trí dấu trừ ( - ) nha bạn. Nó theo quy tắc này: 0,1,2,...9,a/A,b/B,c/C, ...z/Z.
Thứ tự chuỗi không phân biệt chữ in hoa và chữ thường.
Đối với yêu cầu cua bạn, nên quy định lại chuỗi ở cột A, ví dụ: 0000-Z00-0-0, cân nhắn số lượng ký tự, ví dụ: 4014-Z1-2-1 sẽ thành 4014-Z01-2-1
Cảm ơn bạn nha
Bài đã được tự động gộp:

Thứ tự ưu tiên : Z..., các chỉ số tiếp theo.
Nếu yêu cầu sort khác, bạn làm rõ rồi tính tiếp.
Kết quả ghi tại cột M để so sánh
Mã:
Sub Sort_B()
Dim Nguon, Dong, Cot
Dim Mang
Dim Thg, Max, Tam
Dim Kq
Dim CSD
Dim i, j, k
Nguon = Sheet1.Range("A2", Sheet1.Range("K2").End(xlDown))
Dong = UBound(Nguon)
Cot = UBound(Nguon, 2)
ReDim CSD(1 To Dong, 1 To 1)
For i = 1 To Dong
    CSD(i, 1) = i
Next i
ReDim Mang(1 To Dong, 1 To 5)
For i = 1 To Dong
    k = 5
    For Each j In Split(Nguon(i, 1), "-")
        If IsNumeric(j) = True Then
            Mang(i, k) = CLng(j)
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
        Else
            Mang(i, k) = CLng(Right(j, Len(j) - 1))
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
            Mang(i, k) = AscW(Left(j, 1))
            If Max < Mang(i, k) Then Max = Mang(i, k)
            k = k - 1
        End If
    Next j
Next i
For j = 5 To 1 Step -1
    ReDim Thg(Max)
    For i = 1 To Dong
        Thg(Mang(CSD(i, 1), j)) = Thg(Mang(CSD(i, 1), j)) + 1
    Next i
    k = 0
    For i = 0 To Max
        If Thg(i) <> "" Then
            k = k + Thg(i)
            Thg(i) = k
        End If
    Next i
    ReDim Tam(1 To Dong, 1 To 1)
    For i = Dong To 1 Step -1
        k = Thg(Mang(CSD(i, 1), j))
        Thg(Mang(CSD(i, 1), j)) = Thg(Mang(CSD(i, 1), j)) - 1
        Tam(k, 1) = CSD(i, 1)
    Next i
    CSD = Tam
Next j
ReDim Kq(1 To Dong, 1 To Cot)
For i = 1 To Dong
    k = CSD(i, 1)
    For j = 1 To Cot
        Kq(i, j) = Nguon(k, j)
    Next j
Next i
With Sheet1
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)).Clear
    .Range("M2").Offset(, 1).Resize(UBound(Kq), 1).NumberFormat = "@"
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)) = Kq
    .Range("M2").Resize(UBound(Kq), UBound(Kq, 2)).Columns.AutoFit
End With
End Sub
Mình cảm ơn bạn nhiều nha
 
Web KT

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

Back
Top Bottom