Mình muốn xoá dòng theo điều kiện

Liên hệ QC
Tham gia
30/7/06
Bài viết
410
Được thích
377
Nghề nghiệp
GTVT
Option Explicit

Sub DeleteRow()
Dim Ws As Worksheet
Dim i As Integer
Set Ws = ActiveSheet
If .Cells(i, 17) = 0 Then
i = i + 1
Ws.ListObjects("Transactions").ListRows(i).Delete
End Sub
Không biết sai chỗ nào mà không chạy được
Nhờ các anh chị giúp
 
Option Explicit

Sub DeleteRow()
Dim Ws As Worksheet
Dim i As Integer
Set Ws = ActiveSheet
If .Cells(i, 17) = 0 Then
i = i + 1
Ws.ListObjects("Transactions").ListRows(i).Delete
End Sub
Không biết sai chỗ nào mà không chạy được
Nhờ các anh chị giúp
i mới khởi tạo mặc định = 0 nên lệnh

If .Cells(i, 17) = 0 Then

sẽ bị lỗi.
 
Upvote 0
Option Explicit

Sub DeleteRow()
Dim Ws As Worksheet
Dim i As Integer
Set Ws = ActiveSheet
If .Cells(i, 17) = 0 Then
i = i + 1
Ws.ListObjects("Transactions").ListRows(i).Delete
End Sub
Không biết sai chỗ nào mà không chạy được
Nhờ các anh chị giúp
For i =? To ?
If .cells(i,17) =0 then
Rows(i).delete
End if
Next i
 
Upvote 0
Option Explicit

Sub DeleteRow()
Dim Ws As Worksheet
Dim i As Integer
Set Ws = ActiveSheet
If .Cells(i, 17) = 0 Then
i = i + 1
Ws.ListObjects("Transactions").ListRows(i).Delete
End Sub
Không biết sai chỗ nào mà không chạy được
Nhờ các anh chị giúp
Không hiểu tại sao dòng này If .Cells(i, 17) = 0 Then sai tè le vậy mà không thấy thớt nói báo lỗi gì cả. "không chạy được" khác với lỗi á nghe.
 
Upvote 0
For i =? To ?
If .cells(i,17) =0 then
Rows(i).delete
End if
Next i
Code này đi ngược với luật lập trình rồi.
Đúng luật xóa thì phải xóa từ dưới lên trên.

Không hiểu tại sao dòng này If .Cells(i, 17) = 0 Then sai tè le vậy mà không thấy thớt nói báo lỗi gì cả. "không chạy được" khác với lỗi á nghe.
Code ở bài #1 thớt lụm ở đâu đó, chỉnh lại mà không biết mình cần phải chỉnh gì.
 
Upvote 0
Code này đi ngược với luật lập trình rồi.
Đúng luật xóa thì phải xóa từ dưới lên trên.


Code ở bài #1 thớt lụm ở đâu đó, chỉnh lại mà không biết mình cần phải chỉnh gì.
Bác đâu biết ở 2 cái dấu hỏi đó tôi điền gì vào đâu mà bảo ngược?!
 
Upvote 0
mình đã dùng cách này nó nhay từng hàng quá chậm
Sub Xoahang()
Dim Dc As Long, i As Long
With ActiveSheet
Dc = Sheet1.Cells(.Rows.Count, "Q").End(xlUp).Row
End With
For i = Dc To 5 Step -1
If Cells(i, 17).Value = 0 Then
Cells(i, 17).Select
ActiveCell.EntireRow.Delete
End If
Next i
End Sub
 
Upvote 0
mình đã dùng cách này nó nhay từng hàng quá chậm
Sub Xoahang()
Dim Dc As Long, i As Long
With ActiveSheet
Dc = Sheet1.Cells(.Rows.Count, "Q").End(xlUp).Row
End With
For i = Dc To 5 Step -1
If Cells(i, 17).Value = 0 Then
Cells(i, 17).Select
ActiveCell.EntireRow.Delete
End If
Next i
End Sub
Bạn muốn nhanh thì tạo 1 cái file giả lập rồi đưa lên có lẽ thớt này đã kết thúc ở 2 bài rồi.
 
Upvote 0
Nhờ các bác xem giúp có file đính kèm
 

File đính kèm

  • bao-cao-phien-hoc_2023-05-28_11-47-13 CNN.rar
    9.1 MB · Đọc: 9
