Hỏi về Sum = 0 thì xóa dòng

Liên hệ QC

anhtotbung35

Thành viên hoạt động
Tham gia
16/2/09
Bài viết
149
Được thích
26
Nghề nghiệp
Kế toán
Em có một mảng [D10:G20] tai sheet A.
em muốn thực hiện như thế này:
nếu Sum từ D10:G10 = 0 thì xóa dòng thứ 10
tương tự đến hết dòng thứ 20.
còn ngược lại Sum từ D11:G11 <> 0 thì tất nhiên là không xóa dòng
Nhờ các bạn cho mình đoạn code.
 
Em có một mảng [D10:G20] tai sheet A.
em muốn thực hiện như thế này:
nếu Sum từ D10:G10 = 0 thì xóa dòng thứ 10
tương tự đến hết dòng thứ 20.
còn ngược lại Sum từ D11:G11 <> 0 thì tất nhiên là không xóa dòng
Nhờ các bạn cho mình đoạn code.
Cách đơn giản nhất
- Tạo 1 cột phụ (chẳng hạn là cột H)
- Tại H10, gõ công thức =SUM(D10:G10)
- Kéo fill đến dòng 20
- AutoFilter cột H với điều kiện = 0
- Xóa dòng
Vậy thôi!
Nếu dùng code thì phải For.. Next
Còn tôi thì thích Advanced Filter hơn
 
Upvote 0
Cách đơn giản nhất
- Tạo 1 cột phụ (chẳng hạn là cột H)
- Tại H10, gõ công thức =SUM(D10:G10)
- Kéo fill đến dòng 20
- AutoFilter cột H với điều kiện = 0
- Xóa dòng
Vậy thôi!
Nếu dùng code thì phải For.. Next
Còn tôi thì thích Advanced Filter hơn
Làm cách như bạn thì vẫn được, do trong bảng tính mình có cột Số thứ tự (được viết bằng code), nếu Autofillter thì số thứ tự không theo thứ tự nữa.
 
Upvote 0
Làm cách như bạn thì vẫn được, do trong bảng tính mình có cột Số thứ tự (được viết bằng code), nếu Autofillter thì số thứ tự không theo thứ tự nữa.
Thì đánh lại số thứ tự... Bạn viết code đánh STT thế nào vậy?
 
Upvote 0
Thì đánh lại số thứ tự... Bạn viết code đánh STT thế nào vậy?
Mình muốn cho thực hiện xóa dòng xong, rồi mới thực hiện công thức cho cột STT
Cột STT, dạng như thế này

'So thu tu
Range("THBH!A10:A" & i + 11).FormulaR1C1 = "=MAX(R11C1:R[-1]C1)+1"
Range("THBH!A10:A" & i + 11).Value = Range("THBH!A10:A" & i + 11).Value
 
Lần chỉnh sửa cuối:
Upvote 0
Mình muốn cho thực hiện xóa dòng xong, rồi mới thực hiện công thức cho cột STT
Cột STT, dạng như thế này

'So thu tu
Range("THBH!A10:A" & i + 11).FormulaR1C1 = "=MAX(R11C1:R[-1]C1)+1"
Range("THBH!A10:A" & i + 11).Value = Range("THBH!A10:A" & i + 11).Value
Ẹc... Ẹc... Bạn làm vầy sẽ ngon hơn nè:
Range(Gì gì đó).Value = Evaluate("ROW(R:R)")
Không có for.. next gì đâu nha
Muốn biết chi tiết thế nào, hãy đưa file lên đây!
 
Upvote 0
Em có một mảng [D10:G20] tai sheet A.
em muốn thực hiện như thế này:
nếu Sum từ D10:G10 = 0 thì xóa dòng thứ 10
tương tự đến hết dòng thứ 20.
còn ngược lại Sum từ D11:G11 <> 0 thì tất nhiên là không xóa dòng
Nhờ các bạn cho mình đoạn code.
Cái bài này giống như là xoá dòng không phát sinh trên bản cân đối. Ít thì dùng for i cho khoẻ.
Và nhất là những code xóa dòng thì nên xoá từ dưới lên.
Và sum(...) = 0 nên thay là
Range("D" & iD) = 0 And Range("E" & iD) = 0 And Range("F" & iD) = 0 And Range("G" & iD) = 0
Mình nên dự trù có sd đấu bên nợ và phát nợ lại là số âm, trướng hợp bút toán đỏ.
Bạn tham khảo code sau:
PHP:
Sub XoaDong()
Dim sodongxoa As Long, iD As Long
sodongxoa = 1
Sheet1.Select
For iD = 20 To 10 Step -1
  If Range("D" & iD) = 0 And Range("E" & iD) = 0 And Range("F" & iD) = 0 And Range("G" & iD) = 0 Then
    Rows(iD).Delete Shift:=xlUp
    sodongxoa = sodongxoa + 1
  End If
Next iD
Range("A10:A" & 20 - sodongxoa).Value = Evaluate("ROW(R:R)")
End Sub
Nếu có file thì test dễ hơn.
 
Upvote 0
Thế phiền bạn một chút nha. Trong Sheets "THBH" mình muốn dòng nào không có phát sinh thì xóa bớt và đánh lại số thứ tự.
 

