Giúp chỉnh code xóa dữ liệu

Liên hệ QC

tranaidh

Thành viên mới
Tham gia
31/5/08
Bài viết
36
Được thích
0
Em muốn xóa dữ liệu trong vùng A1:AA30 với điều kiện nếu dữ liệu trong vùng A1:AA30 phải trùng với dữ liệu trong vùng AB1:AB50 thì mới xóa, còn các dữ liệu không trùng thì không xóa. Em có code một đoạn nhưng khôg biết sai chổ nào? Em nhờ mọi người giúp với ạ! Em xin cảm ơn.

Mã:
Sub del()
    Dim oxoa As Range
    Dim vungxoa As Range
    Dim dotim As Range
    Set vungxoa = ThisWorkbook.Worksheets("Sheet1").Range("A1:AA30")
    Set dotim = ThisWorkbook.Worksheets("Sheet1").Range("AB1:AB50")
    For Each oxoa In vungxoa
    If dotim.Value = vungxoa.Value Then oxoa.Clear
    Next oxoa
End Sub
 

File đính kèm

  • Book1.xlsm
    21 KB · Đọc: 6
A1:AA30 phải trùng với dữ liệu trong vùng AB1:AB50 thì mới xóa, còn các dữ liệu không trùng thì không xóa.
Tiêu chí trùng là như nào vậy bạn. Cho cái file đính kèm lên chứ ai nhìn thấy mặt mũi vùng xóa nó như nào đâu mà phán bạn
 
Upvote 0
Em muốn xóa dữ liệu trong vùng A1:AA30 với điều kiện nếu dữ liệu trong vùng A1:AA30 phải trùng với dữ liệu trong vùng AB1:AB50 thì mới xóa, còn các dữ liệu không trùng thì không xóa. Em có code một đoạn nhưng khôg biết sai chổ nào? Em nhờ mọi người giúp với ạ! Em xin cảm ơn.

Mã:
Sub del()
    Dim oxoa As Range
    Dim vungxoa As Range
    Dim dotim As Range
    Set vungxoa = ThisWorkbook.Worksheets("Sheet1").Range("A1:AA30")
    Set dotim = ThisWorkbook.Worksheets("Sheet1").Range("AB1:AB50")
    For Each oxoa In vungxoa
    If dotim.Value = vungxoa.Value Then oxoa.Clear
    Next oxoa
End Sub
Tham khảo
Mã:
Sub del_()
    'Dim oxoa As Range
    Dim vungxoa As Range
    Dim dotim As Range
   
    Dim oDotim As Range
    Dim i, j
   
    Set vungxoa = ThisWorkbook.Worksheets("Sheet1").Range("A1:AA30")
    Set dotim = ThisWorkbook.Worksheets("Sheet1").Range("AB1:AB50")
    For i = 1 To vungxoa.Rows.Count
        For j = 1 To vungxoa.Columns.Count
            For Each oDotim In dotim
                If vungxoa(i, j) = oDotim Then
                    vungxoa(i, j) = ""
                    Exit For
                End If
            Next oDotim
        Next j
    Next i
End Sub
 
Upvote 0
Em muốn xóa dữ liệu trong vùng A1:AA30 với điều kiện nếu dữ liệu trong vùng A1:AA30 phải trùng với dữ liệu trong vùng AB1:AB50 thì mới xóa, còn các dữ liệu không trùng thì không xóa. Em có code một đoạn nhưng khôg biết sai chổ nào? Em nhờ mọi người giúp với ạ! Em xin cảm ơn.
...
Sai chỗ này:
For Each oxoa In vungxoa
If dotim.Value = vungxoa.Value Then oxoa.Clear
Next oxoa

Hai cái dotim và vungxoa đâu có liên quan gì đến cái vòng lặp oxoa.
Vả lại, hai cái ranges dotim và vungxoa đâu có bằng nhau, làm sao so sánh được.

Như vầy mới đúng:
Dim odo
For Each oxoa In vungxoa
For Each odo In dotim
If oxoa.Value = odo.Value Then
oxoa.Clear
Exit For
End If
Next odo
Next oxoa


Nhưng mà như vậy hơi kém hiệu quả. Dùng hàm Find hoặc Match để dò tốt hơn.
For Each oxoa In vungxoa
If Not IsError(Application.Match(oxoa.Value, dotim, 0)) Then oxoa.Clear
Next oxoa

Nếu vùng dotim đã sắp xếp (sorted) thì đổi 0 thành 1 càng thêm hiệu quả.
 
Upvote 0
Tham khảo
Mã:
Sub del_()
    'Dim oxoa As Range
    Dim vungxoa As Range
    Dim dotim As Range
  
    Dim oDotim As Range
    Dim i, j
  
    Set vungxoa = ThisWorkbook.Worksheets("Sheet1").Range("A1:AA30")
    Set dotim = ThisWorkbook.Worksheets("Sheet1").Range("AB1:AB50")
    For i = 1 To vungxoa.Rows.Count
        For j = 1 To vungxoa.Columns.Count
            For Each oDotim In dotim
                If vungxoa(i, j) = oDotim Then
                    vungxoa(i, j) = ""
                    Exit For
                End If
            Next oDotim
        Next j
    Next i
End Sub
Đúng cái mình cần. Cảm ơn bạn nhiều ạ.
Bài đã được tự động gộp:

Sai chỗ này:
For Each oxoa In vungxoa
If dotim.Value = vungxoa.Value Then oxoa.Clear
Next oxoa

Hai cái dotim và vungxoa đâu có liên quan gì đến cái vòng lặp oxoa.
Vả lại, hai cái ranges dotim và vungxoa đâu có bằng nhau, làm sao so sánh được.

Như vầy mới đúng:
Dim odo
For Each oxoa In vungxoa
For Each odo In dotim
If oxoa.Value = odo.Value Then
oxoa.Clear
Exit For
End If
Next odo
Next oxoa


Nhưng mà như vậy hơi kém hiệu quả. Dùng hàm Find hoặc Match để dò tốt hơn.
For Each oxoa In vungxoa
If Not IsError(Application.Match(oxoa.Value, dotim, 0)) Then oxoa.Clear
Next oxoa

Nếu vùng dotim đã sắp xếp (sorted) thì đổi 0 thành 1 càng thêm hiệu quả.

Sai chỗ này:
For Each oxoa In vungxoa
If dotim.Value = vungxoa.Value Then oxoa.Clear
Next oxoa

Hai cái dotim và vungxoa đâu có liên quan gì đến cái vòng lặp oxoa.
Vả lại, hai cái ranges dotim và vungxoa đâu có bằng nhau, làm sao so sánh được.

Như vầy mới đúng:
Dim odo
For Each oxoa In vungxoa
For Each odo In dotim
If oxoa.Value = odo.Value Then
oxoa.Clear
Exit For
End If
Next odo
Next oxoa


Nhưng mà như vậy hơi kém hiệu quả. Dùng hàm Find hoặc Match để dò tốt hơn.
For Each oxoa In vungxoa
If Not IsError(Application.Match(oxoa.Value, dotim, 0)) Then oxoa.Clear
Next oxoa

Nếu vùng dotim đã sắp xếp (sorted) thì đổi 0 thành 1 càng thêm hiệu quả.
Cảm ơn bạn đã chỉ ra điểm sai và cho mình đoạn code rất hiệu quả. Chúc bạn năm mới sức khỏe!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom