Cần giúp đỡ Sort 2 cột theo tuần tự từng cột một (Dùng cho Excel 2003) (2 người xem)

Liên hệ QC

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau (Tôi xài Excel 2003):
Sort cột B theo nhóm ký tự đầu giống nhau của các ô ở cột B (Các ký tự đầu giống nhau có thể từ 2 => 4 ký tự và không bao gồm ký tự là số)=> Sau khi sort cột B rồi => Đã phân nhóm các ký tự đầu giống nhau => Sort cột C (Là cột ngày tháng) theo thứ tự tăng dần (Theo từng nhóm ký tự đầu giống nhau ở cột B, ngoại trừ nhóm ký tự "PN" và "PX" là không Sort cột C).
Ví dụ: Sau khi Sort cột B thì sẽ có nhóm ký tự "CT", "HƯ", "PCNN",... đã phân riêng từng nhóm => Trong nhóm ký tự "CT" sẽ Sort cột C (Là cột ngày tháng) theo thứ tự tăng dần của riêng nhóm ký tự "CT" => Tương tự như thế với nhóm ký tự "HƯ", "PCNN",...(ngoại trừ nhóm ký tự "PN" và "PX" là không Sort cột C)
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có file đính kèm. Các ký tự đầu giống nhau có thể từ 2 => 4 ký tự và không bao gồm ký tự là số. Tôi xài Excel 2003.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau (Tôi xài Excel 2003):
Sort cột B theo nhóm ký tự đầu giống nhau của các ô ở cột B (Các ký tự đầu giống nhau có thể từ 2 => 4 ký tự và không bao gồm ký tự là số)=> Sau khi sort cột B rồi => Đã phân nhóm các ký tự đầu giống nhau => Sort cột C (Là cột ngày tháng) theo thứ tự tăng dần (Theo từng nhóm ký tự đầu giống nhau ở cột B, ngoại trừ nhóm ký tự "PN" và "PX" là không Sort cột C).
Ví dụ: Sau khi Sort cột B thì sẽ có nhóm ký tự "CT", "HƯ", "PCNN",... đã phân riêng từng nhóm => Trong nhóm ký tự "CT" sẽ Sort cột C (Là cột ngày tháng) theo thứ tự tăng dần của riêng nhóm ký tự "CT" => Tương tự như thế với nhóm ký tự "HƯ", "PCNN",...(ngoại trừ nhóm ký tự "PN" và "PX" là không Sort cột C)
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có file đính kèm. Các ký tự đầu giống nhau có thể từ 2 => 4 ký tự và không bao gồm ký tự là số. Tôi xài Excel 2003.
Hơi bị khó hiểu, làm ra kết quả giống kết quả mẫu thôi nghe. Còn "nêm nếm thêm muối ớt chanh đường" thì tuỳ bạn.
PHP:
Public Sub GPE_SORT()
Application.ScreenUpdating = False
Dim sArr(), dArr1(), dArr2(), K1 As Long, K2 As Long, I As Long, J As Long, R As Long, X As Long, N As Long
sArr = Range([A7], [A7].End(xlDown)).Resize(, 5).Value
X = UBound(sArr, 1)
ReDim dArr1(1 To X, 1 To 6)
ReDim dArr2(1 To X, 1 To 6)
For I = 1 To X
    If Left(sArr(I, 2), 2) <> "PN" And Left(sArr(I, 2), 2) <> "PX" Then
        K1 = K1 + 1
        For J = 1 To 5
            dArr1(K1, J) = sArr(I, J)
        Next J
            For N = 1 To Len(sArr(I, 2))
                If Not IsNumeric(Mid(sArr(I, 2), N, 1)) Then
                    dArr1(K1, 6) = dArr1(K1, 6) & Mid(sArr(I, 2), N, 1)
                Else
                    Exit For
                End If
            Next N
    Else
        K2 = K2 + 1
        For J = 1 To 5
            dArr2(K2, J) = sArr(I, J)
        Next J
        dArr2(K2, 6) = Left(sArr(I, 2), 2)
    End If
