Có thể có những lúc chúng ta phải xóa các hàng hoặc cột trống khỏi tệp trong vòng lặp for Excel, chúng ta sẽ viết vba macro / code. Mã mà chúng ta cần sử dụng sẽ thay đổi theo từng trường hợp. Đôi khi chúng tôi có thể phải xóa một hàng hoặc cột trong khi đôi khi chúng tôi cần xóa toàn bộ phạm vi hàng hoặc cột hoặc đôi khi hàng / cột dựa trên một hoặc nhiều điều kiện.

Nếu bạn phải xóa chỉ một hoặc nhiều hàng hoặc cột cụ thể, chúng tôi sử dụng vòng lặp VBA excel for và bạn chỉ có thể sử dụng đoạn mã sau – _Option Explicit Sub macro1 ()

Application.DisplayAlerts = False With Worksheets (“Sheet1”)

Rows (“5: 6”). Delete .Columns (“A: D”). Delete End With Application.DisplayAlerts = True End Sub_ Bạn có thể thấy mã đã được sao chép vào cửa sổ mã Module1. Để sao chép mã, nhấn Alt + F11 trên tệp của bạn. Ở phía bên trái, bạn sẽ thấy Microsoft Excel Objects. Nhấp chuột phải và chọn Chèn, sau đó nhấp vào Mô-đun. Cửa sổ mã sẽ xuất hiện ở bên phải. Sao chép mã qua. Xem hình bên dưới –

img1

Application.DisplayAlerts = False

Chúng tôi đặt cảnh báo hiển thị thành false và lưu tệp với tên tệp được yêu cầu. Và sau đó đặt các cảnh báo hiển thị thành true ngay trước End Sub.

With Worksheets (“Sheet1”) là một vòng lặp Với kết thúc bằng End With.

Nếu bạn sử dụng vòng lặp for này trong VBA Excel, tất cả các câu lệnh bên trong vòng lặp này, sử dụng đối tượng này, không cần bắt đầu bằng “Worksheets (“ Sheet1 ”)”. Thay vào đó, họ có thể bắt đầu trực tiếp chỉ bằng một dấu chấm (.).

.Rows (“5: 6”). Delete sẽ chỉ xóa hàng 5 và 6.

Columns (“A: D”). Delete sẽ xóa các cột từ A đến D.

Chỉ các hàng / cột được chỉ định sẽ bị xóa trong trường hợp này.

Tuy nhiên, đôi khi bạn có thể phải xóa hàng / cột dựa trên các điều kiện nhất định. Ví dụ giả sử rằng chúng ta muốn xóa tất cả các cột trong tệp có chứa “Kiểm tra” làm tiêu đề. Trong trường hợp này, chúng ta cần một vòng lặp sẽ kiểm tra từ cột này sang cột khác và khi các tiêu chí được đáp ứng, nó sẽ xóa cột.

Chúng tôi có thể sử dụng một mã như thế này. Lưu ý rằng mỗi người sẽ chuẩn bị mã theo cách mà họ cảm thấy thoải mái. Đây chỉ là một trong những cách có thể được mã hóa và không phải là phương pháp duy nhất.

_Option Explicit Sub macro2 ()

Dim i As Long, lcol As Long Application.DisplayAlerts = False With Worksheets (“Sheet1”)

lcol = .Range (“A1”). End (xlToRight) .Column For i = lcol to 1 Step -1 If .Cells (1, i) .Value = “” Then Exit For If .Cells (1, i). value = “Test” Then .Columns (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_ Xem mã đã được lưu trong Mô-đun 1 như hình bên dưới

img2

Đây lcol là cột cuối cùng trong trang tính có dữ liệu trong đó. Trong trường hợp bạn tình cờ kiểm tra mã này trên một tệp trống, lcol sẽ có giá trị là 16384 hoặc số cột của cột cuối cùng theo phiên bản excel của bạn. Sau đó, chúng tôi lặp lại từ cột cuối cùng đến cột đầu tiên, lùi lại một bước mỗi lần. Chúng tôi đang lùi lại vì mã xóa chỉ hoạt động tốt khi bạn bắt đầu xóa từ hàng cuối cùng hoặc cột cuối cùng. Nếu bạn bắt đầu từ hàng / cột 1 ^ st ^, mã có xu hướng bị lỗi.

Điều kiện 1 ^ st ^ if được nhập vào đó trong trường hợp bạn chạy macro trên tệp trống. Trong Excel, macro sẽ lặp lại từ cột cuối cùng là 16384 trong trường hợp này cho đến cột 1 và điều này có thể mất một thời gian khá dài. Vì vậy, trong trường hợp mã tìm thấy một cột trống, nó sẽ kết thúc vòng lặp ngay lập tức thông qua lệnh exit For. Điều kiện 2 ^ nd ^ if sẽ kiểm tra xem giá trị có là “Kiểm tra” hay không và xóa cột nếu tìm thấy “Kiểm tra”.

Trong trường hợp bạn muốn xóa các hàng thay vì các cột, mã sẽ thay đổi thành – _Option Explicit Sub macro3 ()

Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets (“Sheet1”)

lrow = .range (“A” & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 If .Cells (i, 1) .Value = “” Then Exit For If .Cells ( i, 1) .Value = “Test” Sau đó .Rows (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_ Xem đoạn mã bên dưới –

img3

Bạn sẽ thấy rằng .Cells (1, i) .value thay đổi thành .Cells (i, 1) .value trong đoạn mã trên. Điều này xảy ra bởi vì trong đoạn mã đầu tiên, chúng tôi đang xóa các cột nên biến “i” phải lặp qua các cột, trong khi ở mã 2 ^ nd ^, nó cần phải lặp qua các hàng. Ở đây chúng ta sẽ lặp từ hàng cuối cùng đến hàng 2 ^ nd ^, vì hàng 1 ^ st ^ chứa các tiêu đề cần được giữ lại.

Theo yêu cầu mã, bạn thậm chí có thể hợp nhất cả hai dòng xóa và mã xóa cột thành 1 mã. Bạn thậm chí có thể đặt nhiều điều kiện dựa trên đó mà hàng / cột sẽ bị xóa. Hãy xem xét, chúng ta muốn xóa tất cả các hàng trong đó cột 1 ^ st ^ chứa văn bản như Test hoặc Dummy, thì mã sẽ như thế này – _Option Explicit Sub macro4 ()

Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets (“Sheet1”)

lrow = .range (“A” & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 If .Cells (i, 1) .Value = “” Then Exit For If .Cells ( i, 1) .Value = “Test” Hoặc .Cells (i, 1) .Value = “Dummy” Sau đó .Rows (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_

img4

Tương tự, bạn có thể thêm vào mã này hoặc mã bạn có dựa trên yêu cầu. Bạn có thể thêm nhiều điều kiện cho hàng và thậm chí cho cột.

image 48