2015-05-22 4 views
0

У меня есть четыре столбца, цикл над двумя столбцами, используя вложенные do while loop, а затем два оператора if, чтобы действовать как ограничения. Если передаются два оператора if, revalue (вставка также является опцией), две новые ячейки для значений ячеек, которые были проверены с использованием индекса в первом цикле, и еще две новые ячейки для значений ячеек, которые были проверяется с помощью индекса на вложенном цикле.VBA Проблема с вложенными do whiles и вложенными ifs

код:

Dim i 
Dim j 

i = 1 
j = 1 

Do Until IsEmpty(Range("BE" & i)) 
    Do Until IsEmpty(Range("BH" & j)) 
     If Cells(i, "BE").Value = Cells(j, "BH").Value Then 
      If (Cells(j, "BG").Value - Cells(i, "BF")) < TimeValue("1:00:00") Then 
      'This is not correctly filtering, dates/time are in 
      ' mm/dd/yy hh:mm format 

       Range("BJ" & i).Value = Range("BE" & i).Value 
       Range("Bk" & i).Value = Range("BF" & i).Value 
       Range("BL" & i).Value = Range("BG" & j).Value 
       Range("BM" & i).Value = Range("BH" & j).Value 
      End If 
     End If 

     j = j + 1 
    Loop 

    i = i + 1 
    j = 1 
    Loop 

End Sub 

Что он делает:

Это делает почти все правильно. Проблема в том, что он НЕ правильно проверяет, не отличается ли разница во времени между ячейками BG (j) и BF (i) < 60 минут. Используете ли:

If (Cells(j, "BG").Value - Cells(i, "BF")) * 1440 < 60 Then 

или

IF (Cells(j, "BG").Value - Cells(i, "BF")) < TimeValue("1:00:00") Then 

значения, 5 часов в разнице в настоящее время рассматривается как истинное и проходящая через если заявление.

+0

не будет решить вашу проблему, но изменяя 'Если ((Range ("BG" & J) .Value - Range ("BF" & I) * 1440) <60 Затем 'to' If (Range («BG» & j) .Value - Range («BF» & i)) FreeMan

+0

chancea: when работая в 2-мерной области, я уверен, что мне нужны две петли вправо? FreeMan: Я очищу его, как только он будет функционировать правильно, но спасибо за этот лакомый кусочек, не знал об этом! – snasmon

ответ

4

Попробуйте добавить j = 1 только после того, как i = i + 1

+0

также вы, кажется, не нужно »(« in the If ((Range («BG» & j) .Value - Range («BF» & i) * 1440) <60 Затем или им не хватает чего-то – KKowalczyk

+0

, которое исправлено все. Ты мой герой <3 – snasmon

+0

проблем нет, если бы ты мог только отметить как ответ :)) – KKowalczyk

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