Xóa dòng theo điều kiện

Liên hệ QC

huutrungsj

Thành viên mới
Tham gia
14/10/19
Bài viết
6
Được thích
0
Chào các bạn,

Mình đang có 1 worksheet cũng khá lớn, trên 800K dòng. Mình đang cần code VBA để có thể xóa những dòng thỏa những điều kiện như sau của cột KW No:
- Cột KW No thường có 3 định dạng 1/định dạng thứ nhất có 9 ký tự; 2/ định dạng thứ 2 có 11 ký tự
1. Ứng với định dạng 9 ký tự:
- Xóa tất cả những dòng mà có ký tự thứ 10 khác ký tự "R"
- Xóa tất cả những dòng mà có ký tự thứ 10 là ký tự "R" nhưng với điều kiện là nó đã có 1 dòng có giá trị gốc chỉ với 9 ký tự khi chưa thêm ký tự "R"
Ví dụ:
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
--> Giữ nguyên, không xóa dòng nào mặc dù có ký tự "R"
AC1000192
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
--> Xóa tất cả những dòng có 10 ký tự và có chứa ký tự "R" ở ký tự thứ 10 vì đã có dòng chưa dữa liệu gốc không có ký tự "R"

2. Ứng với định dạng 11 ký tự: Cũng tương tự như định dạng 9 ký tự
- Xóa tất cả những dòng mà có ký tự thứ 12 khác ký tự "R"
- Xóa tất cả những dòng mà có ký tự thứ 12 là ký tự "R" nhưng với điều kiện là nó đã có 1 dòng có giá trị gốc chỉ với 11 ký tự khi chưa thêm ký tự "R"

Mình sẽ gửi file rút gọn để các bạn dễ tham khảo. Mong sớm nhận được sự giúp đỡ nhiệt tình của các bạn vì mình rất đang cần giải quyết gấp bài toán này. Chân thành càm ơn các bạn
 

File đính kèm

  • hoi giup do.xlsx
    387.4 KB · Đọc: 5
Chào các bạn,

Mình đang có 1 worksheet cũng khá lớn, trên 800K dòng. Mình đang cần code VBA để có thể xóa những dòng thỏa những điều kiện như sau của cột KW No:
- Cột KW No thường có 3 định dạng 1/định dạng thứ nhất có 9 ký tự; 2/ định dạng thứ 2 có 11 ký tự
1. Ứng với định dạng 9 ký tự:
- Xóa tất cả những dòng mà có ký tự thứ 10 khác ký tự "R"
- Xóa tất cả những dòng mà có ký tự thứ 10 là ký tự "R" nhưng với điều kiện là nó đã có 1 dòng có giá trị gốc chỉ với 9 ký tự khi chưa thêm ký tự "R"
Ví dụ:
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
AC2502129R
2017​
2019​
ACURAILXLAMPS
--> Giữ nguyên, không xóa dòng nào mặc dù có ký tự "R"


AC1000192
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
AC1000192R
2017​
2019​
ACURAMDXBUMPERS (PLASTIC)
--> Xóa tất cả những dòng có 10 ký tự và có chứa ký tự "R" ở ký tự thứ 10 vì đã có dòng chưa dữa liệu gốc không có ký tự "R"



2. Ứng với định dạng 11 ký tự: Cũng tương tự như định dạng 9 ký tự
- Xóa tất cả những dòng mà có ký tự thứ 12 khác ký tự "R"
- Xóa tất cả những dòng mà có ký tự thứ 12 là ký tự "R" nhưng với điều kiện là nó đã có 1 dòng có giá trị gốc chỉ với 11 ký tự khi chưa thêm ký tự "R"

Mình sẽ gửi file rút gọn để các bạn dễ tham khảo. Mong sớm nhận được sự giúp đỡ nhiệt tình của các bạn vì mình rất đang cần giải quyết gấp bài toán này. Chân thành càm ơn các bạn
1 cách cho trường hợp " Xóa tất cả những dòng mà có ký tự thứ 10 khác ký tự "R" "
PHP:
Sub Test()
    Application.ScreenUpdating = False
    Dim a(), b(), i, j, k, LR
    With Sheet1
        a = .Range("A1", .Range("A65000").End(3)).Resize(, 8).Value
        LR = UBound(a)
    End With
    ReDim b(1 To LR, 1 To 8)
    With Sheet1
        For i = 1 To LR
            If Len(a(i, 1)) = 10 And Right(a(i, 1), 1) <> "R" Then
                k = k + 1
                For j = 1 To 8
                    b(k, j) = a(i, j)
                Next j
            End If
        Next i
        If k Then
            With Sheet1
                .Range("A1").Resize(, 8).Copy .Range("K1")
                .Range("K2").Resize(k, 8) = b
            End With
        End If
    End With
End Sub
 
Upvote 0
1 cách cho trường hợp " Xóa tất cả những dòng mà có ký tự thứ 10 khác ký tự "R" "
PHP:
Sub Test()
    Application.ScreenUpdating = False
    Dim a(), b(), i, j, k, LR
    With Sheet1
        a = .Range("A1", .Range("A65000").End(3)).Resize(, 8).Value
        LR = UBound(a)
    End With
    ReDim b(1 To LR, 1 To 8)
    With Sheet1
        For i = 1 To LR
            If Len(a(i, 1)) = 10 And Right(a(i, 1), 1) <> "R" Then
                k = k + 1
                For j = 1 To 8
                    b(k, j) = a(i, j)
                Next j
            End If
        Next i
        If k Then
            With Sheet1
                .Range("A1").Resize(, 8).Copy .Range("K1")
                .Range("K2").Resize(k, 8) = b
            End With
        End If
    End With
End Sub
Cám ơn bạn rất nhiều. Để mình thử xem sao. mà code này là VBA hay là PHP vậy bạn?
Bài đã được tự động gộp:

Cám ơn bạn rất nhiều. Để mình thử xem sao. mà code này là VBA hay là PHP vậy bạn?
Mà sao mình không chạy được vậy bạn. Nó không chạy gì hết. Cám ơn bạn
 
Upvote 0
Cám ơn bạn rất nhiều. Để mình thử xem sao. mà code này là VBA hay là PHP vậy bạn?
Bài đã được tự động gộp:


Mà sao mình không chạy được vậy bạn. Nó không chạy gì hết. Cám ơn bạn
Bạn đã làm thế nào? Bạn xem File, bấm vào nút Start
 

File đính kèm

  • delete rows.rar
    498.8 KB · Đọc: 9
Upvote 0
Cám ơn bạn. Tuy nhiên hình như kết quả lại trả ra ngược.
1. Thay vì những dòng nào của cột KS Num có ký tự thứ 10 khác R thì mới xóa, còn tool thì xóa những dòng của cột KS Num, có ký tự thứ 10 là R.
2. Một điểm khác nữa là nếu dòng nào của cột KS Num chỉ có 9 ký tự thì vẫn giữ nguyên.
3. dòng nào mà cột KS Num có ký tự thứ 10 là R nhưng nó lại không có dòng nào có cùng KS Num chỉ với 9 ký tự thì không xóa, ngược lại thì vẫn xóa những dòng có ký tự thứ 10 là R.
Mình có note trong hình. Có gì bạn tham khảo qua. Tuy nhiên cám ơn bạn rất nhiều đã rất nhiệt tình giúp mình

1571154496194.png
 
Upvote 0
Trong bài #1, có chỗ nào bạn viết là "trùng..." đâu nhỉ?
Mình chưa hiểu ý của bạn là gì? Mình có note lại là phần kết quả trả ra chưa đúng lắm với yêu cầu của đề bài. Mình có chụp hình gửi trong phần tin nhắn trước. Dù sao cũng cám ơn bạn nhiều
 
Upvote 0
Chào các bạn,

Mình đang có 1 worksheet cũng khá lớn, trên 800K dòng. Mình đang cần code VBA để có thể xóa những dòng thỏa những điều kiện như sau của cột KW No:
Cột KW No thường có 9 ký tự
- Không xóa những dòng chỉ có 9 ký tự
- Xóa tất cả những dòng mà có ký tự thứ 10 khác ký tự "R"
- Xóa tất cả những dòng mà có ký tự thứ 10 là ký tự "R" nhưng với điều kiện là nó đã có 1 dòng có giá trị gốc chỉ với 9 ký tự khi chưa thêm ký tự "R"
Ví dụ:
AC2502129R20172019ACURAILXLAMPS
AC2502129R20172019ACURAILXLAMPS
AC2502129R20172019ACURAILXLAMPS
AC2502129R20172019ACURAILXLAMPS
--> Giữ nguyên, không xóa dòng nào mặc dù có ký tự "R" vì không có dòng nào của cột KW Num có dữ liệu là AC2502129
AC100019220172019ACURAMDXBUMPERS (PLASTIC)
AC1000192R20172019ACURAMDXBUMPERS (PLASTIC)
AC1000192R20172019ACURAMDXBUMPERS (PLASTIC)
AC1000192R20172019ACURAMDXBUMPERS (PLASTIC)
AC1000192R20172019ACURAMDXBUMPERS (PLASTIC)
--> Xóa tất cả những dòng có 10 ký tự và có chứa ký tự "R" ở ký tự thứ 10 vì đã có dòng chưa dữa liệu gốc không có ký tự "R" cụ thể là AC1000192
 

File đính kèm

  • hoi giup do.xlsx
    387.4 KB · Đọc: 6
Upvote 0
Web KT
Back
Top Bottom