Xin anh chị giúp đỡ code sắp xếp dữ liệu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Taiclub

Thành viên mới
Tham gia
6/2/17
Bài viết
28
Được thích
1
Em có file đính kèm
Mong anh chị viết code VBA giúp em sắp xếp dữ liệu theo Bảng kí hiệu: ("HS", "HT", "GV", "C", "K", "R1", "R2", "R3", "R4")
Hình sắp xếp 1 có các kí hiệu sau đó sẽ tự sắp xếp theo hình Sắp xếp 2. Em cảm ơn .Mong anh chị giúp đỡ.
 

File đính kèm

  • Sắp xếp_1.jpg
    Sắp xếp_1.jpg
    217.9 KB · Đọc: 15
  • Book1.xlsx
    10.5 KB · Đọc: 7
  • Sắp xếp_2.jpg
    Sắp xếp_2.jpg
    266.9 KB · Đọc: 15
Em có file đính kèm
Mong anh chị viết code VBA giúp em sắp xếp dữ liệu theo Bảng kí hiệu: ("HS", "HT", "GV", "C", "K", "R1", "R2", "R3", "R4")
Hình sắp xếp 1 có các kí hiệu sau đó sẽ tự sắp xếp theo hình Sắp xếp 2. Em cảm ơn .Mong anh chị giúp đỡ.
Dùng công thức và công cụ sort của excel
1/ Tạo cột phụ
Mã:
G3 =MATCH(F3,{"HS","HT","GV","C","K","R1","R2","R3","R4"},0)
copy xuống
2/ Sort theo cột B và cột G
 

File đính kèm

  • Book1 (2).xlsx
    10.8 KB · Đọc: 5
Upvote 0
B-ài này mà còn xin code thì quá sức lười biếng, chỉ muốn người ta làm dâng tận họng.

Bài làm đúng đắn thì phải sort theo custom list:
- copy cái list kia sang notepad
- Ctrl+h > replace " > with (để trống) > replace all
(sẽ xóa hết các dấu nháy ")
- copy cái list đã sửa.
- Bên bảng tính, chọn từ cái tiêu đề (1,2,3,4,5,6) đến dòng cuối
- Sort
- Sort by 6 (tức là kí hiệu), Sort On Values
- Order > chọn custom list...
- List entries > paste cái list đã sửa > Add
- OK
Excel sẽ sort cột 6 theo cái list ấy

1709914973633.png
 
Upvote 0
Dùng công thức và công cụ sort của excel
1/ Tạo cột phụ
Mã:
G3 =MATCH(F3,{"HS","HT","GV","C","K","R1","R2","R3","R4"},0)
copy xuống
2/ Sort theo cột B và cột G
Nhờ sự gợi ý của anh em tra google và ra bảng này và đã chạy ạ. Nhưng có 1 điều nữa mỗi lần thêm số liệu lại phải copy công thức của cột G rồi mới chạy (Em copy và paste khoảng 5000 dòng bằng cth này =IF(F3="","",MATCH(F3,{"HS","HT","GV","C","K","R1","R2","R3","R4"},0))). Cho em hỏi có cách nào hay hơn ko ạ. EM cảm ơn
Mã:
Sub Sort()

Application.ScreenUpdating = False
Dim LR As Long
    LR = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B2:B" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("G2:G" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A:G")
        .Header = xlYes
        .Orientation = xlTopToBottom
        .Apply
    End With
    
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Book_1_1.xlsm
    89.9 KB · Đọc: 4
Upvote 0
B-ài này mà còn xin code thì quá sức lười biếng, chỉ muốn người ta làm dâng tận họng.

Bài làm đúng đắn thì phải sort theo custom list:
- copy cái list kia sang notepad
- Ctrl+h > replace " > with (để trống) > replace all
(sẽ xóa hết các dấu nháy ")
- copy cái list đã sửa.
- Bên bảng tính, chọn từ cái tiêu đề (1,2,3,4,5,6) đến dòng cuối
- Sort
- Sort by 6 (tức là kí hiệu), Sort On Values
- Order > chọn custom list...
- List entries > paste cái list đã sửa > Add
- OK
Excel sẽ sort cột 6 theo cái list ấy

View attachment 299470
Nhờ gợi ý của anh em làm ra rồi em cảm ơn ạ.
 
Upvote 0
Nếu bạn muốn tự động sort theo cột F, mỗi khi nhập liệu vào cột F mà không cần thao tác sort thủ công hay dùng công thức cột phụ
nên dùng VBA với worksheet change event, cụ thể như sau:
Code này đặt trong worksheet module

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lr&, i&, j&, x&, k&
Dim ar, rng, res(1 To 10000, 1 To 6)
lr = Cells(Rows.Count, "F").End(xlUp).Row
If Intersect(Target, Range("A3:F" & lr + 1)) Is Nothing Then Exit Sub
ar = Array("HS", "HT", "GV", "C", "K", "R1", "R2", "R3", "R4")
rng = Range("A3:F" & lr).Value
For x = 0 To UBound(ar)
    For i = 1 To UBound(rng)
        If rng(i, 6) = ar(x) Then
            k = k + 1
            For j = 1 To 6
                res(k, j) = rng(i, j)
            Next
        End If
    Next
Next
Application.EnableEvents = False
Range("A3").Resize(UBound(rng), 6).Value = res
Application.EnableEvents = True
End Sub
 

File đính kèm

  • Book1.xlsm
    19.5 KB · Đọc: 6
Upvote 0
Web KT
Back
Top Bottom