[HELP] Xin code VBA xóa các dòng theo điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

triều kim

Thành viên mới
Tham gia
21/2/18
Bài viết
5
Được thích
0
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật
Em có 1 file excel. với khoảng 500000 dòng. em cần xóa 1 tất cả các dòng trong vùng với điều kiện là trong vùng đó xuất hiện từ khóa "TEST RESULT = FAIL;"
Cụ thể là e cần xóa vùng xác định là từ dòng chứ KEY xuống dưới 6 dòng và lên trên 94 dòng.
Mong được sự giúp đỡ của mọi người ạ.
em xin cảm ơn!
 

File đính kèm

Em có 1 file excel. với khoảng 500000 dòng. em cần xóa 1 tất cả các dòng trong vùng với điều kiện là trong vùng đó xuất hiện từ khóa "TEST RESULT = FAIL;"
Cụ thể là e cần xóa vùng xác định là từ dòng chứ KEY xuống dưới 6 dòng và lên trên 94 dòng.
Mong được sự giúp đỡ của mọi người ạ.
em xin cảm ơn!
xóa từ start tới end có chứa từ khóa?
 
Upvote 0
Copy sheet Z1 thành sheet Z2 (giữ lại dữ liệu gốc để so sánh), chạy thử Sub này cho sheet Z2:
PHP:
Public Sub GPE_NewYear()
Dim sArr(), I As Long, J As Long, R As Long, Txt As String, Str As String
Txt = "TESTRESULT=FAIL"
With Sheets("Z2")
    sArr = .Range("A1:A" & .Range("A60000").End(xlUp).Row + 1).Resize(, 5).Value
    R = UBound(sArr)
    For I = 1 To R Step 120
        Str = Space(0)
        For J = 2 To 5
            Str = Str & sArr(I + 111, J)
        Next J
        If Str = Txt Then
            .Rows(I & ":" & I + 119).EntireRow.Hidden = True
        End If
    Next I
End With
End Sub
Nếu kết quả "giống giống" ý bạn thì tính tiếp, chứ hiện giờ chưa hiểu rõ lắm ý bạn.
 
Upvote 0
.Rows(I & ":" & I + 119).EntireRow.Hidden = True
End If
Next I
End With
End Sub
[/PHP]
Nếu kết quả "giống giống" ý bạn thì tính tiếp, chứ hiện giờ chưa hiểu rõ lắm ý bạn.[/QUOTE]
Đúng ý em rồi anh. nhưng code a viết nó chỉ mới hidden vùng dữ liệu đó. e muốn xóa hẳn luôn cơ ạ. a sửa giúp em với.
Cảm ơn a
 
Upvote 0
Bài này dùng FileSystemObject để đọc *.log rồi dùng RegEx để loại chuỗi (pattern = "START"{1 lần}..."FAIL"{1 lần}... "END"{1 lần}), sau đó ghi lại (chính nó hoặc file mới)... mỗi tội không nghĩ ra được cái pattern. :(
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng ý em rồi anh. nhưng code a viết nó chỉ mới hidden vùng dữ liệu đó. e muốn xóa hẳn luôn cơ ạ. a sửa giúp em với.
Hide được thì Delete được.
PHP:
Public Sub GPE_NewYear()
Dim sArr(), I As Long, J As Long, R As Long, Txt As String, Str As String
Txt = "TESTRESULT=FAIL"
With Sheets("Z2")
    sArr = .Range("A1:A" & .Range("A60000").End(xlUp).Row + 1).Resize(, 5).Value
    R = UBound(sArr)
    For I = R To 1 Step -120
        Str = Space(0)
        For J = 2 To 5
            Str = Str & sArr(I - 8, J)
        Next J
        If Str = Txt Then
            .Rows(I - 119 & ":" & I).EntireRow.Delete
        End If
    Next I
End With
End Sub
 
Upvote 0
Hide được thì Delete được.
PHP:
Public Sub GPE_NewYear()
Dim sArr(), I As Long, J As Long, R As Long, Txt As String, Str As String
Txt = "TESTRESULT=FAIL"
With Sheets("Z2")
    sArr = .Range("A1:A" & .Range("A60000").End(xlUp).Row + 1).Resize(, 5).Value
    R = UBound(sArr)
    For I = R To 1 Step -120
        Str = Space(0)
        For J = 2 To 5
            Str = Str & sArr(I - 8, J)
        Next J
        If Str = Txt Then
            .Rows(I - 119 & ":" & I).EntireRow.Delete
        End If
    Next I
End With
End Sub

Không hẳn vậy đâu bạn ơi. Delete nó sẽ xảy ra chuyện xếp lại dòng. Sẽ có khả năng là đợt trước delete mất dữ liệu của đợt sau.

Ví dụ dòng i thoả điều kiện, bạn delete đến dòng i-119. Nếu dòng i-100 cũng thoả điều kiện thì đáng lẽ delete đến dòng i-219, nhưng vì i-100 bị mất rồi cho nên khoảng sau không được tính.

Bài của thớt làm đúng được có lẽ là vì thớt không nói ra điều kiện "một khoảng 120 dòng chỉ có tối đa một dòng thoả điều kiện, và các khoảng riêng biệt, không cắt nhau"

Nếu khong có điều kiện trên thì bạn bắt buộc phải xét từng dòng, đánh dấu những dòng có thể delete. Và sau đó vòng lại delete những dòng đánh dấu.
 
Upvote 0
Không hẳn vậy đâu bạn ơi. Delete nó sẽ xảy ra chuyện xếp lại dòng. Sẽ có khả năng là đợt trước delete mất dữ liệu của đợt sau.

Ví dụ dòng i thoả điều kiện, bạn delete đến dòng i-119. Nếu dòng i-100 cũng thoả điều kiện thì đáng lẽ delete đến dòng i-219, nhưng vì i-100 bị mất rồi cho nên khoảng sau không được tính.

Bài của thớt làm đúng được có lẽ là vì thớt không nói ra điều kiện "một khoảng 120 dòng chỉ có tối đa một dòng thoả điều kiện, và các khoảng riêng biệt, không cắt nhau"

Nếu khong có điều kiện trên thì bạn bắt buộc phải xét từng dòng, đánh dấu những dòng có thể delete. Và sau đó vòng lại delete những dòng đánh dấu.
đúng là trong 120 dòng chỉ 1 dòng chứa điều kiện thôi a.
 
Upvote 0
Web KT

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

Back
Top Bottom