Cần viết Code Delete cả cột nếu cột đó chứa ô bằng 0 (Mà không phải xài For...Next) (1 người xem)

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
934
Được thích
240
Giới tính
Nam
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có 1 File Excel như vầy:

SHkY7i9.png


Nếu dòng Tổng cộng (Ở dòng 13) có ô nào bằng 0 (Từ cột D cho đến cột J) thì Delete luôn cả cột chứa ô đó.
Ví dụ:
- Ô F13 bằng 0 => Delete cột F (Vì chứa ô F13 bằng 0).
- Ô H13 bằng 0 => Delete cột H (Vì chứa ô H13 bằng 0).
Kết quả mong muốn như hình dưới đây:

enGCHIW.png


Để giải bài trên tôi xài Code:
[GPECODE=vb]Sub Delete_Cot()
Dim i As Long
For t = 10 To 4 Step -1
If Cells(13, t) = 0 Then
Cells(13, t).EntireColumn.Delete
End If
Next
End Sub[/GPECODE]
Vấn đề được đặt ra ở đây là: Có Code nào giải quyết bài trên mà không phải xài For...Next không?
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.



 

File đính kèm

Bạn có thể làm theo các bước sau
- Bước 1: gán công thức vào dòng tiếp dòng tổng cộng theo dạng
Mã:
If(A1=0,1,"")
Áp dụng cho tất cả các cột.
- Bước 2: chọn vùng đó sau đó Goto Special chọn Fomulas > Number
- Bước 3: Delete entire Column là được.
 
Upvote 0
Bạn có thể làm theo các bước sau
- Bước 1: gán công thức vào dòng tiếp dòng tổng cộng theo dạng
Mã:
If(A1=0,1,"")
Áp dụng cho tất cả các cột.
- Bước 2: chọn vùng đó sau đó Goto Special chọn Fomulas > Number
- Bước 3: Delete entire Column là được.
Cảm ơn bạn, nhờ bạn chỉ giáo mà tôi có thể viết được Code tối ưu hơn:
[GPECODE=vb]Sub Delete_Cot()
Range([D14], [J14]).Select
Selection = "=If(R[-1]C=0,1,"""")"
Selection.SpecialCells(xlCellTypeFormulas, 1).Select
Selection.EntireColumn.Delete
End Sub[/GPECODE]
 
Upvote 0
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có 1 File Excel như vầy:

SHkY7i9.png


Nếu dòng Tổng cộng (Ở dòng 13) có ô nào bằng 0 (Từ cột D cho đến cột J) thì Delete luôn cả cột chứa ô đó.
Ví dụ:
- Ô F13 bằng 0 => Delete cột F (Vì chứa ô F13 bằng 0).
- Ô H13 bằng 0 => Delete cột H (Vì chứa ô H13 bằng 0).
Kết quả mong muốn như hình dưới đây:

enGCHIW.png


Để giải bài trên tôi xài Code:
[GPECODE=vb]Sub Delete_Cot()
Dim i As Long
For t = 10 To 4 Step -1
If Cells(13, t) = 0 Then
Cells(13, t).EntireColumn.Delete
End If
Next
End Sub[/GPECODE]
Vấn đề được đặt ra ở đây là: Có Code nào giải quyết bài trên mà không phải xài For...Next không?
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
Thử kiểu sau xem sao. sửa lại code cho phù hợp
PHP:
Sheet1.[C2:C1048568].SpecialCells(4).EntireRow.Delete
 
Upvote 0
Xin chào các Anh chị và các bạn GPE!
Nhờ các Anh chị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tôi có 1 File Excel như vầy:

SHkY7i9.png


Nếu dòng Tổng cộng (Ở dòng 13) có ô nào bằng 0 (Từ cột D cho đến cột J) thì Delete luôn cả cột chứa ô đó.
Ví dụ:
- Ô F13 bằng 0 => Delete cột F (Vì chứa ô F13 bằng 0).
- Ô H13 bằng 0 => Delete cột H (Vì chứa ô H13 bằng 0).
Kết quả mong muốn như hình dưới đây:

enGCHIW.png


Để giải bài trên tôi xài Code:
[GPECODE=vb]Sub Delete_Cot()
Dim i As Long
For t = 10 To 4 Step -1
If Cells(13, t) = 0 Then
Cells(13, t).EntireColumn.Delete
End If
Next
End Sub[/GPECODE]
Vấn đề được đặt ra ở đây là: Có Code nào giải quyết bài trên mà không phải xài For...Next không?
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.



Mã:
Sub Delete_Column()
    Dim i As Long
    With Sheet1.UsedRange
        For i = .Columns.Count To 1 Step -1
            If WorksheetFunction.Count(.Cells(1, i).EntireColumn) = 1 Then
                .Cells(1, i).EntireColumn.Delete
            End If
        Next
    End With
End Sub
Nếu dùng vòng lặp thì bạn thử cái này.
Còn code nếu ko muốn dùng vòng lặp ko biết có làm vấn đề thêm phức tạp hơn hay ko. Cái này bạn đợi anh em khác nhé
 
Upvote 0
Thằng này cũng là dạng không phải for...next... mà chỉ xóa từng cột bằng 0 mà thôi

Mã:
Sub Xoa()
Dim Cl As Range
With Sheet1
Do
Set Cl = .Range("C13:J13").Find(What:=0, LookIn:=xlValues)
If Cl Is Nothing Then Exit Do
.Columns(Cl.Column).EntireColumn.Delete
Loop
End With
End Sub
 
Upvote 0
Thằng này cũng là dạng không phải for...next... mà chỉ xóa từng cột bằng 0 mà thôi

Mã:
Sub Xoa()
Dim Cl As Range
With Sheet1
Do
Set Cl = .Range("C13:J13").Find(What:=0, LookIn:=xlValues)
If Cl Is Nothing Then Exit Do
.Columns(Cl.Column).EntireColumn.Delete
Loop
End With
End Sub
Anh Việt dùng Find Method bài này cũng rất hợp lý h. Cảm ơn anh
 
Upvote 0

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

Back
Top Bottom