2016-02-15 2 views
3

Код должен проходить через диапазон данных и искать определенные переменные в двух разных столбцах и вставлять данные на другом листе. Я не получаю правильных результатов (Christo and Paid).Loop stop too soon

Ниже приведен код.

Sub Cop() 

    Dim x As Integer 
    Dim y As Integer 
    Dim z As Integer 
    Dim a As Integer 
    Dim NumRows As Long 

    Sheets("Not_Paid").Select 
    If Range("B2") = 1 And Range("B4") = 1 Then 
     Sheets("Microinvest").Select 
     Range("A1").Select 

     ' Set numrows = number of rows of data. 
     NumRows = Range(ActiveCell, ActiveCell.End(xlDown)).Rows.Count 

     ' Establish "For" loop to loop "numrows" number of times. 
     For x = 1 To NumRows 
      y = x + 1 
      z = x + 7 
      a = x - 1 
      Sheets("Microinvest").Select 
      Range("A" & y).Select 
      If ActiveCell.Offset(a, 2) = "Christo" And ActiveCell.Offset(a, 4) = "Paid" Then 
       Range("A" & y, "F" & y).Select 
       Selection.Copy 
       Sheets("Not_Paid").Select 
       Range("A" & z).Select 
       ActiveSheet.Paste 
      End If 
     Next 
    End If 

    Sheets("Not_Paid").Select 

End Sub 

Вот пример данных я использую:

Data Output

Я получаю значения Благоевград и NotPaid, который не должен быть подобран. Или, по крайней мере, это то, что было у меня под впечатлением.

Кроме того, переменная x пересекает 84 строки, а не 389, что является фактическим номером строки моего диапазона.

+0

Pray сказать: как мы должны определить, если код выдает правильные результаты, не имея преимущество видеть данные, обрабатываемые? Если ваш код создает неожиданные результаты, вы прошли через него и проверили фактические значения ячеек, используемых в условном выражении? Дайте это. – teylyn

+0

Не могли бы вы отредактировать вопрос, чтобы быть более конкретным? –

+0

Не могли бы вы привести примеры правильного и неправильного кода? –

ответ

3

Я думаю, что это работает:

Sub Cop() 
    Dim nRows As Long, rw As Long, cnt As Long 

    cnt = 10 'Start output in row 10 on sheet Not_Paid 

    If Worksheets("Not_Paid").Range("B2") = 1 And Worksheets("Not_Paid").Range("B4") = 1 Then 

     With Sheets("Microinvest") 
      nRows = .Range("A1").End(xlDown).Row 

      For rw = 1 To nRows 
       If .Range("A" & rw).Offset(0, 2) = "Christo" And .Range("A" & rw).Offset(0, 4) = "Paid" Then 
        .Range("A" & rw & ":F" & rw).Copy Destination:=Worksheets("Not_Paid").Range("B" & cnt) 
        cnt = cnt + 1 
       End If 
      Next 
     End With 

    End If 
End Sub 
+0

Alex P - Это прекрасно работает. Большое спасибо!!!! – AlSeres

+1

Нет проблем. Я немного прибрал ваш код. Вы заметите, что я не использую 'select' в моем коде. Как правило, лучше (более эффективно) избегать использования 'select' –

+0

. Я также выяснил, что было не так с моим кодом, посмотрев на ваш. Не должно было иметь (a) переменную. Если вы удалите, что выводимые данные - это то, что я хочу. Тем не менее, ваш код намного лучше и быстрее. Спасибо!!!! – AlSeres