Upvote 0
Nhờ các bác xem giúp có file đính kèm
Bạn thử code sau và rút kinh nghiệm từ rày muốn nhanh được hỗ trợ thì nên đính kèm file (giả lập).
Mã:
Option Explicit
Sub Delete_Row17_0()
    Dim ws As Worksheet, Lr&, Rng As Range, cell As Range
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Set ws = ThisWorkbook.Worksheets("Result")
    Lr = ws.Cells(ws.Rows.Count, 17).End(xlUp).Row
    For Each cell In ws.Range("Q5:Q" & Lr)
        If cell.Value = 0 Then
            If Rng Is Nothing Then
                Set Rng = cell.EntireRow
            Else
                Set Rng = Union(Rng, cell.EntireRow)
            End If
        End If
    Next cell
    If Not Rng Is Nothing Then
        Rng.Delete
    End If
    MsgBox "Done"
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
End Sub
 
Upvote 0
Nhờ các bác xem giúp có file đính kèm
Số dòng dữ liệu (DL) của bạn gần 9 vạn & số dòng cần xóa là chủ yếu (?)
Vậy nên xài mảng:
Bước 1: Cho hết DL vô mảng;
Bước 2: Khai báo thêm 1 mảng (để chứa DL không xóa)
Bước 3: Duyệt mảng,dòng nào không cần xóa thì cho vô mảng kết quả
. . . .
 
Upvote 0
Số dòng dữ liệu (DL) của bạn gần 9 vạn & số dòng cần xóa là chủ yếu (?)
Vậy nên xài mảng:
Bước 1: Cho hết DL vô mảng;
Bước 2: Khai báo thêm 1 mảng (để chứa DL không xóa)
Bước 3: Duyệt mảng,dòng nào không cần xóa thì cho vô mảng kết quả
. . . .
Em thử làm. . . .
 

File đính kèm

  • bao-cao-phien-hoc_2023-05-28_11-47-13 CNN.rar
    8.8 MB · Đọc: 14
Upvote 0
Cám ơn bạn nhiều xoá mãng thực sự rất nhanh, mình đang học nên mãng mình còn quá kém mình có xem video học xoá cột, hàng mình thấy dòng lệnh lạ .ListObjects("Transactions").ListRows(i).Delete lâu mình chưa thấy trên diễn đàn. lâu nay mình dùng filter để xoá cũng sất lâu
Lần nữa mình chân thành cảm ơn các bạn đã giúp mình bài toán trên
 
Upvote 0
Xóa chứ có phải tính toán real-time đâu mà cần phân biệt chậm nhanh.
Trên nguyên tắc, xóa sửa là chuyện bút sa gà chết. Code kiếc nào miễn mình có tin tưởng là nó tạo kết quả đúng là tốt. Càng đơn giản càng dễ tin tưởng.

Lỡ nó có chạy 1/2 tiếng đồng hồ vẫn nhanh hơn dùng code lạ, đi hỏi mất cả ngày.
 
Upvote 0
. . . . . xoá mãng thực sự rất nhanh, mình đang học nên mãng mình còn quá kém mình có xem video học xoá cột, hàng . . . . . .
Nếu bạn chưa thành thục về mảng thì có phương cách này để thử nè:

B01: Xác định dòng cuối chứa DL (dữ liệu) & ấn vô tham biến (như Rws)
B02: Xếp DL theo cột chứa tiêu chí cần xóa (cụ thể là cột 'Q' của bạn)
(Nếu cột này giá trị 0 (cần xóa dòng) là nhỏ nhất thì xắp xếp từ lớn đến bé;)
B03: Tìm trị '0' trong cột 'Q' (cột chuẩn); Ví dụ kết quả nó ở dòng 99
Bước cuối: Ấn trị rỗng cho vùng [A99:Q & Rws]

Bạn tiến hành thử ngay đi & sẽ thích ngay í mà!

& chúc bạn thành công & vui!
 
Upvote 0
Nếu bạn chưa thành thục về mảng thì có phương cách này để thử nè:

B01: Xác định dòng cuối chứa DL (dữ liệu) & ấn vô tham biến (như Rws)
B02: Xếp DL theo cột chứa tiêu chí cần xóa (cụ thể là cột 'Q' của bạn)
(Nếu cột này giá trị 0 (cần xóa dòng) là nhỏ nhất thì xắp xếp từ lớn đến bé;)
B03: Tìm trị '0' trong cột 'Q' (cột chuẩn); Ví dụ kết quả nó ở dòng 99
Bước cuối: Ấn trị rỗng cho vùng [A99:Q & Rws]

Bạn tiến hành thử ngay đi & sẽ thích ngay í mà!

& chúc bạn thành công & vui!
Theo đề cương các bước của bạn mình là như sau:
Sub Xoahang()

Dim Dc As Long
Application.ScreenUpdating = False
With Sheet1
Dc = .Range("B" & Rows.Count).End(3).Row
.AutoFilter.Sort.SortFields.Add2 Key:= _
Range("Q5:Q" & Dc), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
.Range("A4:Q" & Dc).AutoFilter Field:=17, Criteria1:="0"
.Range("A4:Q" & Dc).Delete Shift:=xlUp
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom