Code dò tìm và xóa dữ liệu ở sheet khác

Liên hệ QC

hahunghang

Thành viên mới
Tham gia
19/9/19
Bài viết
2
Được thích
0
hiện tại em đag có file quản lí như đính kèm. rơi vào khoảng 50k dòng. e có 2 sheet làm việc và 1 sheet data cố định. các bác đã có kinh nghiệm VBA làm ơn giúp e 1 cái code khi mà em nhập id ở sheet hà nội nếu id đó đã có ở sheet hải phòng thì xóa dữ liệu ở sheet hải phòng và ngược lại. em xin cảm ơn và hậu tạ ạ
 

File đính kèm

  • Book2.xlsx
    10.9 KB · Đọc: 14
Gửi bạn xem thử: code ở mỗi sheet dùng sự kiện change:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B6500")) Is Nothing And Target.Count = 1 Then
    Dim i As Long
    Dim lrHP As Long
   lrHP = Sheet3.Range("B65000").End(xlUp).Row
    For i = 2 To lrHP
        If Target.Value = Sheet3.Cells(i, 2).Value Then
            If MsgBox("Ma So Da Trung Ben Sheet Hai Phong, Ban Muon Xoa Khong", vbYesNo) = vbYes Then
                Sheet3.Cells(i, 2).EntireRow.Delete
            End If
        End If
    Next i
End If
End Sub
 

File đính kèm

  • Book2.xlsm
    20 KB · Đọc: 18
Upvote 0
dạ e cảm ơn anh đã giúp đỡ ạ. anh cho e hỏi với ạ. sao em nối thêm code thêm cho sheet nữa lại không dc anh nhỉ em đã thay đổi tên sheet trong code rồi mà k dc ạ
.
 
Upvote 0
@Tác giả bài #2:
Công việc tìm và xoá in hệt nhau, chỉ khác sheet. Như vậy code phải nằm chung một chỗ.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Row > 1 Then
xoa = XoaDongTrung(Target, Sheet("Hải phòng")) ' đây là sheet "Hà nội", nếu bên sheet "Hải phòng" thì ngược lại
End If
End Sub

Module chung:
Public Function XoaDongTrung(ByVal duLieu As Range, ByVal Sh As Worksheet) As Boolean
' dò tìm duLieu trong sheet Sh và xoá dòng tìm được
' nếu xoá thì trả về True
' nếu không tìm thấy hoặc không xoá thì trả về False
End Function
 
Upvote 0
@Tác giả bài #2:
Công việc tìm và xoá in hệt nhau, chỉ khác sheet. Như vậy code phải nằm chung một chỗ.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Row > 1 Then
xoa = XoaDongTrung(Target, Sheet("Hải phòng")) ' đây là sheet "Hà nội", nếu bên sheet "Hải phòng" thì ngược lại
End If
End Sub

Module chung:
Public Function XoaDongTrung(ByVal duLieu As Range, ByVal Sh As Worksheet) As Boolean
' dò tìm duLieu trong sheet Sh và xoá dòng tìm được
' nếu xoá thì trả về True
' nếu không tìm thấy hoặc không xoá thì trả về False
End Function
MÌnh mới học VBA nên trình độ chỉ viết đc nhiêu đó, có gì nhờ a Vetmini chỉ giáo thêm :D
 
Upvote 0
@ Thanhphuongvip, post: 936851, member: 277501
Với dữ liệu 50K dòng thì nên xài phương thức FIND() thay vì duyệt dữ liệu từ đầu chí cuối
Cụ thể sẽ là như thế này:
Macro cha tại Sheet2 ("Hà Nội")
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B6500")) Is Nothing And Target.Count = 1 Then
    GPE Target.Value, Sheet3
End If
End Sub
. . . . . .

Macro con:
PHP:
Sub GPE(IDex As String, Sh As Worksheet)
Dim Rng As Range, sRng As Range
Dim Rws As Long:

Rws = Sh.[b2].CurrentRegion.Rows.Count
Set Rng = Sh.[b2].Resize(Rws)
Set sRng = Rng.Find(IDex, , xlFormulas, xlWhole)
If sRng Is Nothing Then
    MsgBox "Nothing", , "GPE.COM Xin Thông Báo"
Else
    If MsgBox("Ma Sô Có Trùng Bên " & Sh.Name & Chr(10) & "Ban Muôn Xoá Không?", vbYesNo) = vbYes Then
        Rws = sRng.Row:                                         sRng.EntireRow.Delete:                             
        MsgBox "Xóa Xong Dòng " & Rws
    End If
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
@ Thanhphuongvip, post: 936851, member: 277501
Với dữ liệu 50K dòng thì nên xài phương thức FIND() thay vì duyệt dữ liệu từ đầu chí cuối
...
Dữ liệu "50K dòng" hay 5 dòng gì đều có khả năng có nhiều dòng trùng. Bắt buộc phải dùng vòng lặp hoặc cái gì đó để tìm và xoá tất cả.

Nhiều dòng trùng: đây là trường hợp điển hình mà thớt chỉ mới "có ý tưởng" chứ chưa hề thực hiện cho nên chưa thấu đáo hết những rắc rối.
Yêu cầu chỉ buộc khi gõ mã số ở sheetA thì tìm và xoá trên sheetB chứ đâu có tìm và xoá trên sheetA? Vì vậy chuyện nhiều dòng trùng rất có thể xảy ra.
 
Upvote 0
À, mình đang câu View mà, khì, khì,. . . .
Nếu tác giả bài đăng muốn xóa nhiều dòng trùng thì xài thêm FINDNEXT() & lưu những dòng tìm thấy vô tham biến & sau đó xóa 1 lần sạch sẽ thôi.
Chúc mọi người tuần làm việc hiệu quả!
 
Lần chỉnh sửa cuối:
Upvote 0
À, mình đang câu View mà, khì, khì,. . . .
Nếu tác giả bài đăng muốn xóa nhiều dòng trùng thì xài thêm FINDNEXT() & lưu những dòng tìm thấy vô tham biến & sau đó xóa 1 lần sạch sẽ thôi.
Chúc mọi người tuần làm việc hiệu quả!
Ở trên, tôi đề nghị code Xoá Dòng nằm trong một Function; trả về dữ liệu cho biết có xoá hay không (Boolean).
Nếu cần bao trường hợp xoá nhiều lần thì Function nên trả về một Integer cho biết có bao nhiêu dòng được xoá.
 
Upvote 0
Web KT
Back
Top Bottom