viết code trong excel để sắp xếp theo yêu cầu sau đó tách sheet (1 người xem)

  • Thread starter Thread starter thufpts
  • Ngày gửi Ngày gửi
Liên hệ QC

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

thufpts

Thành viên hoạt động
Tham gia
6/8/12
Bài viết
157
Được thích
6
Giới tính
Nam
Nghề nghiệp
Bốc vác
em chào các bác!
em có một file excel có các cột ở dòng số 8 được đánh thứ tự ưu tiên và mong muốn được sắp xếp theo các điều kiện sau nhờ các bác, anh chị giúp đỡ
1) cột E, W, AC các dữ liệu giống nhau thì được sắp xếp cùng nhau theo thứ tự ưu tiên đã đánh đâu ở dòng số 8, cột G sắp xếp tăng dần ví dụ
ví dụ kết quả như sau khi bấm nút "sap xep" sẽ sắp xếp MACHINE có 7 dòng giá trị là PFR 01, TEETH là 44 và INK COLOR là BLACK được sắp xếp cùng nhau sao cho cột FINAL D có ngày tăng dần cho đến khi hết TEETH có giá trị là 44 thì chuyển sang TEETH có giá trị 44, hết 44 thì chuyển sang 83, hết 83 thì chuyển sang 46 lần lượt như ảnh em gửi, nó phức tạp ở chỗ là nhiều dữ liệu quá ngồi làm thủ công thì rối loạn luôn.

2) nếu thứ tự ưu tiên được thay đổi thì khi bấm nút sắp xếp sẽ được thay đổi theo thứ tự ưu tiên mới
3) khi sắp xếp xong tiến hành tách sheet theo cột MACHINE NAME, ví dụ cột MACHINE NAME có 3 tên là PFR09, PFR01 và PFR04 thì tách thành 3 sheets, nghĩa là có bao nhiêu tên thì tách thành bây nhiêu sheet

1727684604007.png
 

File đính kèm

Lần chỉnh sửa cuối:
Giải pháp
Đôi khi thớt sort theo 4 cột hoặc 6 cột thì phải làm sao? :)
Chỉnh lại một chút bạn hiền:
Mã:
Sub SortbyMultipleColumns()
Dim lastRow As Long, i As Long, rng As Range, SortRng As Range
With Worksheets("PFL_PRINT")
    lastRow = .Range("B9").End(xlDown).Row
    Set rng = Range("B9:AT" & lastRow) '
    For i = 31 To 1 Step -1
        Set SortRng = .Range("A8:AC8").Find(i)
        If Not SortRng Is Nothing Then rng.Sort Key1:=SortRng.Offset(1, 0), Order1:=xlAscending
    Next
End With
End Sub
Đầy đủ thì thêm phần kiểm tra tên sheet và tách. Hahaha ...
em chào các bác!
em có một file excel có các cột ở dòng số 8 được đánh thứ tự ưu tiên và mong muốn được sắp xếp theo các điều kiện sau nhờ các bác, anh chị giúp đỡ
1) cột E, W, AC các dữ liệu giống nhau thì được sắp xếp cùng nhau theo thứ tự ưu tiên đã đánh đâu ở dòng số 8, cột G sắp xếp tăng dần
2) nếu thứ tự ưu tiên được thay đổi thì khi bấm nút sắp xếp sẽ được thay đổi theo thứ tự ưu tiên mới
3) khi sắp xếp xong tiến hành tách sheet theo cột MACHINE NAME, ví dụ cột MACHINE NAME có 3 tên là PFR09, PFR01 và PFR04 thì tách thành 3 sheets, nghĩa là có bao nhiêu tên thì tách thành bây nhiêu sheet
File còn cả mật khẩu thì theo bạn nên hỗ trợ thế nào?
 
Upvote 0
Đúng rồi nhưng chức năng sort của excel không làm được, có nhiều điều kiện như em đã nêu

em chào các bác!
em có một file excel có các cột ở dòng số 8 được đánh thứ tự ưu tiên và mong muốn được sắp xếp theo các điều kiện sau nhờ các bác, anh chị giúp đỡ
1) cột E, W, AC các dữ liệu giống nhau thì được sắp xếp cùng nhau theo thứ tự ưu tiên đã đánh đâu ở dòng số 8, cột G sắp xếp tăng dần
2) nếu thứ tự ưu tiên được thay đổi thì khi bấm nút sắp xếp sẽ được thay đổi theo thứ tự ưu tiên mới
3) khi sắp xếp xong tiến hành tách sheet theo cột MACHINE NAME, ví dụ cột MACHINE NAME có 3 tên là PFR09, PFR01 và PFR04 thì tách thành 3 sheets, nghĩa là có bao nhiêu tên thì tách thành bây nhiêu sheet


View attachment 304337
Viết code mẫu cho bạn nghiên cứu. Code chưa hoàn chỉnh vì vấn đề bạn đưa ra chưa hoàn chỉnh
Mã:
Sub SapXepDuLieu()
Dim SortRng As Range, sh As Worksheet
Set sh = Sheets("PFL_PRINT")
Set SortRng = sh.Range("E9", sh.Range("E9").End(4))
With sh.Sort
   .SortFields.Clear
   .SetRange SortRng.Resize(, 25)
   .SortFields.Add SortRng.Offset(, 0)
   .SortFields.Add SortRng.Offset(, 24)
   .SortFields.Add SortRng.Offset(, 18)
   .SortFields.Add SortRng.Offset(, 2)
   .SortFields.Add SortRng.Offset(, 15)
   .Header = xlYes
   .Apply
   .SortFields.Clear
End With
End Sub
Sub Tach_Sheet()
Application.ScreenUpdating = False
Dim sArr(), i As Long, sMachine(), j As Long, k As Long, dArr(), n As Long
With Sheets("PFL_PRINT")
   sArr = .Range("E10", .Range("E9").End(4)).Resize(, 25).Value
End With
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(sArr)
      If Not .Exists(sArr(i, 1)) Then .Add sArr(i, 1), ""
   Next
   sMachine = .keys
End With
For n = 0 To UBound(sMachine)
    ReDim dArr(1 To UBound(sArr), 1 To UBound(sArr, 2))
    k = 0
    For i = 1 To UBound(sArr)
        If sArr(i, 1) = sMachine(n) Then
            k = k + 1
            For j = 1 To UBound(sArr, 2)
                dArr(k, j) = sArr(i, j)
            Next
        End If
    Next
    With Sheets.Add
        .Name = sMachine(n)
        .Range("E10").Resize(k, UBound(dArr, 2)) = dArr
    End With
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn đang làm thủ công bằng cách nào?
Kết quả mẫu bạn muốn là như nào

Dạ em sẽ mổ tả kết quả mong muốn và tô màu để bác dễ nhận biết hơn
các cột dữ liệu có cùng giá trị MACHINE NAME, TEETH, INK COLOR được sắp xếp lên cùng nhau sao cho cột FINAL D có ngày được sắp xếp tăng dần và INK COLOR nếu có các màu khác thì ưu tiên màu BLACK trước
ví dụ kết quả như sau khi bấm nút "sap xep" sẽ sắp xếp MACHINE có 7 dòng giá trị là PFR 01, TEETH là 44 và INK COLOR là BLACK được sắp xếp cùng nhau sao cho cột FINAL D có ngày tăng dần cho đến khi hết TEETH có giá trị là 44 thì chuyển sang TEETH có giá trị 44, hết 44 thì chuyển sang 83, hết 83 thì chuyển sang 46 lần lượt như ảnh em gửi, nó phức tạp ở chỗ là nhiều dữ liệu quá ngồi làm thủ công thì rối loạn luôn.

1727667075248.png
Bài đã được tự động gộp:

Viết code mẫu cho bạn nghiên cứu. Code chưa hoàn chỉnh vì vấn đề bạn đưa ra chưa hoàn chỉnh
Mã:
Sub SapXepDuLieu()
Dim SortRng As Range, sh As Worksheet
Set sh = Sheets("PFL_PRINT")
Set SortRng = sh.Range("E9", sh.Range("E9").End(4))
With sh.Sort
   .SortFields.Clear
   .SetRange SortRng.Resize(, 25)
   .SortFields.Add SortRng.Offset(, 0)
   .SortFields.Add SortRng.Offset(, 24)
   .SortFields.Add SortRng.Offset(, 18)
   .SortFields.Add SortRng.Offset(, 2)
   .SortFields.Add SortRng.Offset(, 15)
   .Header = xlYes
   .Apply
   .SortFields.Clear
End With
End Sub
Sub Tach_Sheet()
Application.ScreenUpdating = False
Dim sArr(), i As Long, sMachine(), j As Long, k As Long, dArr(), n As Long
With Sheets("PFL_PRINT")
   sArr = .Range("E10", .Range("E9").End(4)).Resize(, 25).Value
End With
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(sArr)
      If Not .Exists(sArr(i, 1)) Then .Add sArr(i, 1), ""
   Next
   sMachine = .keys
End With
For n = 0 To UBound(sMachine)
    ReDim dArr(1 To UBound(sArr), 1 To UBound(sArr, 2))
    k = 0
    For i = 1 To UBound(sArr)
        If sArr(i, 1) = sMachine(n) Then
            k = k + 1
            For j = 1 To UBound(sArr, 2)
                dArr(k, j) = sArr(i, j)
            Next
        End If
    Next
    With Sheets.Add
        .Name = sMachine(n)
        .Range("E10").Resize(k, UBound(dArr, 2)) = dArr
    End With
Next
Application.ScreenUpdating = True
End Sub
dạ em cám ơn em đã chạy thử code này rồi, nó gần đúng ạ, em xin lỗi vì không mô tả rõ, code của bác còn thiếu phần sắp xếp cho crd tăng dần điều mà em đã mô tả thiếu xót, em đã viết thêm mô tả ở bài #8, bác xem giúp em
 
Upvote 0
Dạ em sẽ mổ tả kết quả mong muốn và tô màu để bác dễ nhận biết hơn
các cột dữ liệu có cùng giá trị MACHINE NAME, TEETH, INK COLOR được sắp xếp lên cùng nhau sao cho cột FINAL D có ngày được sắp xếp tăng dần và INK COLOR nếu có các màu khác thì ưu tiên màu BLACK trước
ví dụ kết quả như sau khi bấm nút "sap xep" sẽ sắp xếp MACHINE có 7 dòng giá trị là PFR 01, TEETH là 44 và INK COLOR là BLACK được sắp xếp cùng nhau sao cho cột FINAL D có ngày tăng dần cho đến khi hết TEETH có giá trị là 44 thì chuyển sang TEETH có giá trị 44, hết 44 thì chuyển sang 83, hết 83 thì chuyển sang 46 lần lượt như ảnh em gửi, nó phức tạp ở chỗ là nhiều dữ liệu quá ngồi làm thủ công thì rối loạn luôn.

View attachment 304351
Bài đã được tự động gộp:


dạ em cám ơn em đã chạy thử code này rồi, nó gần đúng ạ, em xin lỗi vì không mô tả rõ, code của bác còn thiếu phần sắp xếp cho crd tăng dần điều mà em đã mô tả thiếu xót, em đã viết thêm mô tả ở bài #8, bác xem giúp em
Nếu như không tính CRD thì code đúng ý chưa?
 
Upvote 0
Tách sheet bác code giúp em xoá sheet đã tồn tại trước sau đó tách sau, số cột cần lấy là từ A đến AF lấy cả cột tiêu đề dòng số 9 cho các sheet đã tách
Bài đã được tự động gộp:

Thử luôn code tách sheet chưa?
Tách sheet bác code giúp em xoá sheet đã tồn tại trước sau đó tách sau, số cột cần lấy là từ A đến AF lấy cả cột tiêu đề dòng số 9 cho các sheet đã tách
 
Upvote 0
Code sort 5 tiêu chí (tiêu chí động) gọn nhẹ thế này. Nếu thêm cột CRD thì phải sửa 1 chút code nhưng phải đánh số cho F8 (số mấy tôi không biết nên không làm)
Mã:
Sub SortbyColumnNum()
Dim lastRw As Long, SortArr(1 To 5)
With Worksheets("PFL_PRINT")
    For i = 1 To 5
        Set SortArr(i) = .[E8:AC8].Find(i).Offset(1, 0)
    Next
    lastRw = .[E50000].End(xlUp).Row
    .Range("E9:AC" & lastRw).Sort _
    Key1:=SortArr(1), Order1:=xlAscending, _
    Key2:=SortArr(2), Order2:=xlAscending, _
    Key3:=SortArr(3), Order3:=xlAscending, _
    Key1:=SortArr(4), Order1:=xlAscending, _
    Key2:=SortArr(5), Order2:=xlAscending
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Code sort 5 tiêu chí (tiêu chí động) gọn nhẹ thế này. Nếu thêm cột CRD thì phải sửa 1 chút code nhưng phải đánh số cho F8 (số mấy tôi không biết nên không làm)
Mã:
Sub SortbyColumnNum()
Dim lastRw As Long, SortArr(1 To 5)
With Worksheets("PFL_PRINT")
    For i = 1 To 5
        Set SortArr(i) = .[E8:AC8].Find(i).Offset(1, 0)
    Next
    lastRw = .[E50000].End(xlUp).Row
    .Range("E9:AC" & lastRw).Sort _
    Key1:=SortArr(1), Order1:=xlAscending, _
    Key2:=SortArr(2), Order2:=xlAscending, _
    Key3:=SortArr(3), Order3:=xlAscending, _
    Key1:=SortArr(4), Order1:=xlAscending, _
    Key2:=SortArr(5), Order2:=xlAscending
End With
End Sub
bác có thể xem em mô tả chi tiết ở bài 8 để code được không, em chạy code này rồi nhưng nó không hiển thỉ đúng, nó không đơn giản là đánh số ưu tiên cho F8 nếu đánh số thì sau chức năng sort của excel có thể giải quyết được, nhưng hi vọng bác nhìn lại giúp em bài số 8, ở đây là gom lại và sắp xếp cả cái cụm đó theo FINAL D tăng dần
 
Lần chỉnh sửa cuối:
Upvote 0
bác có thể xem em mô tả chi tiết ở bài 8 để code được không,
Không. Tôi làm theo bài 1, và làm theo ưu tiên sắp xếp đã đánh số ở dòng 8. Bạn mô tả thế nào thì tôi làm thế ấy rồi.
Bài 8 mô tả sai: Hết 44 thì tới 46, tới 48, tới 56 chứ tại sao nhảy vọt lên 83 rồi về lại 46? Vậy các con số dòng 8 có ý nghĩa quái gì nữa!
 
Upvote 0
Nếu như chưa tính cột FINAL D thì như vậy là đúng rồi ạ. giờ thêm điều kiện cột FINAL thì nó sẽ hiển thị giống như những gì em mô tả.
Thử lại đoạn code này nhé. Mình có ghi chú cho từng dòng code. Không cần chỗ nào thì xóa dòng code đấy nhé
Mã:
Sub SapXepDuLieu()
Dim SortRng As Range, sh As Worksheet
Set sh = Sheets("PFL_PRINT")
Set SortRng = sh.Range("E9", sh.Range("E9").End(4))
With sh.Sort
   .SortFields.Clear
   .SetRange SortRng.Resize(, 25)
   .SortFields.Add SortRng.Offset(, 0) 'Cot Machine
   .SortFields.Add SortRng.Offset(, 24) 'Cot Ink Color
   .SortFields.Add SortRng.Offset(, 18) 'Cot Teeth
   .SortFields.Add SortRng.Offset(, 2) 'Cot CRD
   .SortFields.Add SortRng.Offset(, 3) 'Cot Final D
   .SortFields.Add SortRng.Offset(, 15) 'Cot Total Hour
   .Header = xlYes
   .Apply
   .SortFields.Clear
End With
End Sub
 
Upvote 0
Thử lại đoạn code này nhé. Mình có ghi chú cho từng dòng code. Không cần chỗ nào thì xóa dòng code đấy nhé
Mô tả như bài 1 thì khi đánh số lại ở dòng 8 code sẽ sắp xếp theo ưu tiên mới của dòng 8
Mô tả như bài 8 thì dù ưu tiên kiểu gì cũng ra kết quả không giống hình bài 8.
Thế nên code mới này của Hải cũng không đáp ứng.
 
Upvote 0
Không. Tôi làm theo bài 1, và làm theo ưu tiên sắp xếp đã đánh số ở dòng 8. Bạn mô tả thế nào thì tôi làm thế ấy rồi.
Bài 8 mô tả sai: Hết 44 thì tới 46, tới 48, tới 56 chứ tại sao nhảy vọt lên 83 rồi về lại 46? Vậy các con số dòng 8 có ý nghĩa quái gì nữa!
Vâng là thiếu sót của em, em đã chỉnh lại yêu cầu của bài 1 rồi. mong bác xem xét.
Bài đã được tự động gộp:

Thử lại đoạn code này nhé. Mình có ghi chú cho từng dòng code. Không cần chỗ nào thì xóa dòng code đấy nhé
Mã:
Sub SapXepDuLieu()
Dim SortRng As Range, sh As Worksheet
Set sh = Sheets("PFL_PRINT")
Set SortRng = sh.Range("E9", sh.Range("E9").End(4))
With sh.Sort
   .SortFields.Clear
   .SetRange SortRng.Resize(, 25)
   .SortFields.Add SortRng.Offset(, 0) 'Cot Machine
   .SortFields.Add SortRng.Offset(, 24) 'Cot Ink Color
   .SortFields.Add SortRng.Offset(, 18) 'Cot Teeth
   .SortFields.Add SortRng.Offset(, 2) 'Cot CRD
   .SortFields.Add SortRng.Offset(, 3) 'Cot Final D
   .SortFields.Add SortRng.Offset(, 15) 'Cot Total Hour
   .Header = xlYes
   .Apply
   .SortFields.Clear
End With
End Sub
bác xem lại giúp em vì các cột còn lại nằm ngoài vùng nó không di chuyển theo di bấm nút sắp xếp, em mới kiểm tra được cột B, C, D nó không di chuyển được theo.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vâng là thiếu sót của em, em đã chỉnh lại yêu cầu của bài 1 rồi. mong bác xem xét.
Bài đã được tự động gộp:


bác xem lại giúp em vì các cột còn lại nằm ngoài vùng nó không di chuyển theo di bấm nút sắp xếp, em mới kiểm tra được cột B, C, D nó không di chuyển được theo.
Tiếc quá, năng lực của mìn chỉ có bấy nhiêu thôi.
 
Upvote 0
em chào các bác!
em có một file excel có các cột ở dòng số 8 được đánh thứ tự ưu tiên và mong muốn được sắp xếp theo các điều kiện sau nhờ các bác, anh chị giúp đỡ
1) cột E, W, AC các dữ liệu giống nhau thì được sắp xếp cùng nhau theo thứ tự ưu tiên đã đánh đâu ở dòng số 8, cột G sắp xếp tăng dần ví dụ
ví dụ kết quả như sau khi bấm nút "sap xep" sẽ sắp xếp MACHINE có 7 dòng giá trị là PFR 01, TEETH là 44 và INK COLOR là BLACK được sắp xếp cùng nhau sao cho cột FINAL D có ngày tăng dần cho đến khi hết TEETH có giá trị là 44 thì chuyển sang TEETH có giá trị 44, hết 44 thì chuyển sang 83, hết 83 thì chuyển sang 46 lần lượt như ảnh em gửi, nó phức tạp ở chỗ là nhiều dữ liệu quá ngồi làm thủ công thì rối loạn luôn.

2) nếu thứ tự ưu tiên được thay đổi thì khi bấm nút sắp xếp sẽ được thay đổi theo thứ tự ưu tiên mới
3) khi sắp xếp xong tiến hành tách sheet theo cột MACHINE NAME, ví dụ cột MACHINE NAME có 3 tên là PFR09, PFR01 và PFR04 thì tách thành 3 sheets, nghĩa là có bao nhiêu tên thì tách thành bây nhiêu sheet

View attachment 304357
Thử code này xem sao?
Mã:
Sub Sortby5Column()
Dim lastRow As Long, i As Long, rng As Range, SortRng As Range
With Worksheets("PFL_PRINT")
    lastRow = .Range("B9").End(xlDown).Row
    Set rng = .Range("B9:AT" & lastRow) '
    For i = 5 To 1 Step -1
        Set SortRng = .Range("A8:AC8").Find(i).Offset(1, 0)
        rng.Sort Key1:=SortRng, Order1:=xlAscending
    Next
End With
End Sub
 
Upvote 0
Vâng là thiếu sót của em, em đã chỉnh lại yêu cầu của bài 1 rồi. mong bác xem xét.
Bài 1 bạn chỉ thay ảnh bằng ảnh bài 8. Mà bài 8 thì tôi khẳng định từ bài 15 và 17 là vô nghĩa và dùng sort là vô phương.
Bạn chưa giải thích tại sao cột Teeth tăng dần mà 83 nhảy lên trên 46, 48, 56, 72? Các dòng mang số 83 có đặc điểm nhân dạng gì mà ưu tiên? Nếu bạn không nói ra, thì chỉ mình bạn biết, không ai giúp được. Vấn đề mấu chốt mà không nói thì qua 3 ngày, 1 tuần, 1 tháng cũng vậy thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Đọc sơ qua thì thấy cũng vậy, sau 44 vẫn cứ là 46, rồi tới 48, 56, 72. Còn 83 vẫn dưới cùng của PFR01. Còn hình bài 8 với hình bài 1 mới thay thì con 83 là có số hưởng ăn trên ngồi trước.
 
Upvote 0
Thử code này xem sao?
Mã:
Sub Sortby5Column()
Dim lastRow As Long, i As Long, rng As Range, SortRng As Range
With Worksheets("PFL_PRINT")
    lastRow = .Range("B9").End(xlDown).Row
    Set rng = .Range("B9:AT" & lastRow) '
    For i = 5 To 1 Step -1
        Set SortRng = .Range("A8:AC8").Find(i).Offset(1, 0)
        rng.Sort Key1:=SortRng, Order1:=xlAscending
    Next
End With
End Sub
Đôi khi thớt sort theo 4 cột hoặc 6 cột thì phải làm sao? :)
 
Upvote 0
Đôi khi thớt sort theo 4 cột hoặc 6 cột thì phải làm sao? :)
Nếu đã hỏi 4, hoặc 6, thì hỏi luôn từ 0 đến 31 (dữ liệu 31 cột). Thôi thì hỏi gì trả lời nấy cho khỏe, sau đó đổi đề bài vô lý và không thích trả lời tiếp thì rút lui như @Quang_Hải, đổi đề bài vô lý mà muốn vặn thì như lão ct.
Còn có hứng như anh thì cứ làm cho anh em khác học hỏi.
 
Upvote 0
Đôi khi thớt sort theo 4 cột hoặc 6 cột thì phải làm sao? :)
Chỉnh lại một chút bạn hiền:
Mã:
Sub SortbyMultipleColumns()
Dim lastRow As Long, i As Long, rng As Range, SortRng As Range
With Worksheets("PFL_PRINT")
    lastRow = .Range("B9").End(xlDown).Row
    Set rng = Range("B9:AT" & lastRow) '
    For i = 31 To 1 Step -1
        Set SortRng = .Range("A8:AC8").Find(i)
        If Not SortRng Is Nothing Then rng.Sort Key1:=SortRng.Offset(1, 0), Order1:=xlAscending
    Next
End With
End Sub
Đầy đủ thì thêm phần kiểm tra tên sheet và tách. Hahaha ...
 
Upvote 0
Giải pháp
Bài 1 bạn chỉ thay ảnh bằng ảnh bài 8. Mà bài 8 thì tôi khẳng định từ bài 15 và 17 là vô nghĩa và dùng sort là vô phương.
Bạn chưa giải thích tại sao cột Teeth tăng dần mà 83 nhảy lên trên 46, 48, 56, 72? Các dòng mang số 83 có đặc điểm nhân dạng gì mà ưu tiên? Nếu bạn không nói ra, thì chỉ mình bạn biết, không ai giúp được. Vấn đề mấu chốt mà không nói thì qua 3 ngày, 1 tuần, 1 tháng cũng vậy thôi.
Cám ơn bác rất nhiều, phải nói như thế nào nhỉ nó cũng ở em không mô tả được, khi lên đây được nhiều bác nói mới vỡ lẽ, em sẽ chọn tam một giải pháp chống cháy trước.
Bài đã được tự động gộp:

Chỉnh lại một chút bạn hiền:
Mã:
Sub SortbyMultipleColumns()
Dim lastRow As Long, i As Long, rng As Range, SortRng As Range
With Worksheets("PFL_PRINT")
    lastRow = .Range("B9").End(xlDown).Row
    Set rng = Range("B9:AT" & lastRow) '
    For i = 31 To 1 Step -1
        Set SortRng = .Range("A8:AC8").Find(i)
        If Not SortRng Is Nothing Then rng.Sort Key1:=SortRng.Offset(1, 0), Order1:=xlAscending
    Next
