Mình có 01 bảng gồm x dòng và y cột.
Yêu cầu viết macro thỏa đk : Nếu cell nào chứa giá trị # 0 và #1 thì xóa toàn bộ dòng của cell đó.
(Sao bài gởi của mình bị xóa mất rồi Admin? )
Thì làm vầy đây:Mình có 01 bảng gồm x dòng và y cột.
Yêu cầu viết macro thỏa đk : Nếu cell nào chứa giá trị # 0 và #1 thì xóa toàn bộ dòng của cell đó.
(Sao bài gởi của mình bị xóa mất rồi Admin? )
Sub ClearText()
With Range("A2").CurrentRegion
.SpecialCells(2, 2).EntireRow.ClearContents
End With
End Sub
Mình có 01 bảng gồm x dòng và y cột.
Yêu cầu viết macro thỏa đk : Nếu cell nào chứa giá trị # 0 và #1 thì xóa toàn bộ dòng của cell đó.
(Sao bài gởi của mình bị xóa mất rồi Admin? )
Sub XoaDuLieu()
Dim MyRange As Range
Dim MyRows, MyColumns As Integer
Dim Check As Integer
Set MyRange = ActiveCell.CurrentRegion
MyRows = MyRange.Rows.Count
MyColumns = MyRange.Columns.Count
For i = 2 To MyRows + 1
Check = 0
For j = 1 To MyColumns
If Cells(i, j) = 0 Or Cells(i, j) = 1 Then
Check = Check + 1
End If
Next j
If Check < MyColumns Then
Range(Cells(i, 1), Cells(i, MyColumns)).ClearContents
End If
Next i
End Sub
Sub XoaDuLieu()
Dim MyRange As Range
Dim MyRows, MyColumns As Integer
Dim Check As Integer
Set MyRange = ActiveCell.CurrentRegion
MyRows = MyRange.Rows.Count
MyColumns = MyRange.Columns.Count
. . . .
Xin phép Salomon, cho mình gọt bớt đi vài hàng:salomon2211 đã viết:Thử code dưới đây nhé, chép vào VBA sheet 1:
PHP:Sub XoaDuLieu() Dim MyRange As Range Dim MyRows, MyColumns As Integer Dim Check As Integer Set MyRange = ActiveCell.CurrentRegion MyRows = MyRange.Rows.Count MyColumns = MyRange.Columns.Count For i = 2 To MyRows + 1 Check = 0 For j = 1 To MyColumns If Cells(i, j) = 0 Or Cells(i, j) = 1 Then Check = Check + 1 End If Next j If Check < MyColumns Then Range(Cells(i, 1), Cells(i, MyColumns)).ClearContents End If Next i End Sub
Sub XoaDuLieu()
Dim MyRange As Range
Dim MyRows, MyColumns As Integer
Set MyRange = ActiveSheet.UsedRange
MyRows = MyRange.Rows.Count
MyColumns = MyRange.Columns.Count
For i = 2 To MyRows + 1
For j = 1 To MyColumns
If Cells(i, j).Value <> 0 And Cells(i, j).Value <> 1 _
Then Range(Cells(i, 1), Cells(i, MyColumns)).ClearContents: Exit For
Next j
Next i
Set MyRange = Nothing
End Sub
Sub Xoadong()
Dim Rng As Range, i As Long
Set Rng = ActiveSheet.UsedRange
For i = 1 To Rng.Rows.Count
With WorksheetFunction
If .CountIf(Rng.Rows(i), 1) + .CountIf(Rng.Rows(i), 0) <> Rng.Columns.Count Then _
Rng.Rows(i).ClearContents
End With
Next
Set Rng = Nothing
End Sub
Sub ClearText()
Dim i As Long
With Range("A1").CurrentRegion
For i = 1 To .Columns.Count
.AutoFilter i, "<>0", 1, "<>1"
.Offset(1).SpecialCells(12).ClearContents
.AutoFilter
Next i
End With
End Sub
Nếu vậy thì dùng luôn tính năng AutoFilter có sẵn của EX chọn và xóa luôn còn nhanh hơn nữa!Thông thường dử liệu nhập trong bảng tính sẽ có số dòng nhiều hơn cột rất nhiều! Vậy tại sao ta không dùng AutoFilter mà làm việc này nhỉ ---> Yêu cầu duy nhất là thêm 1 dòng tiêu đề ở trên (mà tôi nghĩ dử liệu thật nào cũng phải có tiêu đề chứ nhỉ)
Vậy khi xây dựng code, ta chỉ cần 1 vòng lập quét qua các cột ---> Đương nhiêu sẽ nhanh gấp nhiều lần so với quét theo dòng!
Các bạn thử xem ---> Dử liệu cở 10.000 dòng trở lên sẽ thấy hiệu quảPHP:Sub ClearText() Dim i As Long With Range("A1").CurrentRegion For i = 1 To .Columns.Count .AutoFilter i, "<>0", 1, "<>1" .Offset(1).SpecialCells(12).ClearContents .AutoFilter Next i End With End Sub
Đương nhiên là được, nhưng nếu dử liệu có khoảng vài chục cột, bạn phải thao tác vài chục lần ---> Dù sao vẫn mệt hơn là.. tự động ---> Còn với dử liệu <10 cột, tôi chẳng cần code nào, cứ AutoFilter như tôi đã nói ở trênNếu vậy thì dùng luôn tính năng AutoFilter có sẵn của EX chọn và xóa luôn còn nhanh hơn nữa!