Xóa dữ liệu theo điều kiện bằng VBA

  • Thread starter nhathuyha
  • Ngày gửi
N

nhathuyha

Guest
30/11/16
16
0
1
33
Hi mọi người !
Mình có bài toán thế này
Ở sheet "dữ liệu" mình có chuỗi số seri cần loại bỏ. Bên sheet "DS loai bo" mình có danh sách.
Làm thế nào để excel tự động dò tìm các số seri cần được loại bỏ trong sheet dữ liệu rồi delete chúng
Các bạn xem file đính kèm sẽ rõ

P/s : Điều kiện bài toán là dữ liệu của các số seri là vô cùng lớn. các bạn không được cố định dữ liệu trong bảng mà phải dùng biến đếm có bao nhiêu dữ liệu.. đại loại như tìm dòng cuối last row ấy

Chân thành cảm ơn mọi người
 

Đính kèm

  • Book1.xlsx
    10.1 KB · Lượt xem: 201
Sửa lần cuối:
Khóa học Quản trị dòng tiền
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Hi mọi người !
Mình có bài toán thế này
Ở sheet "dữ liệu" mình có chuỗi số seri cần loại bỏ. Bên sheet "DS loai bo" mình có danh sách.
Làm thế nào để excel tự động dò tìm các số seri cần được loại bỏ trong sheet dữ liệu rồi delete chúng
Các bạn xem file đính kèm sẽ rõ

P/s : Điều kiện bài toán là dữ liệu của các số seri là vô cùng lớn. các bạn không được cố định dữ liệu trong bảng mà phải dùng biến đếm có bao nhiêu dữ liệu.. đại loại như tìm dòng cuối last row ấy

Chân thành cảm ơn mọi người
Yêu cầu của bạn thì gần như cực khó thực hiện bằng Excel thông thường nhưng bằng VBA thì không khó. Mình đã viết cho bạn đoạn code như sau:
PHP:
Sub DeleteDueList()
    Dim ShData As Worksheet
    Dim ShList As Worksheet
    Dim ix As Long
    Dim il As Long
    Set ShData = ThisWorkbook.Sheets("du lieu")
    Set ShList = ThisWorkbook.Sheets("DS loai bo")
    For ix = ShData.Range("A" & ShData.Rows.Count).End(xlUp).Row To 2 Step -1
        For il = 2 To ShList.Range("A" & ShList.Rows.Count).End(xlUp).Row
            If ShData.Cells(ix, 1).Value = ShList.Cells(il, 1).Value Then ShData.Cells(ix, 1).EntireRow.Delete
        Next il
    Next ix
End Sub
 
  • Like
Reactions: nhathuyha
N

nhathuyha

Guest
30/11/16
16
0
1
33
thanks bạn.. mình sẽ chạy thử
 
N

nhathuyha

Guest
30/11/16
16
0
1
33
Bạn ơi.. cho mình hỏi thêm thế này
Nếu điều kiện bài toán thay đổi.. Bây giờ mình cần xóa những số seri có mã nhỏ hơn FN3689 thì phải làm sao
Ví dụ những số như FN2598... ,FN2556.. ...vv sẽ bị xóa
 
N

nhathuyha

Guest
30/11/16
16
0
1
33
Yêu cầu của bạn thì gần như cực khó thực hiện bằng Excel thông thường nhưng bằng VBA thì không khó. Mình đã viết cho bạn đoạn code như sau:
PHP:
Sub DeleteDueList()
    Dim ShData As Worksheet
    Dim ShList As Worksheet
    Dim ix As Long
    Dim il As Long
    Set ShData = ThisWorkbook.Sheets("du lieu")
    Set ShList = ThisWorkbook.Sheets("DS loai bo")
    For ix = ShData.Range("A" & ShData.Rows.Count).End(xlUp).Row To 2 Step -1
        For il = 2 To ShList.Range("A" & ShList.Rows.Count).End(xlUp).Row
            If ShData.Cells(ix, 1).Value = ShList.Cells(il, 1).Value Then ShData.Cells(ix, 1).EntireRow.Delete
        Next il
    Next ix
End Sub
Bạn ơi.. cho mình hỏi thêm thế này
Nếu điều kiện bài toán thay đổi.. Bây giờ mình cần xóa những số seri có mã nhỏ hơn FN3689 thì phải làm sao
Ví dụ những số như FN2598... ,FN2556.. ...vv sẽ bị xóa
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Bạn ơi.. cho mình hỏi thêm thế này
Nếu điều kiện bài toán thay đổi.. Bây giờ mình cần xóa những số seri có mã nhỏ hơn FN3689 thì phải làm sao
Ví dụ những số như FN2598... ,FN2556.. ...vv sẽ bị xóa
Cái đó code sẽ phức tạp hơn. Bạn có thể tham khảo hàm instr trong VBA nhé
 
  • Like
Reactions: nhathuyha
N

nhathuyha

Guest
30/11/16
16
0
1
33
Cái đó code sẽ phức tạp hơn. Bạn có thể tham khảo hàm instr trong VBA nhé
bạn giúp mình 1 phần được không..mình có viết nhưng không chạy được bạn
Dim iLastRow As Long
Dim i As Long
Dim rSeriNum As Range, GT As Range
Sheets("Du lieu").Select
iLastRow = Sheets("Du lieu").Range("A" & Rows.Count).End(xlUp).Row
Set rSeriNum = Sheets("Du lieu").Range("A1:A" & iLastRow)
For Each GT In rSeriNum
If GT.Value = Mid(GT, 3, 4) < 3000 Then
GT.ClearContents
End If
Next GT
End Sub
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
582
103
43
67
HCM city
Đây là macro xóa những fiếu nhỏ hơn số fiếu đầu tiên trong danh sách cần loại bỏ
Nhưng kết quả đang ghi bên fải lền kề (để bạn kiểm tra lại)
(Macro thích hợp với dữ liệu lớn!)
PHP:
Option Explicit
Sub XoaHoaDonNhoHon()
 Dim FieuXoa As String
 Dim Arr()
 Dim J As Long, W As Long
 
 With Sheets("Du Lieu")
  Arr() = .[B2].CurrentRegion.Value
  ReDim dArr(1 To UBound(Arr()), 1 To UBound(Arr(), 2))
  FieuXoa = Sheets("DS Loai Bo").[a2].Value
  For J = 1 To UBound(Arr())
  If Arr(J, 1) >= FieuXoa Then
  W = W + 1:  dArr(W, 1) = Arr(J, 1)
  dArr(W, 2) = Arr(J, 2): dArr(W, 3) = Arr(J, 3)
  End If
  Next J
  If W Then
  .[e1].Resize(UBound(Arr()), 3).Value = dArr()
  End If
 End With
End Sub
 
  • Like
Reactions: nhathuyha

Xem nhiều

Webketoan Zalo OA