2016-01-06 41 views
2

我正在處理VBA代碼,並且需要部分代碼來刪除表格中「J」爲「#N/A」列中文本的所有行。我已經編寫了一個代碼,但是在調試時出現類型不匹配錯誤。刪除列中出現錯誤的所有行

下面是代碼

Dim i As Long 
For i = Cells(Rows.Count, 10).End(xlUp).Row To 1 Step -1 
If Cells(i, 10) = "#N/A" Then Cells(i, 1).EntireRow.Delete 
Next i 
+1

你需要捕獲錯誤N/A是顯示,單元格內容類似於錯誤2042,所以使用IsError –

+0

'If worksheetfunction.IsError(Cells(i,10))then ...'as @ Nathan_Sav說 –

+0

我試過你的建議你的建議,它似乎工作,但說年齡執行。我想這是因爲該文件有超過10000行。 這是我所做 '昏暗我只要 對於i =細胞(Rows.Count,10).END(xlUp).Row要1個步驟-1 如果worksheetfunction.IsError(細胞(I,10 ))然後單元格(i,1).EntireRow.Delete 下一頁i' –

回答

1

試試這個代碼:

Dim i As Long 
For i = Cells(Rows.Count, 10).End(xlUp).Row To 1 Step -1 
If Cells(i, 10).Text = "#N/A" Then Cells(i, 1).EntireRow.Delete 
Next i 
3

使用Range.SpecialCells methodxlSpecialCellsValue常數xlErrors快速識別J列所有單元格有錯誤。它沒有透露細胞是公式還是鍵入常量,所以我添加了代碼來檢查通過xlCellType Enumeration類型。

Sub del_error_rows() 
    With Worksheets("Sheet3") 
     On Error Resume Next 
     With .Columns(10).SpecialCells(xlCellTypeFormulas, xlErrors) 
      .EntireRow.Delete 
     End With 
     With .Columns(10).SpecialCells(xlCellTypeConstants, xlErrors) 
      .EntireRow.Delete 
     End With 
     On Error GoTo 0 
    End With 
End Sub 

On Error Resume Next是必要的情況下沒有細胞存在與該特定錯誤配置。在這種情況下,SpecialCells將是Nothing,並且您必須繞過嘗試不處理任何內容而引發的任何錯誤。