2013-08-14 3 views
0

У меня есть следующие данныеУдаление данных, которые связаны с # N/A

A B C D E 

1 test abc abc abC#N/A 

2 

3 

Я хочу, чтобы удалить 3 аЬс вместе с # N/A, но я не могу удалить всю строку как это могут иметь данные, которые не подлежат удалению. Диапазон также не фиксирован.

Я думал следующий код, но он просто заменяет # N/A с «»

Cells.Replace "#N/A", "", xlWhole 

делится со мной, если у вас есть какие-либо советы на нем. Заранее спасибо!

+0

Каковы критерии для удаления ячеек? удалить из столбца 'B', пока не найдете' # N/A'? Что вы подразумеваете под удалением: осталось содержимое или ячейки смены? –

+0

Критерии пока есть # N/A, данные из предыдущих 4 столбцов в той же строке перед # N/A должны быть удалены/Очистить содержимое – user1204868

+1

Где вы хотите найти '# N/A '? Столбец E или везде? –

ответ

1

Вашего собственного ответа попадает в точку, но нужна некоторая коррекция и настройка:

Sub DeleteNA() 
    Dim c As Range 
    For Each c In Intersect(ActiveSheet.Columns("T"), ActiveSheet.UsedRange).Cells 
     If VarType(c.Value) = vbError And c.Text = "#N/A" Then c.Offset(, -4).Resize(, 5).ClearContents 
    Next 
End Sub 

Если это все-таки принимать долгое время, рассмотреть возможность использования Application.Calculation = xlCalculationManual и Application.ScreenUpdating = False

EDIT: Исправление для очистки ячейки и 4 ячейки справа (вместо 3)

+0

Могу ли я проверить с вами команду c.Offset (, -3), что она делает? Я не смог удалить столбцы добавлений, если он выходит за пределы 3. Коды работают просто отлично – user1204868

+0

'Range.Offset ([rows], [columns])' возвращает новый диапазон, сдвинутый на определенное количество строк и/или столбцов , 'c.Offset (, -3)' обозначает ячейки 3 столбца прямо из ячейки 'c'. –

0

Я попробовал и нашел способ после изменения некоторых кодов, которые я нашел в Интернете,

Sub DeleteNA() 
Dim r As Long 
Dim iCol As Long 

    For iCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column 
     For r = Cells(Rows.Count, iCol).End(xlUp).Row To 1 Step -1 
      If Application.WorksheetFunction.IsNA(Cells(r, iCol)) Then 

      Cells(r, iCol - 4) = "" 
      Cells(r, iCol - 3) = "" 
      Cells(r, iCol - 2) = "" 
      Cells(r, iCol - 1) = "" 
      Cells(r, iCol) = "" 

      End If 
     Next r 
    Next iCol 
    End Sub 

Он смотрит долго и может занять много времени, когда данные получает много ..

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