2016-06-17 3 views
1

Из того, что я вижу в других связанных вопросах о функции countif, я не понимаю, почему мой код не работает.Использование Countif в Excel для удаления строк

У меня есть поле, где я идентифицировал строки, которые я хочу удалить, чтобы содержать значение «GO AWAY». Ниже приведен код, который я использую, чтобы заставить их уйти. DF - это мой текущий рабочий лист, как определено «Set DF = CWB.Worksheets (« Удалить »)» и «Установить CWB = ThisWorkbook».

Dim iVal As Integer 
Dim LastRow2 As Long 
Dim ii As Integer  

Do While (iVal > 0) 
     LastRow2 = DF.Cells(DF.Rows.Count, 1).End(xlUp).Row 
     iVal = DF.Application.WorksheetFunction.CountIf(DF.Range("d:d"), "GO AWAY") 

     For ii = 2 To LastRow2 
      If DF.Cells(ii, 4).Value = "GO AWAY" Then 
       Rows(ii).EntireRow.Select 
       DF.Cells.EntireRow.Select 'Caution to testers. This line and the next will delete the entire worksheet. 
       Selection.Delete Shift:=xlUp 'Caution to testers. This line and the previous will delete the entire worksheet. 
      End If 
     Next ii 
    Loop 

Если я использую формулу в случайной ячейке:

=CountIf(D:D, "GO AWAY") 

возвращает 128.

+1

О, вы должны поставить 'WHILE' в конце концов! Поскольку вы не объявляете 'ival', он сразу закончит' do'. – Chrismas007

+0

. Лучшие способы удаления строк см. Здесь: http://stackoverflow.com/questions/33744149/code-in-vba- loops-and-never-ends-how-to-fix-this –

+0

@ScottCraner Не этот код: 'DF.Cells.EntireRow.Select Selection.Delete Shift: = xlUp' Удалить весь лист? – Chrismas007

ответ

1

@DavidCampbell Поскольку переменная ival не была определена, она недобросовестный обнулить или ноль в некоторых случаев. Это удовлетворило ваше состояние окончания Do While (ival > 0). С ival было меньше 0, оно закончило целую петлю Do.

Намного проще код для удаления строк:

LastRow2 = DF.Cells(DF.Rows.Count, 1).End(xlUp).Row 
    For ii = LastRow2 To 2 Step -1 
     If DF.Cells(ii, 4).Value = "GO AWAY" Then 
      Rows(ii).EntireRow.Delete xlShiftUp 
     End If 
    Next ii 
+0

Спасибо. Все еще не знаю, что случилось с тем, как я это делал ... ну ладно. –

+0

@DavidCampbell Поскольку ваша переменная 'ival' не была определена, в некоторых случаях она по умолчанию была нулевой или нулевой. Это удовлетворило ваше условие окончания 'Do While (ival> 0)'. Поскольку 'ival' было меньше 0, он закончил весь цикл Do Do. – Chrismas007

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