Bạn xem file đính kèm nhé, thân !Em có một bảng excel cần xắp xếp thứ tự (file đính kèm) Em muốn sắp MA đúng theo thứ tự của MA2 và các trường khác cũng phải thay đổi theo thứ tự sắp xếp đó. Các bác xem rùi giúp em với nha. thanks!!
Option Explicit
Sub Sort_()
Dim Rng As Range, sRng As Range
Dim eRw As Long, Jj As Long, lRw As Long
Dim aRow As Integer
Columns("K:O").Select
Selection.Sort Key1:=Range("K2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1
Columns("B:I").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1
lRw = [K65500].End(xlUp).Row: eRw = [b65500].End(xlUp).Row
Set Rng = Range("K1:K" & lRw): Application.ScreenUpdating = False
For Jj = 2 To lRw * 2
With Cells(Jj, "B")
If .Value <> "" And .Value <> .Offset(, 9).Value Then
Set sRng = Rng.Find(.Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
.Offset().Interior.ColorIndex = 3
Else
If sRng.Offset(, -9) <> sRng.Value Then
eRw = 1 + eRw
Cells(eRw, "B").Resize(, 8).Value = sRng.Offset(, -9).Resize(, 8).Value
sRng.Offset(, -9).Resize(, 8).Value = .Offset().Resize(, 8).Value
.Offset().Resize(, 8).Value = ""
End If
End If
End If
End With
Next Jj
End Sub
Yêu cầu trong bài là vầy mà:Em thấy bài của anh SA_DQ cũng hay nhưng khi xắp xếp thì có những hàng lại nhảy linh tinh ở rất xa. anh có thể khắc phục được không?
Còn bài của anh DOSNET thì em không hiểu lắm, anh có thể giải thích cho em không?
Bạn thay mảco sau nha & kiểm sau khi chạy dùm mình với dữ liệu của bạn.Em thấy kết quả chạy thì đúng, nhưng khi chạy chương trình thì có mốt ố dòng chạy xuống tận dưới và lại còn em vẫn phải tìm kiếm và insert thêm thì mới đúng thứ tự.
Option Explicit
Sub Sort_()
Dim Rng As Range, sRng As Range, cRng As Range
Dim eRw As Long, Jj As Long, lRw As Long
Dim aRow As Integer
Columns("N:R").Select
Selection.Sort Key1:=Range("N2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1
Columns("B:L").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1
lRw = [N65500].End(xlUp).Row: eRw = [b65500].End(xlUp).Row
Set Rng = Range("N1:N" & lRw + 200): Application.ScreenUpdating = False
For Jj = 2 To lRw * 3
With Cells(Jj, "B")
If .Value <> "" And .Value <> .Offset(, 12).Value Then
Set sRng = Rng.Find(.Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
.Offset().Interior.ColorIndex = 3
' * * * * * * * * * *'
Set cRng = Range(.Offset(, 12), .Offset(, 12).End(xlDown)).Resize(, 12)
If cRng.Rows.Count < 3 * lRw Then
cRng.Cut
cRng.Offset(1).Select
ActiveSheet.Paste
End If
' * * * * * * * * * *'
Else
If sRng.Offset(, -12) <> sRng.Value Then
' * * * * * * * * * *'
Set cRng = Range(Cells(Jj, "B"), Cells(Jj, "B").End(xlDown)).Resize(, 12)
cRng.Cut
sRng.Offset(, -12).Select
ActiveSheet.Paste
' * * * * * * * * * *'
End If
End If
End If
End With
Next Jj
End Sub
Macro hiện tại chỉ đúng khi Ma tại cột 'B' & Ma2 tại cột 'N'Khi em thay cột MA thêm một cột nữa thì chạy không đúng.
1 Đây là file mà em muốn thêm các cột vào, bác xem rồi giúp em với nha!
2 À anh có thể viết macro mà nếu thêm bao nhiêu cột ở bất cứ vị trí nào cũng được, được không? thanks!
Anh ơi, em thấy nếu mà dữ liệu của em là mới hoàn toàn, tức là em xóa hết dữ liệu cũ đi và thêm dữ liệu mới vào thì Macro có chạy được đúng nữa không? và nếu vùng của mã MA mà ít hơn MA2 hoặc ngược lại thì kết quả của Macro còn đúng không?
lRw = [N65500].End(xlUp).Row: eRw = [b65500].End(xlUp).Row
Set Rng = Range("N1:N" & lRw + 200): Application.ScreenUpdating = False
For Jj = 2 To lRw * 3