Bạn xem file đính kèm nhé. Mình chọn vùng chứa dữ liệu để kiểm tra là các cột I:S. Nếu dữ liệu thực sự của bạn có nhiều cột hơn thì sửa vùng này lại cho phù hợp.Rất mong các anh, em trên GPE xem và hướng dẫn giúp cách xóa cột theo điều kiện: không có dữ liệu trong cột, cụ thể trong file đính kèm. Cám ơn
---Bạn xem file đính kèm nhé. Mình chọn vùng chứa dữ liệu để kiểm tra là các cột I:S. Nếu dữ liệu thực sự của bạn có nhiều cột hơn thì sửa vùng này lại cho phù hợp.
Bạn thử thay bằng Sub này xem sao:---
Trong trường hợp các cột P, Q, R, S không có dữ liệu thì Run code không xóa 1 lần được bạn ơi. Bạn kiểm tra và xem giúp dùm nhé. Cám ơn
Sub Xoa_cot()
Dim Cot As Integer
Cot = 9
Do While Cells(4, Cot) <> ""
If Cells(65536, Cot).End(xlUp).Row = 4 Then
Cells(4, Cot).EntireColumn.Delete
Else
Cot = Cot + 1
End If
Loop
End Sub
---Bạn thử thay bằng Sub này xem sao:
PHP:Sub Xoa_cot() Dim Cot As Integer Cot = 9 Do While Cells(4, Cot) <> "" If Cells(65536, Cot).End(xlUp).Row = 4 Then Cells(4, Cot).EntireColumn.Delete Else Cot = Cot + 1 End If Loop End Sub
Rất mong các anh, em trên GPE xem và hướng dẫn giúp cách xóa cột theo điều kiện: không có dữ liệu trong cột, cụ thể trong file đính kèm. Cám ơn
Sub test()
Dim i As Long
With ActiveSheet.UsedRange
For i = .Columns.Count To 1 Step -1
If WorksheetFunction.CountA(.Cells(1, i).EntireColumn) = 1 Then _
.Cells(1, i).EntireColumn.Delete
Next i
End With
End Sub
Bạn thử thay bằng Sub này xem sao:
PHP:Sub Xoa_cot() Dim Cot As Integer Cot = 9 Do While Cells(4, Cot) <> "" If Cells(65536, Cot).End(xlUp).Row = 4 Then Cells(4, Cot).EntireColumn.Delete Else Cot = Cot + 1 End If Loop End Sub
Cot =9
Em làm như sau:---
Cám ơn bạn, code tiện ích lắm, bạn vui lòng hướng dẫn đọan code nhé.
---
Nhờ các bạn xem, giúp phần code vừa xóa dòng và xóa cột (cụ thể trong file đính kèm)
Cám ơn
Sub XoaDongCot()
Dim Rng As Range, FilterRng As Range, Temp As Range
Dim Sothieu As Range, Clls As Range, BlkRng As Range
On Error GoTo Thoat
Set Rng = Application.InputBox("Chon vung du lieu" & vbLf & _
"Luu ý: khong chon tieu de cot", Type:=8)
Set FilterRng = Range(Rng, Rng.Offset(-1))
Set Sothieu = Application.InputBox("Chon 1 cell trong cot SO THIEU", Type:=8)
With FilterRng
.AutoFilter Sothieu.Column - Rng.Column + 1, "<=0"
Rng.SpecialCells(12).EntireRow.Delete
.AutoFilter
End With
Set BlkRng = Rng.Resize(1).SpecialCells(4)
If Not BlkRng Is Nothing Then
Set Temp = BlkRng(1, 1)
For Each Clls In BlkRng
If Clls.End(xlDown).Row > Rng.Row + Rng.Rows.Count - 1 Then
Set Temp = Union(Temp, Clls)
End If
Next Clls
Temp.EntireColumn.Delete
End If
Thoat:
ActiveSheet.AutoFilterMode = False
End Sub
Rất cám ơn chú, nhưng ý anh là code này (Ví dụ: Sub Xoa) nằm trong 1 sub khác (ví dụ Sub A), khi Run sub A thì sẽ Run Xoa nên không chọn vùng = tay được. Chú hiểu ý anh chứ. Đương nhiên là trước khi xóa số liệu sẽ được lưu qua sh Data (số kế hoạch đã hoàn thành)Em làm như sau:
- Việc xóa dòng có số thiếu <=0 ta chuyển giao cho AutoFilter làm
- Xóa cột trong em dùng SpecialCell
Code tuy dài như em nghĩ thuật toán này cho tốc độ cực nhanh đây, vì khi xóa cột, vòng lập chỉ duyệt qua các cell rổng đầu tiên thôi
...
---Thêm đoạn code để anh tham khảo :
PHP:Sub test() Dim i As Long With ActiveSheet.UsedRange For i = .Columns.Count To 1 Step -1 If WorksheetFunction.CountA(.Cells(1, i).EntireColumn) = 1 Then _ .Cells(1, i).EntireColumn.Delete Next i End With End Sub
---
Long à, ý nghĩa của code này là thế nào? Hướng dẫn giúp anh nhé
Sub test()
Dim i As Long
With ActiveSheet.UsedRange
For i = .Columns.Count To 1 Step -1
If WorksheetFunction.CountA(.Cells(1, i).EntireColumn) = 1 Then _
.Cells(1, i).EntireColumn.Delete
Next i
End With
End Sub
Sẽ tiện hơn vì nếu cột nào trống rỗng thì cũng xoá luôn.If WorksheetFunction.CountA(.Cells(1, i).EntireColumn) <= 1 Then ...
Nếu không dùng tay để chọn thì anh phải xác định chính xác vùng dử liệu anh cần xóa là từ đâu đến đâu! Ít nhất là bắt đầu từ dòng nào, cột nào?Rất cám ơn chú, nhưng ý anh là code này (Ví dụ: Sub Xoa) nằm trong 1 sub khác (ví dụ Sub A), khi Run sub A thì sẽ Run Xoa nên không chọn vùng = tay được. Chú hiểu ý anh chứ. Đương nhiên là trước khi xóa số liệu sẽ được lưu qua sh Data (số kế hoạch đã hoàn thành)
---Nếu không dùng tay để chọn thì anh phải xác định chính xác vùng dử liệu anh cần xóa là từ đâu đến đâu! Ít nhất là bắt đầu từ dòng nào, cột nào?
Có giống y chang như file anh giả lập không?
Tại sao lại không nhỉ? Anh Tam8678 tham khảo xem sao?Rất cám ơn chú, nhưng ý anh là code này (Ví dụ: Sub Xoa) nằm trong 1 sub khác (ví dụ Sub A), khi Run sub A thì sẽ Run Xoa nên không chọn vùng = tay được. Chú hiểu ý anh chứ. Đương nhiên là trước khi xóa số liệu sẽ được lưu qua sh Data (số kế hoạch đã hoàn thành)
Sub Ktra()
kt = MsgBox("Co dong y tim xoa DL khong?", vbOKCancel, "XOA DL")
If kt = 1 Then xoa
End Sub
'-----------------------------------------------------------------
Sub xoa()
Dim Rg As Range
On Error GoTo Thoat
Set Rg = Application.InputBox("Go vao hay dung chuot chon vung can xoa", "XOA DL", , , , , , 8)
Rg.ClearContents
Exit Sub
Thoat:
End Sub
Sub này chỉ dành cho file của bạn thôi nhé, Nhập Chon DV vào InPutBox - OK.
Public Sub GPE()
Application.ScreenUpdating = False
Dim Rng As Range, DK As String, I As Long, Cot As Long
Cot = [IV12].End(xlToLeft).Column
Set Rng = Range([E12], Cells(12, Cot))
DK = UCase(InputBox("Nhap tieu de Cot KHONG XOA: ", "GPE"))
For I = Cot To 5 Step -1
If UCase(Cells(12, I)) <> DK Then Cells(12, I).EntireColumn.Delete
Next I
Set Rng = Nothing
Application.ScreenUpdating = True
End Sub