Xóa dòng theo điều kiện (1 người xem)

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

khaothibaclieu

Thành viên hoạt động
Tham gia
10/4/08
Bài viết
113
Được thích
14
Mình đã tham khảo các bài viết về xóa dòng theo điều kiện nhưng làm hoài không được. Mong các bạn chỉ giáo.
Mình muốn xóa dòng trống nếu như ô tại dòng B không có dữ liệu.
Dùng macro, code như sau:

For i = 9 To (65000, 1) Step -1
If Cells(i, 2) = "" Then EntireRow.Delete
End If
Next

Mong các bạn giúp đỡ.
 
Mình đã tham khảo các bài viết về xóa dòng theo điều kiện nhưng làm hoài không được. Mong các bạn chỉ giáo.
Mình muốn xóa dòng trống nếu như ô tại dòng B không có dữ liệu.
Dùng macro, code như sau:

For i = 9 To (65000, 1) Step -1
If Cells(i, 2) = "" Then EntireRow.Delete
End If
Next

Mong các bạn giúp đỡ.
sao lại là For i = 9 To (65000, 1)
Không hiểu???
Lý ra phải là For i = 9 To 65000 chứ nhỉ
Nhưng dù là thế thì cũng ... sai
Phải là
Mã:
  For i = [COLOR=Red][B]65000 To 9[/B][/COLOR] Step -1
    If Cells(i, 2) = "" Then Cells(i, 2).EntireRow.Delete
  Next
Vẩn có 1 cách khác nhanh hơn, đó là AutoFilter cột B với tùy chọn Blanks rồi xóa cái rẹt 1 nhát luôn
 
