Code sắp xếp theo 4 cột

Liên hệ QC

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
940
Được thích
172
Giới tính
Nữ
Chào các anh chị!
em có đoạn code để Sort dữ liệu theo 2 cột như sau: (ví dụ là cột A và cột B)
Mã:
.Sort Key1:=sh.Cells(1, "A"), Order1:=xlAscending, _
            key2:=sh.Cells(1, "B"), order2:=xlAscending, _
                                Header:=xlNo, Orientation:=xlTopToBottom
thế thì Sort theo 4 cột (ví dụ cột A,B,C,D) thì chỉnh code sao ạ.
 
Thì mình tự ghi macro cho 4 cột sẽ có code liền, xịn là đằng khác. :)
 
Upvote 0
Em tự ghi Macro thì được như vầy:
Mã:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.Worksheets("TonDau").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TonDau").Sort.SortFields.Add Key:=Range("B4"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("TonDau").Sort
        .SetRange Range("B4:E131")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Mong các anh chị rút gọn dùm, và dữ liệu của em không cố định trong vùng : SetRange Range("B4:E131") mà cứ nhập liệu vào là tự động Sort.
 
Upvote 0
Sort 4 cột mà ghi ra được macro đó thì ghê đấy bạn.
Mã:
Private Sub Sort4Cols(ByVal Rng As Range)
    With Rng.Parent.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Rng.Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'        .SortFields.Add Key:=Rng.Cells(1, 2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'        .SortFields.Add Key:=Rng.Cells(1, 3), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'        .SortFields.Add Key:=Rng.Cells(1, 4), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Rng
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Sub Test()
    Sort4Cols ActiveWorkbook.Worksheets("TonDau").Range("B4:E131")
End Sub
 
Upvote 0
Anh @huuthang_bd ơi, vùng Sort của em là động, chứ không phải cố định từ B4: E131, mà có thể là B4:E132, E133,E1300, cứ có dữ liệu mới vào là Sort, vì em nhập dữ liệu băng Form và nhập vào dòng cuối, và lúc đó mới Sort.
Bài đã được tự động gộp:

Đây code nhập liệu hàng hóa mới
Mã:
Private Sub nhm7_Click()
Dim Arr(), lastRow As Long, k As Long, dic As Object
 If Trim(thh7.Value) = "" Then
        MsgBox ("Hay nhap ten hang hoa"), , "GPE"
        thh7.SetFocus
    ElseIf Trim(dvt7.Value) = "" Then
        MsgBox ("Hay nhap don vi tinh"), , "GPE"
        dvt7.SetFocus
    Else
        Set dic = CreateObject("Scripting.Dictionary")
        lastRow = Sheet8.Range("A65536").End(xlUp).Row
        Arr = Sheet8.Range("A3:C" & lastRow).Value
        For k = 1 To UBound(Arr)
            If Not dic.Exists(LCase(Arr(k, 1))) Then dic.Add LCase(Arr(k, 1)), ""
        Next
        If dic.Exists(LCase(Trim(thh7.Value))) Then
            MsgBox ("Ten hang trung, hay nhap lai"), , "GPE"
            thh7.SetFocus
        Else
            Sheet8.Range("B" & lastRow + 1).Value = Application.Proper(Trim(thh7.Value))
            Sheet8.Range("C" & lastRow + 1).Value = UCase(left(Trim(dvt7.Value), 1)) & LCase(Mid(Trim(dvt7.Value), 2))
            Sheet8.Range("D" & lastRow + 1).Value = 0              
            Sheet8.Range("E" & lastRow + 1).Value = thhKT.Value
'Sort cho nay theo ten hang hoa tu cot B den cot E
        thh7 = Empty:  thhKT= Empty
        dvt7 = Empty
        thh7.SetFocus
            MsgBox ("Da nhap xong hang moi"), , "GPE"
        End If
        Set dic = Nothing
    End If
End Sub
Mong anh chỉ cho code Sort.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom