Nhờ giúp đỡ sort theo điều kiện từng range (1 người xem)

Liên hệ QC

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

al0nebaby

Thành viên mới
Tham gia
14/2/17
Bài viết
7
Được thích
0
Nhờ các thầy/cô và mọi người trong GPEX giúp em bài này:
Trong file em cần sắp xếp theo số lượng từ lớn đến nhỏ của cột E(Quanity) tương ứng với điều kiên ở cột A. Ví dụ như côt A là Process 1 thì sẽ sort Range("C1:E6"). Tương tự với Process 2 sẽ sort Range("C7:E11")....
Em cảm ơn mọi người!
 

File đính kèm

Trước tiên bỏ merge cell trong cột B
Sau đó vào Data/Sort
Level 1: Sort cột A thứ tự A-Z
Level 2: Sort cột E thứ tự lớn tới nhỏ
 
Upvote 0
Trước tiên bỏ merge cell trong cột B
Sau đó vào Data/Sort
Level 1: Sort cột A thứ tự A-Z
Level 2: Sort cột E thứ tự lớn tới nhỏ
Cảm ơn bebo021999 đã góp ý ạ. Vấn đề là mảng dữ liệu của em rất dài và nó không theo thứ tự tên nào cả( Không theo Process 1,2,3, có thể là 3,2,1 ). Và e cần giữ nguyên thứ tự Cột A. Nên e cần mọi người giúp code VBA để áp dụng cho những bảng sau nếu được ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy/Anh befaint. Hàm AGGREGATE có thể sắp xếp được danh sách số, trong bài thì em cần sắp xếp cả cột C và D theo giá trị cột E(mà không cần thêm cột là nào là tốt nhất). Thực ra thì em nghĩ code VBA cho nó mấy ngày hôm nay không ra nên mới mạo muội vào đây hỏi các thầy các bác( Em mới tự học được khoảng vài tháng). Dù sao cũng cảm ơn mọi người ạ ^^.
 
Upvote 0
Nhờ các thầy/cô và mọi người trong GPEX giúp em bài này:
Trong file em cần sắp xếp theo số lượng từ lớn đến nhỏ của cột E(Quanity) tương ứng với điều kiên ở cột A. Ví dụ như côt A là Process 1 thì sẽ sort Range("C1:E6"). Tương tự với Process 2 sẽ sort Range("C7:E11")....
Em cảm ơn mọi người!
Mã:
Sub test()
    Dim ar, i, j, temp1, temp2, temp3
    ar = Range("A2:E15")
    For i = 1 To UBound(ar) - 1
        For j = i + 1 To UBound(ar)
            If ar(j, 1) <> ar(i, 1) Then Exit For
            If ar(j, 5) <> "" And ar(j, 5) > ar(i, 5) Then
                    temp1 = ar(j, 3)
                    temp2 = ar(j, 4)
                    temp3 = ar(j, 5)
                    ar(j, 3) = ar(i, 3)
                    ar(j, 4) = ar(i, 4)
                    ar(j, 5) = ar(i, 5)
                    ar(i, 3) = temp1
                    ar(i, 4) = temp2
                    ar(i, 5) = temp3
            End If
        Next
    Next
    Range("A2:E15") = ar
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy/Anh befaint. Hàm AGGREGATE có thể sắp xếp được danh sách số, trong bài thì em cần sắp xếp cả cột C và D theo giá trị cột E(mà không cần thêm cột là nào là tốt nhất). Thực ra thì em nghĩ code VBA cho nó mấy ngày hôm nay không ra nên mới mạo muội vào đây hỏi các thầy các bác( Em mới tự học được khoảng vài tháng). Dù sao cũng cảm ơn mọi người ạ ^^.
Bạn muốn VBA thì chạy thử Sub này coi sao.
PHP:
Public Sub GPE_Sort()
Dim Rng As Range, Cll As Range, R As Long, Rws As Long, Tem As String
Set Rng = Range("A2", Range("A2").End(xlDown))
For Each Cll In Rng
    If Cll.Value <> Tem Then
        Tem = Cll.Value: R = Cll.Row
    ElseIf Cll.Offset(1).Value <> Tem Then
        Rws = Cll.Row
        Range("C" & R & ":E" & Rws).Sort Key1:=Range("E" & R), Order1:=xlDescending
    End If
Next Cll
End Sub
 
Upvote 0
Vâng a, nó hơi sai chút ạ ^^. Cảm ơn anh ạ
Bạn muốn VBA thì chạy thử Sub này coi sao.
PHP:
Public Sub GPE_Sort()
Dim Rng As Range, Cll As Range, R As Long, Rws As Long, Tem As String
Set Rng = Range("A2", Range("A2").End(xlDown))
For Each Cll In Rng
    If Cll.Value <> Tem Then
        Tem = Cll.Value: R = Cll.Row
    ElseIf Cll.Offset(1).Value <> Tem Then
        Rws = Cll.Row
        Range("C" & R & ":E" & Rws).Sort Key1:=Range("E" & R), Order1:=xlDescending
    End If
Next Cll
End Sub
Em cảm ơn Thầy Ba Tê nhiều ạ. Code em chạy thử thì thấy đúng rồi ạ. Tức tối với cái bài này mấy hôm nay cuối cùng cũng được thầy giúp đỡ. Thầy ơi nếu được thì cho em hỏi 2 dòng code này có nghĩa là gì không ạ?
Tem = Cll.Value: R = Cll.Row
ElseIf Cll.Offset(1).Value <> Tem
(Em hơi bỡ ngỡ với dấu ":" sau Tem=Cll.value, nó có nghĩa là gì thế ạ??)
Em cảm ơn thầy nhiều lắm ạ!
 
Upvote 0
Vâng a, nó hơi sai chút ạ ^^. Cảm ơn anh ạ

Em cảm ơn Thầy Ba Tê nhiều ạ. Code em chạy thử thì thấy đúng rồi ạ. Tức tối với cái bài này mấy hôm nay cuối cùng cũng được thầy giúp đỡ. Thầy ơi nếu được thì cho em hỏi 2 dòng code này có nghĩa là gì không ạ?
Tem = Cll.Value: R = Cll.Row
ElseIf Cll.Offset(1).Value <> Tem
(Em hơi bỡ ngỡ với dấu ":" sau Tem=Cll.value, nó có nghĩa là gì thế ạ??)
Em cảm ơn thầy nhiều lắm ạ!
Thường thì viết từng dòng lệnh:
Tem = Cll.Value
R = Cll.Row
"Hà tiện đất" viết chung 1 dòng nên có dấu ":" làm ký hiệu phân cách các câu lệnh.
Không nên học chiêu này, người viết, người đọc rối con mắt.
 
Upvote 0
Web KT

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

Back
Top Bottom