File đính kèm

Upvote 0
Thế phiền bạn một chút nha. Trong Sheets "THBH" mình muốn dòng nào không có phát sinh thì xóa bớt và đánh lại số thứ tự.
Tôi không phải nghề KẾ TOÁN nên không hiểu thuật ngữ "không có phát sinh" nghĩa là thế nào cả ---> Có phải tương ứng với cột Số Lượng = 0 không nhỉ?
 
Upvote 0
Thế phiền bạn một chút nha. Trong Sheets "THBH" mình muốn dòng nào không có phát sinh thì xóa bớt và đánh lại số thứ tự.
Bạn dùng code sau
PHP:
Sub XoaDong()
Dim endR As Long
Dim sodongxoa As Long, iD As Long
sodongxoa = 1
Sheets("THBH").Select
endR = Cells(65000, 5).End(xlUp).Row 'dong cuoi cot  thanh tien E'
For iD = endR To 13 Step -1
If Range("D" & iD) = 0 And Range("E" & iD) = 0 Then
  Rows(iD).Delete Shift:=xlUp
  sodongxoa = sodongxoa + 1
End If
Next iD
Range("A13:A" & endR - sodongxoa).Value = Evaluate("ROW(R:R)")
End Sub
 
Upvote 0
Bạn dùng code sau
PHP:
Sub XoaDong()
Dim endR As Long
Dim sodongxoa As Long, iD As Long
sodongxoa = 1
Sheets("THBH").Select
endR = Cells(65000, 5).End(xlUp).Row 'dong cuoi cot  thanh tien E'
For iD = endR To 13 Step -1
If Range("D" & iD) = 0 And Range("E" & iD) = 0 Then
  Rows(iD).Delete Shift:=xlUp
  sodongxoa = sodongxoa + 1
End If
Next iD
Range("A13:A" & endR - sodongxoa).Value = Evaluate("ROW(R:R)")
End Sub
Hiểu được vấn đề nhờvào code của ThuNghi, vậy tôi sẽ thực thi bằng AutoFilter như sau:
PHP:
Sub Test()
  Dim Tmp As Range
  With Range([A12], [A65536].End(xlUp)).Resize(, 5)
    .Offset(, 3).Resize(, 2).NumberFormat = "General"
    .AutoFilter 4, 0
    .AutoFilter 5, 0
    Set Tmp = Intersect(.Offset(1), .Cells).SpecialCells(12)
    .AutoFilter
    Tmp.Delete 2
    .Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
  End With
End Sub
Không vòng lập, hy vọng tốc độ nhanh hơn
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi không phải nghề KẾ TOÁN nên không hiểu thuật ngữ "không có phát sinh" nghĩa là thế nào cả ---> Có phải tương ứng với cột Số Lượng = 0 không nhỉ?
Không có phát sinh, ý mình là Tổng của một dòng (từ cột số lượng trở về sau)
 
Upvote 0
Ban đầu là Sum = 0 , sau đó không phát sinh , 2 cái này không hoàn toàn giống nhau , theo bài của ThuNghi thì có số âm
Có nghĩa là nếu không có phát sinh thì số liệu ở các cột số lượng, thành tiền bằng 0. Nó giống nhau mà bạn. Ý mình là nếu để hết mã hàng hóa thì dài bảng tính quá. Mục đích của mình là những mã hàng nếu không có số liệu thì xóa dòng đó cho bớt bảng tính.
 
Upvote 0
Có nghĩa là nếu không có phát sinh thì số liệu ở các cột số lượng, thành tiền bằng 0. Nó giống nhau mà bạn. Ý mình là nếu để hết mã hàng hóa thì dài bảng tính quá. Mục đích của mình là những mã hàng nếu không có số liệu thì xóa dòng đó cho bớt bảng tính.
Không giống à nha
- 2 cái cùng = 0 thì SUM chúng = 0 ---> Đương nhiên
- SUM chúng = 0 thì chưa chắc 2 cái cùng = 0
Nói chung nếu bạn cần xóa theo điều kiện cột số lượng = 0 và cột thành tiền = 0 thì bài số 12 tôi dùng AutoFilter đã đạt yêu cầu
 
Upvote 0
Không giống à nha
- 2 cái cùng = 0 thì SUM chúng = 0 ---> Đương nhiên
- SUM chúng = 0 thì chưa chắc 2 cái cùng = 0
Nói chung nếu bạn cần xóa theo điều kiện cột số lượng = 0 và cột thành tiền = 0 thì bài số 12 tôi dùng AutoFilter đã đạt yêu cầu
Như bài 3 mình cũng đã có ý kiến, đó là về cột STT, vậy bạn có thể sửa lại code cho cột STT luôn được không
 
Upvote 0
Như bài 3 mình cũng đã có ý kiến, đó là về cột STT, vậy bạn có thể sửa lại code cho cột STT luôn được không
ode của tôi và ndu đã viết sẵn đánh số TT lại rồi, chỉ việc gán code vào và thực hiện thôi mà. Chưa hiểu ý bạn thêm cái gì.
 
Upvote 0
Web KT

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

Back
Top Bottom