2016-01-06 6 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 - это отображение, содержимое ячейки - это что-то вроде Error 2042, поэтому используйте IsError –

+0

'If workheetfunction.IsError (Ячейки (i, 10)), затем ...' as @ Nathan_Sav сказал –

+0

Я попробовал ваше предложение, ваше предложение и оно, похоже, работает, но говорящий веками, чтобы выполнить. Я думаю, это потому, что файл имеет более 10000 строк. Это то, что я сделал 'дим я длиною при г = Cells (Rows.Count, 10) .END (xlUp) .Row К 1 Шаг -1 Если worksheetfunction.IsError (клетки (я, 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 method с xlSpecialCellsValue постоянной, как 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, и вы должны обойти любую ошибку, вызванную попыткой ничего не обрабатывать.

Смежные вопросы