End With
End Sub
Đầy đủ thì thêm phần kiểm tra tên sheet và tách. Hahaha ...
đa tạ bác
 
Upvote 0
Nếu đã hỏi 4, hoặc 6, thì hỏi luôn từ 0 đến 31 (dữ liệu 31 cột). Thôi thì hỏi gì trả lời nấy cho khỏe, sau đó đổi đề bài vô lý và không thích trả lời tiếp thì rút lui như @Quang_Hải, đổi đề bài vô lý mà muốn vặn thì như lão ct.
Còn có hứng như anh thì cứ làm cho anh em khác học hỏi.
Thật ra bài này không có khó, em đã giải hết 90% theo yêu cầu của chủ thớt rồi. Em đã ghi chú ở đoạn code cho bạn ấy tự mày mò. Còn muốn viết từ a tới z thì em đành phải lấy phí thôi. Em sống bằng việc viết code mà.
 
Upvote 0
Thật ra bài này không có khó, em đã giải hết 90% theo yêu cầu của chủ thớt rồi. Em đã ghi chú ở đoạn code cho bạn ấy tự mày mò. Còn muốn viết từ a tới z thì em đành phải lấy phí thôi. Em sống bằng việc viết code mà.
Nếu dữ liệu này mà không giải thích được các dòng có con số 83 có nhân thân dòng họ thế nào để được ăn trên ngồi trước thì tôi cho rằng nên làm tay. Ít nhất phải có 1 cột, hoặc 1 dấu hiệu cho việc ưu tiên này. Không code nào đọc được ý nghĩ trong đầu kiểu tôi cứ muốn nó nằm trên, làm sao thì làm.
 
Upvote 0
Nếu dữ liệu này mà không giải thích được các dòng có con số 83 có nhân thân dòng họ thế nào để được ăn trên ngồi trước thì tôi cho rằng nên làm tay. Ít nhất phải có 1 cột, hoặc 1 dấu hiệu cho việc ưu tiên này. Không code nào đọc được ý nghĩ trong đầu kiểu tôi cứ muốn nó nằm trên, làm sao thì làm.
là thế này ạ, cột TEETH tại sao lại đưa 83 lên trước nó sẽ phụ thuộc vào cột FINAL D, em sẽ làm thủ công như sau, nhìn bằng mắt thường nếu thấy cột FINAL D có ngày nhỏ nhất thì hốt cả cái chỗ ngày đó lên theo teeth sắp xếp trước, ở đây sẽ có trường hợp cột TEETH sẽ có nhiều loại mà đều có ngày ở cột FINAL D bằng nhau thì nhìn từ trên xuống dưới gặp cái nào thì hốt cái đó lên trước thôi ạ, chứ không cứ gì là 83, em hiểu ý bác cần phải có cái gì đó để giải thích rõ nên từ góc độ của em sẽ diễn tả bằng văn xuôi như vậy để bác hiểu
 
Upvote 0
là thế này ạ, cột TEETH tại sao lại đưa 83 lên trước nó sẽ phụ thuộc vào cột FINAL D, em sẽ làm thủ công như sau, nhìn bằng mắt thường nếu thấy cột FINAL D có ngày nhỏ nhất thì hốt cả cái chỗ ngày đó lên theo teeth sắp xếp trước, ở đây sẽ có trường hợp cột TEETH sẽ có nhiều loại mà đều có ngày ở cột FINAL D bằng nhau thì nhìn từ trên xuống dưới gặp cái nào thì hốt cái đó lên trước thôi ạ, chứ không cứ gì là 83, em hiểu ý bác cần phải có cái gì đó để giải thích rõ nên từ góc độ của em sẽ diễn tả bằng văn xuôi như vậy để bác hiểu
Mình nghĩ là bạn muốn kết quả thế này, na ná như kết quả của hình thứ 2
1728271930187.png1728271967935.png
 
Upvote 0
Bác có thể gửi lại code không để em chạy thử ạ
Bạn tham khảo thử kết quả test trong file. Mình nghĩ yêu cầu của bạn có thể thực hiện bằng code. Vì đây là code vay mượn nên mình không thể gởi code này lên diễn đàn. Khi tải file về có thể bị Block, bạn phải vào properties rồi chọn unblock
 

File đính kèm

Upvote 0

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

Back
Top Bottom