Upvote 0
Er = [A65536].End(xlUp).Row
Range("B2:B" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Đoạn code trên nên viết thêm như nào các anh nhỉ?
 
Upvote 0
Er = [A65536].End(xlUp).Row
Range("B2:B" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Đoạn code trên nên viết thêm như nào các anh nhỉ?
Viết thêm chử Sub TenSub() vào đầu
Viết thêm Chử End Sub ở cuối
Ví dụ:
PHP:
Sub Test()
  Er = [A65536].End(xlUp).Row
  Range("B2:B" & Er).SpecialCells(4).EntireRow.Delete
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân tiện chủ đề này em xin được hỏi link bài các phương thức của specialcell
-----------
ý em là: em thấy có các số ở sau specialcell (như 4, 12...) và em xin đc hỏi là có bao nhiêu con số, và ý nghĩa của nó là như nào ạ

Cám ơn anh.
 
Upvote 0
Nhân tiện chủ đề này em xin được hỏi link bài các phương thức của specialcell
-----------
ý em là: em thấy có các số ở sau specialcell (như 4, 12...) và em xin đc hỏi là có bao nhiêu con số, và ý nghĩa của nó là như nào ạ

Cám ơn anh.

Để có thể hiểu rõ hơn thì bạn tự ghi lấy một macro :
Vào Tool\Macro\Record New Macro
Bấm Ctrl+G, chọn Special
Chọn Constants hay formulas với các tham số đi kèm như Numbers, text...,
Xong bấm Alt+F11 để xem ý nghĩa của các tham số..
 
Upvote 0
SpecialCells(Type, Value): Là lệnh dùng để gọi chức năng lọc của Excel. Bạn có thể thấy chúng nếu bạn nhấn F5/Special... Type: là các kiểu, ở đây có các kiểu như sau:
xlCellTypeComments . Cells containing notes |1 xlCellTypeConstants . Cells containing constants |2 xlCellTypeFormulas . Cells containing formulas |3 xlCellTypeBlanks . Empty cells |4 xlCellTypeLastCell . The last cell in the used range |11 xlCellTypeVisible . All visible cells |12
Value: là các dạng được áp dụng cho Constants, Formulas. Nếu bạn muốn lấy những cặp (hoặc nhiều hơn) nào thì cộng hai số đó lại. Ví dụ mình chọn NumberText thì giá trị Value sẽ là 3. Nếu lấy hết thì Value là 23.
xlNumbers |1 xlTextValues |2 xlLogical |4 xlErrors |16
Còn những cái khác tùy vào tình huống. Bạn có thể tự Record lấy để xem các tên biến. Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình lọc dữ liệu từ 1 sheet và chuyển sang sheet khác. Mình dùng code như sau:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5" Then
[C8:L31].ClearContents
k = 8
For i = 9 To Sheet3.[N9].End(xlDown).Row
If Sheet3.Cells(i, 14) = [D5].Value Then
Range("B" & k & ":H" & k) = Sheet3.Range("C" & i & ":I" & i).Value
k = k + 1
End If
Next
End If
End Sub

Và khi lọc xong tôi muốn xóa dòng nào mà cột B không chứa dữ liệu (xóa từ dòng thứ 8 của bảng tính) nhưng không làm được. Tôi nghĩ không cần phải gửi phải đính kèm vì vấn đề này không khó phải không các bạn. Trình độ VBA của tôi ở dạng học lóm nên bí đến đâu hỏi đến đó thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Code này nằm trong ViewCode của Sheet
Mã:
[COLOR=#000000][FONT=Courier New][COLOR=#007700]Private [/COLOR][COLOR=#0000bb]Sub Worksheet_Change[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]ByVal Target [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Range[/COLOR][/FONT][FONT=Courier New][COLOR=#007700])[/COLOR][/FONT] [FONT=Courier New][COLOR=#007700]If [/COLOR][COLOR=#0000bb]Target[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Address [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"$D$5" [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Then[/COLOR][/FONT] [FONT=Courier New][COLOR=#007700][[/COLOR][COLOR=#0000bb]C8[/COLOR][COLOR=#007700]:[/COLOR][COLOR=#0000bb]L31[/COLOR][COLOR=#007700]].[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]ClearContents[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000bb]k [/COLOR][COLOR=#007700]= [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]8[/COLOR][/FONT] [FONT=Courier New][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]9 To Sheet3[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000bb]N9[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]xlDown[/COLOR][COLOR=#007700]).[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Row[/COLOR][/FONT] [FONT=Courier New][COLOR=#007700]If [/COLOR][COLOR=#0000bb]Sheet3[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]14[/COLOR][COLOR=#007700]) = [[/COLOR][COLOR=#0000bb]D5[/COLOR][COLOR=#007700]].[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Value Then[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000bb]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"B" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000bb]k [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#dd0000]":H" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000bb]k[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000bb]Sheet3[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"C" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#dd0000]":I" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]).[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Value[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000bb]k [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]k [/COLOR][COLOR=#007700]+ [/COLOR][/FONT][COLOR=#0000bb][FONT=Courier New]1[/FONT][/COLOR] [FONT=Courier New][COLOR=#0000bb]End [/COLOR][/FONT][COLOR=#007700][FONT=Courier New]If[/FONT][/COLOR] [COLOR=#0000bb][FONT=Courier New]Next[/FONT][/COLOR][/COLOR] [COLOR=#000000][COLOR=#0000bb][FONT=Courier New][COLOR=red]call xoadongrong[/COLOR][/FONT] [FONT=Courier New]End [/FONT][/COLOR][FONT=Courier New][COLOR=#007700]If[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000bb]End Sub[/COLOR][/FONT][/COLOR]
Code này nằm trong Module (bấm phải chuột vào ThisWorkbook -> Insert -> Module)
PHP:
Sub xoadongrong() For i = [B6000].End(xlUp).Row To 1 Step -1 If Cells(i, 2).Value = "" Then     Rows(i).Delete Shift:=xlUp End If Next End Sub
Hoặc đơn giản nhất chỉ dùng 1 dòng này thôi!
PHP:
Sub xoadongrong() Columns("B:B").SpecialCells(4).Delete Shift:=xlUp End Sub
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như có vấn đề gì đó. VBA làm không đúng. Xin lỗi vì mình quên chuyện này. Chỉ xóa dòng rỗng từ hàng thứ 8 của bảng tính thôi. Mong các bạn hỗ trợ.
Mình thử code như thế này nhưng trớt quớt:

Sub xoadongrong()
Columns("$B$8:B").SpecialCells(4).EntireRow.Delete
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như có vấn đề gì đó. VBA báo lỗi ở call Xoadongrong !
Bạn muốn hỏi code Xoadongrong trên hay dưới.
PHP:
Sub xoadongrong()
For i = [B6000].End(xlUp).Row To 1 Step -1
If Cells(i, 2).Value = "" Then
    Rows(i).Delete Shift:=xlUp
End If
Next
End Sub
Code trên thì OK.
Code dưới phải sửa lại.
PHP:
Sub xoadongrong()
Columns("B:B").SpecialCells(4).Delete Shift:=xlUp
End Sub

Như sau

PHP:
Sub xoadongrong()
Columns("B:B").SpecialCells(4).EntireRow.Delete
End Sub
 
Upvote 0
Hàng thứ 8 thì thêm số 8 vào!
Mã:
[COLOR=#000000][COLOR=#0000bb][FONT=Courier New]Sub xoadongrong[/FONT][/COLOR][FONT=Courier New][COLOR=#007700]() For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000bb]B6000[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Row To [COLOR=red]8[/COLOR] Step [/COLOR][COLOR=#007700]-[/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]1 [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#dd0000]"" [/COLOR][/FONT][FONT=Courier New][COLOR=#0000bb]Then     Rows[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Delete Shift[/COLOR][COLOR=#007700]:=[/COLOR][/FONT][COLOR=#0000bb][FONT=Courier New]xlUp End [/FONT][/COLOR][COLOR=#007700][FONT=Courier New]If [/FONT][/COLOR][COLOR=#0000bb][FONT=Courier New]Next End Sub [/FONT][/COLOR][/COLOR]
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không thể gửi file mẫu cho các bạn. Vấn đề của mình là sau khi lọc dữ liệu xong mình muốn xóa dòng trống nếu ô ở cột B không có dữ liệu trong khoảng từ dòng thứ 8 đến dòng thứ 100 như sau:
- Lọc lần thứ 1, mình có danh sách 21 học sinh của trường A
- Lọc lần thứ 2, mình có danh sách 16 học sinh của trường B.
- Lọc lần thứ 3, mình có danh sách 55 học sinh của trường C.
Từ dòng thứ 1 đến dòng thứ 7 là tiêu đề, nên không được xóa các dòng nảy.
Từ dòng thứ 101 đến dòng thứ 105 là chỗ cho ông giám đốc kí nên cũng không được xóa các dòng này.
Định dạng, trang trí phải giữ nguyên, không được thay đổi khi lọc dữ liệu.
Vậy phải làm sao?

Mình đã thử như thế này, không ăn thua:
Sub xoadongrong()
For i = [B100].End(xlUp).Row To 8 Step -1
If Cells(i, 2).Value = "" Then
Rows(i).Delete Shift:=xlUp
End If
Next
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình không thể gửi file mẫu cho các bạn. Vấn đề của mình là sau khi lọc dữ liệu xong mình muốn xóa dòng trống nếu ô ở cột B không có dữ liệu trong khoảng từ dòng thứ 8 đến dòng thứ 100 như sau:
- Lọc lần thứ 1, mình có danh sách 21 học sinh của trường A
- Lọc lần thứ 2, mình có danh sách 16 học sinh của trường B.
- Lọc lần thứ 3, mình có danh sách 55 học sinh của trường C.
Từ dòng thứ 1 đến dòng thứ 7 là tiêu đề, nên không được xóa các dòng nảy.
Từ dòng thứ 101 đến dòng thứ 105 là chỗ cho ông giám đốc kí nên cũng không được xóa các dòng này.
Định dạng, trang trí phải giữ nguyên, không được thay đổi khi lọc dữ liệu.
Vậy phải làm sao?
Có phải bạn chỉ muốn xóa từ row 8 -> 100 nếu Bi=""
Vậy sửa lại 1 chút

Sub xoadongrong()
Range("B8:B100").SpecialCells(4).EntireRow.Delete
End Sub
 
Upvote 0
Có phải bạn chỉ muốn xóa từ row 8 -> 100 nếu Bi=""
Vậy sửa lại 1 chút

Sub xoadongrong()
Range("B8:B100").SpecialCells(4).EntireRow.Delete
End Sub

Cám ơn bạn. Nhưng nếu làm vậy mình chỉ lọc được 1 lần. Sau đó định dạng và các dòng từ 101 mất hết rồi. Vậy bây giờ mình sửa lại một chút như thế này để dấu dòng đi được không:
Sub xoadongrong()
Range("B8:B100").SpecialCells(4).EntireRow.Hide
End Sub
 
Upvote 0
Hình như phải thêm chữ =True
Sub xoadongrong()
Range("B8:B100").SpecialCells(4).EntireRow.Hide=True
End Sub
 
Upvote 0
Làm được rồi. Mừng quá.
Code như sau:
Mã:
Sub daudongrong()
Rows("8:100").Select
    Selection.EntireRow.Hidden = False
Range("B8:B100").SpecialCells(4).EntireRow.Hidden = True
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Làm được rồi. Mừng quá.
Code như sau:
Mã:
Sub daudongrong()
Rows("8:100").Select
    Selection.EntireRow.Hidden = False
Range("B8:B100").SpecialCells(4).EntireRow.Hidden = True
End Sub
Code trên chưa xóa mà chỉ ẩn tù dòng 8 đến 100 khi trong hàng ở cột B không có dữ liệu.
Nếu ẩn thì dùng lệnh trên, Mà còn xóa thì :
PHP:
Rows("8:100").Select
Range("B8:B100").SpecialCells(4).EntireRow.Delete
Vậy khi xóa thì dũ liệu hàng 101 trở đi vẫn còn nguyên những sẽ trơ về hàng "101 - số hàng đã xóa".
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi về vấn đề xóa dòng có công thức nhưng ko có giá trị
trong code của em có chèn 1 vài công thức
vì không biết chính xác có bao nhiêu dòng (số dòng luôn thay đổi theo thời gian) nên e cho luôn 5000 dòng

Mã:
Range("T10:T5000").Select
    Selection.FormulaR1C1 = "=RC[-1]+RC[-2]+RC[-3]+RC[-4]"
    Range("x10:x5000").Select
    Selection.FormulaR1C1 = "=RC[-10]+RC[-9]+RC[-1]+RC[-2]"
    Range("Y10:Y5000").Select
    Selection.FormulaR1C1 = "=round(RC[-1]/0.97-RC[-1],4)"
    Range("z10:z5000").Select
    Selection.FormulaR1C1 = "=round(RC[-1]+RC[-2],2)"

ví dụ ngày hôm nay dữ liệu có 3000 dòng thì các dòng từ 3001 trở đi không có giá trị nên bằng 0, làm sao xóa đi các dòng này
Các dòng có giá trị, có công thức mà bằng 0 thì vẫn để lại. Chỉ xóa các dòng có công thức mà không có giá trị gì hết...?
cho e hỏi chèn thêm code gì để lần nào khi chạy xong thì nó tự động xóa các dòng không có giá trị ?
 
Upvote 0
Cho em hỏi về vấn đề xóa dòng có công thức nhưng ko có giá trị
trong code của em có chèn 1 vài công thức
vì không biết chính xác có bao nhiêu dòng (số dòng luôn thay đổi theo thời gian) nên e cho luôn 5000 dòng

Mã:
Range("T10:T5000").Select
    Selection.FormulaR1C1 = "=RC[-1]+RC[-2]+RC[-3]+RC[-4]"
    Range("x10:x5000").Select
    Selection.FormulaR1C1 = "=RC[-10]+RC[-9]+RC[-1]+RC[-2]"
    Range("Y10:Y5000").Select
    Selection.FormulaR1C1 = "=round(RC[-1]/0.97-RC[-1],4)"
    Range("z10:z5000").Select
    Selection.FormulaR1C1 = "=round(RC[-1]+RC[-2],2)"

ví dụ ngày hôm nay dữ liệu có 3000 dòng thì các dòng từ 3001 trở đi không có giá trị nên bằng 0, làm sao xóa đi các dòng này
Các dòng có giá trị, có công thức mà bằng 0 thì vẫn để lại. Chỉ xóa các dòng có công thức mà không có giá trị gì hết...?
cho e hỏi chèn thêm code gì để lần nào khi chạy xong thì nó tự động xóa các dòng không có giá trị ?
Code mẫu cho bạn 2 cột T và X
Giả sử cột S có dữ liệu thay đổi số dòng hàng ngày
PHP:
With Range([S10], [S65536].End(3))
   .Offset(, 1) = "=RC[-1]+RC[-2]+RC[-3]+RC[-4]"
   .Offset(, 5) = "=RC[-10]+RC[-9]+RC[-1]+RC[-2]"
End With
 
Upvote 0

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

Back
Top Bottom