2015-12-22 6 views
1

Я хочу пройти через колонку L и заменить ячейки, содержащие эти текстовые поля, на 0. Если нет, я хочу оставить как есть. Код запускается, но останавливается при первом # N/A, с которым он сталкивается.Пройдите через столбец и замените, если они содержат эти значения. Если не оставить как есть

Sub Drops() 
    Dim i&, z& 
    With Application 
     .ScreenUpdating = False 
     .Calculation = xlCalculationManual 

     With Sheets("Input") 
      i = .Cells(Rows.Count, "L").End(xlUp).Row 
      For z = i To 2 Step -1 
       If (.Cells(z, "L").Value2 Like "*Customer Dropoff*" _ 
        Or .Cells(z, "L").Value2 Like "*RE-Ships No pick up charge*" _ 
         Or .Cells(z, "L").Value2 Like "*Undeliverable Publication Mail (NO P/U CHARGE)*" _ 
          Or .Cells(z, "L").Value2 Like "*RETURNS*" _ 
           Or .Cells(z, "L").Value2 Like "*K2 Fed Ex*" _ 
            Or .Cells(z, "L").Value2 Like "*WorldNet Shipping*" _ 
             Or .Cells(z, "L").Value2 Like "*OSM (NO P/U COST)*" _ 
              Or .Cells(z, "L").Value2 Like "*TEST PICK UP*") Then 

        .Cells(z, "L").Value2 = 0 
       End If 
      Next z 
      z = .Cells(Rows.Count, "L").End(xlUp).Row 
     End With 

     .ScreenUpdating = True 
     .Calculation = xlCalculationAutomatic 
    End With 
    MsgBox i - z & " Rows has been changed!" 
End Sub 
+0

определить «останавливается» ... – Jeremy

+0

это выдвигает на первый план, если весь или блок – ichoi

ответ

2

Непроверенные:

Sub Drops() 
    Dim i As Long, z As Long, arr, v, n As Long 
    Dim numEdits As Long 

    numEdits = 0 
    arr = Array("Customer Dropoff", "RE-Ships No pick up charge", _ 
       "Undeliverable Publication Mail (NO P/U CHARGE)") 'etc 

    With Application 
     .ScreenUpdating = False 
     .Calculation = xlCalculationManual 
    End With 

    With Sheets("Input") 
     i = .Cells(Rows.Count, "L").End(xlUp).Row 

     For z = i To 2 Step -1 

      v = .Cells(z, "L").Value 
      If IsError(v) Then 
       'ignore error ? 
      Else 
       For n = LBound(arr) To UBound(arr) 
        If v Like "*" & arr(n) & "*" Then 
         .Cells(z, "L").Value = 0 
         numEdits = numEdits + 1 
         Exit For 
        End If 
       Next n 
      End If 

     Next z 

    End With 

    With Application 
     .ScreenUpdating = True 
     .Calculation = xlCalculationAutomatic 
    End With 

    MsgBox numedits & " Row(s) changed!" 

End Sub 
+0

Great работает отлично, но окно сообщения не отображается количество ячеек изменилось. Он говорит 0, когда были сделаны многочисленные изменения. Спасибо хоть. – ichoi

+1

Непонятно, что вы намеревались с этим Msgbox. См. Мои обновления выше. –