遍历一个范围内的单元格

目前,我正在使用下面的代码来检查列A的一定范围的单元格中的N / A值,如果find,我删除该行。

With Sheets(Sheet) For LRow = 45 To 29 Step -1 With .Cells(LRow, "A") If (CVErr(.Value) = CVErr(xlErrNA)) Then .EntireRow.Delete End With Next LRow End With 

我需要扩展这个,所以我检查所有列1到10,而不是只是A.我试过这个微小的修改(嵌套另一个循环),但它不起作用。 有什么build议么?

 With Sheets(Sheet) For LRow = 45 To 29 Step -1 For LCol = 10 To 1 Step -1 With .Cells(LRow, LCol) If (CVErr(.Value) = CVErr(xlErrNA)) Then .EntireRow.Delete End With Next LCol Next LRow End With 

这里有两个问题:

  • 嵌套

  • 在任何给定的行上findN / A,你需要中止循环

尝试

 Set sh = Sheets(Sheet) For LRow = 45 To 29 Step -1 For LCol = 10 To 1 Step -1 If (CVErr(sh.Cells(LRow, LCol).Value) = CVErr(xlErrNA)) Then sh.Cells(LRow, 1).EntireRow.Delete Exit For ' Exit the LCol loop End If Next LCol Next LRow 

这可能会失败英语以外的其他语言

 Sub DeleteNA() Dim rRange As Range Dim rFound As Range Const sNA As String = "#N/A" Do Set rRange = Sheet1.Range("A29:F49") Set rFound = rRange.Find(sNA, , xlValues, xlWhole, xlByRows) If Not rFound Is Nothing Then rFound.EntireRow.Delete Else Exit Do End If Loop End Sub 

更改A29:F49以适合您的数据。

你可以采取稍微不同的方法

 Sheets("Sheet1").Select Set cols = Range("A1:D80") For Each Cell In cols If Cell.Value = "XXX" Then Cell.EntireRow.Delete End If Next 

我相信在你使用的嵌套'with'子句中有问题。

你可以定义一个适当的范围,并使用“for each”循环,这将使事情更清晰,更容易阅读。 为了testing目的,我将范围命名为“MyRange”。

 Sub test() Dim cell As Excel.Range For Each cell In [myRange] If CVErr(cell.Value) = CVErr(xlErrNA) Then cell.EntireRow.Delete Next cell End Sub