Bỏ qua nội dung chính
Trình duyệt này không còn được hỗ trợ.
Nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, cập nhật bảo mật và hỗ trợ kỹ thuật.
Xóa các ô bằng cách sử dụng vòng "cho mỗi ... tiếp theo" trong Excel
- Bài báo
- 05/05/2022
- 3 phút để đọc
- Áp dụng cho: Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Office Excel 2002, Excel 97
Trong bài viết này
Bản tóm tắt
Microsoft Excel 2002 và các phiên bản Excel Delete sau này trong vòng lặp "cho mỗi ... tiếp theo" theo một cách khác với Microsoft Excel 97 và các phiên bản trước của Excel Do.
Bài viết này mô tả sự khác biệt và nó cung cấp một ví dụ về cơ bản trực quan cho các ứng dụng Macro minh họa cách xóa các ô trong một vòng lặp.
Thêm thông tin
Microsoft chỉ cung cấp các ví dụ lập trình cho minh họa, không có bảo hành được thể hiện hoặc ngụ ý. Điều này bao gồm, nhưng không giới hạn, các bảo đảm ngụ ý về khả năng thương mại hoặc thể lực cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen thuộc với ngôn ngữ lập trình đang được thể hiện và với các công cụ được sử dụng để tạo và gỡ lỗi các thủ tục. Các kỹ sư hỗ trợ của Microsoft có thể giúp giải thích chức năng của một thủ tục cụ thể. Tuy nhiên, họ sẽ không sửa đổi các ví dụ này để cung cấp chức năng bổ sung hoặc các quy trình xây dựng để đáp ứng các yêu cầu cụ thể của bạn.
Dữ liệu mẫu
Để sử dụng macro trong bài viết này, hãy nhập dữ liệu mẫu sau vào bảng tính:
A1: a B1: 1
A2: b B2: 2
A3: x B3: 3
A4: x B4: 4
A5: c B5: 5
A6: x B6: 6
A7: d B7: 7
A8: x B8: 8
A9: x B9: 9
A10: e B10: 10
Mẫu vĩ mô mẫu
Trong một mô -đun macro mới, nhập macro sau.
Sub DeleteCells[]
'Loop through cells A1:A10 and delete cells that contain an "x."
For Each c in Range["A1:A10"]
If c = "x" Then c.EntireRow.Delete
Next
End Sub
Hành vi của macro mẫu trong Excel 2002 và trong các phiên bản sau của Excel
Khi bạn chạy macro Deletecells trong Excel 2002 và trong các phiên bản sau của Excel, chỉ các hàng 3, 6 và 8 sẽ bị xóa. Mặc dù các hàng 4 và 9 chứa "x" trong cột A, macro không xóa các hàng. Kết quả của macro như sau:
A1: a B1: 1
A2: b B2: 2
A3: x B3: 4
A4: c B4: 5
A5: d B5: 7
A6: x B6: 9
A7: e B7: 10
Khi Microsoft Excel xóa hàng 3, tất cả các ô di chuyển lên một hàng. Ví dụ, ô A3 giả định nội dung của ô A4, ô A4 giả định nội dung của ô A5, v.v. Sau khi mỗi ... Vòng tiếp theo đánh giá một ô, nó đánh giá ô tiếp theo; Do đó, khi các tế bào được dịch chuyển, chúng có thể bị bỏ qua bởi vòng lặp.
Hành vi của macro mẫu trong Microsoft Excel 5.0 và Microsoft Excel 7.0
Khi bạn chạy macro Deletecells trong Excel 5.0 và trong Excel 7.0, macro sẽ xóa tất cả các hàng có chứa "x." Kết quả của macro như sau:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Khi hàng 3 bị xóa, tất cả các ô di chuyển lên một hàng. Sau đó, ô A3 giả định nội dung của ô A4, ô A4 giả định nội dung của ô A5, v.v.
Tuy nhiên, không giống như hành vi của vòng lặp trong Excel 2002 và trong các phiên bản Excel sau này, khi vòng lặp "cho mỗi ... tiếp theo" đánh giá một ô trong Excel 5.0 và trong Excel 7.0, vòng lặp đánh giá lại tế bào nếu nó bị xóa vòng lặp. Do đó, các tế bào không bị bỏ qua.
Phương pháp được đề xuất để sử dụng một vòng lặp để xóa các ô
Sử dụng macro sau khi bạn muốn sử dụng vòng lặp để xóa các ô:
Sub DeleteCells2[]
Dim rng As Range
Dim i As Integer, counter As Integer
'Set the range to evaluate to rng.
Set rng = Range["A1:A10"]
'initialize i to 1
i = 1
'Loop for a count of 1 to the number of rows
'in the range that you want to evaluate.
For counter = 1 To rng.Rows.Count
'If cell i in the range contains an "x",
'delete the row.
'Else increment i
If rng.Cells[i] = "x" Then
rng.Cells[i].EntireRow.Delete
Else
i = i + 1
End If
Next
End Sub
Kết quả của macro này trong tất cả các phiên bản của Excel như sau:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Phương pháp bổ sung để sử dụng một vòng lặp để xóa các ô
Đây là một phương pháp thay thế cho phương pháp được hiển thị ở trên. Phương pháp này tạo ra kết quả tương tự.
Sub DeleteCells3[]
Dim rng As Range, i As Integer
'Set the range to evaluate to rng.
Set rng = Range["A1:A10"]
'Loop backwards through the rows
'in the range that you want to evaluate.
For i = rng.Rows.Count To 1 Step -1
'If cell i in the range contains an "x", delete the entire row.
If rng.Cells[i].Value = "x" Then rng.Cells[i].EntireRow.Delete
Next
End Sub