Next I
[I7:M10000].ClearContents
[I7].Resize(K1, 6) = dArr1
[I7].Resize(K1, 6).Sort Key1:=[N7], Key2:=[K7]
R = [J65536].End(xlUp).Row + 1
Range("I" & R).Resize(K2, 6) = dArr2
Range("I" & R).Resize(K2, 6).Sort Key1:=Range("N" & R)
[N7:N10000].ClearContents
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Hơi bị khó hiểu, làm ra kết quả giống kết quả mẫu thôi nghe. Còn "nêm nếm thêm muối ớt chanh đường" thì tuỳ bạn.
PHP:
Public Sub GPE_SORT()
Application.ScreenUpdating = False
Dim sArr(), dArr1(), dArr2(), K1 As Long, K2 As Long, I As Long, J As Long, R As Long, X As Long, N As Long
sArr = Range([A7], [A7].End(xlDown)).Resize(, 5).Value
X = UBound(sArr, 1)
ReDim dArr1(1 To X, 1 To 6)
ReDim dArr2(1 To X, 1 To 6)
For I = 1 To X
    If Left(sArr(I, 2), 2) <> "PN" And Left(sArr(I, 2), 2) <> "PX" Then
        K1 = K1 + 1
        For J = 1 To 5
            dArr1(K1, J) = sArr(I, J)
        Next J
            For N = 1 To Len(sArr(I, 2))
                If Not IsNumeric(Mid(sArr(I, 2), N, 1)) Then
                    dArr1(K1, 6) = dArr1(K1, 6) & Mid(sArr(I, 2), N, 1)
                Else
                    Exit For
                End If
            Next N
    Else
        K2 = K2 + 1
        For J = 1 To 5
            dArr2(K2, J) = sArr(I, J)
        Next J
        dArr2(K2, 6) = Left(sArr(I, 2), 2)
    End If
Next I
[I7:M10000].ClearContents
[I7].Resize(K1, 6) = dArr1
[I7].Resize(K1, 6).Sort Key1:=[N7], Key2:=[K7]
R = [J65536].End(xlUp).Row + 1
Range("I" & R).Resize(K2, 6) = dArr2
Range("I" & R).Resize(K2, 6).Sort Key1:=Range("N" & R)
[N7:N10000].ClearContents
Application.ScreenUpdating = True
End Sub
Vâng, cảm ơn Quý vị đã giúp đỡ, đã sát với đề bài. Nhưng mà có thể Sort 2 cột B và C ngay trên vùng dữ liệu cũ được không ạ? Bởi vì theo như em thấy thì dữ liệu đã Sort nằm ở vùng [I:M] => lại phải chỉnh sửa, định dạng kiểu chữ, kiểu số, đậm nghiêng,...
 
Vâng, cảm ơn Quý vị đã giúp đỡ, đã sát với đề bài. Nhưng mà có thể Sort 2 cột B và C ngay trên vùng dữ liệu cũ được không ạ? Bởi vì theo như em thấy thì dữ liệu đã Sort nằm ở vùng [I:M] => lại phải chỉnh sửa, định dạng kiểu chữ, kiểu số, đậm nghiêng,...
Thay "Cái nùi" này
PHP:
[I7:M10000].ClearContents
[I7].Resize(K1, 6) = dArr1
[I7].Resize(K1, 6).Sort Key1:=[N7], Key2:=[K7]
R = [J65536].End(xlUp).Row + 1
Range("I" & R).Resize(K2, 6) = dArr2
Range("I" & R).Resize(K2, 6).Sort Key1:=Range("N" & R)
[N7:N10000].ClearContents
Thành "cái nùi này" xem sao
PHP:
[A7:E10000].ClearContents
[A7].Resize(K1, 6) = dArr1
[A7].Resize(K1, 6).Sort Key1:=[F7], Key2:=[C7]
R = [B65536].End(xlUp).Row + 1
Range("A" & R).Resize(K2, 6) = dArr2
Range("A" & R).Resize(K2, 6).Sort Key1:=Range("F" & R)
[F7:F10000].ClearContents

-------------
Đã sợ "muối ớt chanh đường" nên nói trước rồi vẫn còn "bị"
 
Thay "Cái nùi" này
PHP:
[I7:M10000].ClearContents
[I7].Resize(K1, 6) = dArr1
[I7].Resize(K1, 6).Sort Key1:=[N7], Key2:=[K7]
R = [J65536].End(xlUp).Row + 1
Range("I" & R).Resize(K2, 6) = dArr2
Range("I" & R).Resize(K2, 6).Sort Key1:=Range("N" & R)
[N7:N10000].ClearContents
Thành "cái nùi này" xem sao
PHP:
[A7:E10000].ClearContents
[A7].Resize(K1, 6) = dArr1
[A7].Resize(K1, 6).Sort Key1:=[F7], Key2:=[C7]
R = [B65536].End(xlUp).Row + 1
Range("A" & R).Resize(K2, 6) = dArr2
Range("A" & R).Resize(K2, 6).Sort Key1:=Range("F" & R)
[F7:F10000].ClearContents
Em xin sửa lại thành (Sửa từ cột F thành cột B):
PHP:
[A7:E10000].ClearContents
[A7].Resize(K1, 6) = dArr1
[A7].Resize(K1, 6).Sort Key1:=[F7], Key2:=[C7]
R = [B65536].End(xlUp).Row + 1
Range("A" & R).Resize(K2, 6) = dArr2
Range("A" & R).Resize(K2, 6).Sort Key1:=Range("B" & R)
[F7:F10000].ClearContents
Vì nếu để ở cột F thì sẽ bị Sort như là Sort theo cột C (Không như theo đề bài).
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom