Sắp xếp bảng theo điều kiện, rồi trỏ chuột nhảy về vị trí ngày có sự thay đổi

Liên hệ QC

hoangtuaotrang_hp_vn

Thành viên tích cực
Tham gia
17/5/09
Bài viết
808
Được thích
680
Chào anh/chị

Anh/chị giúp em code với yêu cầu như sau với:
Sắp xếp lại bảng tính (vùng A5:AM&dòng cuối) theo thứ tự tăng dần của cột D khi cột D có sự thay đổi
Sau khi sắp xếp xong thì trỏ chuột nhảy về ô có sự thay đổi ở vị trí mới nhất

Ví dụ:
Trước khi thay đổi:
1700232910862.png
Sau khi thay đổi giá trị cột C => Ngày ở cột D thay đổi => Sắp xếp lại bảng tính (theo thứ tự tăng dần của cột D),
sau đó trỏ chuột tự động nhảy về ô D9 (chọn vào ngày đã thay đổi)
1700232954991.png

Xin chân thành cảm ơn anh/chị
 

File đính kèm

  • Sau sắp xếp thì trỏ chuột về dòng có thay đổi ở vị trí mới.xlsm
    47.3 KB · Đọc: 7
Chào anh/chị

Anh/chị giúp em code với yêu cầu như sau với:
Sắp xếp lại bảng tính (vùng A5:AM&dòng cuối) theo thứ tự tăng dần của cột D khi cột D có sự thay đổi
Sau khi sắp xếp xong thì trỏ chuột nhảy về ô có sự thay đổi ở vị trí mới nhất

Ví dụ:
Trước khi thay đổi:
View attachment 296823
Sau khi thay đổi giá trị cột C => Ngày ở cột D thay đổi => Sắp xếp lại bảng tính (theo thứ tự tăng dần của cột D),
sau đó trỏ chuột tự động nhảy về ô D9 (chọn vào ngày đã thay đổi)
View attachment 296824

Xin chân thành cảm ơn anh/chị
Bài này khó đây. Sau khi sort rồi so sánh từng phần tử trong Array với cái Array ban đầu để tìm sự khác biệt mà nhảy về. Một loạt lặp liên hoàn.
Cố gắng lên nhé.
 
Upvote 0
Trong sự kiện thay đổi ngày ở cột D:
- đặt thêm 1 cột phụ, đánh dấu "X" vào đấy.
- sort như yêu cầu.
- ở cột phụ, tìm dòng đã đánh dấu X.
- xóa cột phụ.
- đặt con trỏ vào đúng dòng.

Nếu không ngại xáo trộn mã hảng thì không cần cột phụ:
- cộng thêm "|x|" vài đầu mã hàng ấy
- sort như yêu cầu.
- ở mã hàng, dùng Appliaction.Match("|x|*", ...) để tìm ra dòng ấy
- xóa "|x|" ở mã hàng.
- đặt con trỏ vào đúng dòng.

Code:

With Cells(Target.Row, "E")
.Value2 = "|x|" & .Value2
End With
' code sort ở đây...
Cells(Application.Match("|x|*", Range("E:E"), 0), Target.Column).Select
(nếu trong quá trình sort ảnh hưởng đến Target thì nên ghi Row+Column của nó vào biến để dùng)
 
Upvote 0
Chào anh/chị

Anh/chị giúp em code với yêu cầu như sau với:
Sắp xếp lại bảng tính (vùng A5:AM&dòng cuối) theo thứ tự tăng dần của cột D khi cột D có sự thay đổi
Sau khi sắp xếp xong thì trỏ chuột nhảy về ô có sự thay đổi ở vị trí mới nhất

Ví dụ:
Trước khi thay đổi:
View attachment 296823
Sau khi thay đổi giá trị cột C => Ngày ở cột D thay đổi => Sắp xếp lại bảng tính (theo thứ tự tăng dần của cột D),
sau đó trỏ chuột tự động nhảy về ô D9 (chọn vào ngày đã thay đổi)
View attachment 296824

Xin chân thành cảm ơn anh/chị
Sao lưu kỹ trước khi sử dụng nhé.
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim RgTemp As Range, CellTemp As Range
    Dim lr&
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    lr = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    On Error GoTo LOI
    If Not Intersect(Target, Range("D:D")) Is Nothing Then
        Target.Offset(, -1).Value = Target.Offset(, -1).Value & "|x|"
        '        Range("A5:AM" & lr).Select
        Range("D5:D" & lr).Sort Key1:=Range("D5"), Order1:=xlAscending, Header:=xlYes
    End If
    Set RgTemp = Range("D5:D" & lr).Offset(, -1)
    Set CellTemp = RgTemp.Find("|x|")
    CellTemp.Value = Replace(CellTemp.Value, "|x|", "")
    CellTemp.Select
TIEP:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Exit Sub
LOI:
    MsgBox ("Hinh nhu co hanh dong la gì day?")
    GoTo TIEP
End Sub
 
Upvote 0
Web KT
Back
Top Bottom