У меня есть четыре столбца, цикл над двумя столбцами, используя вложенные 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 часов в разнице в настоящее время рассматривается как истинное и проходящая через если заявление.
не будет решить вашу проблему, но изменяя 'Если ((Range ("BG" & J) .Value - Range ("BF" & I) * 1440) <60 Затем 'to' If (Range («BG» & j) .Value - Range («BF» & i))
FreeMan
chancea: when работая в 2-мерной области, я уверен, что мне нужны две петли вправо? FreeMan: Я очищу его, как только он будет функционировать правильно, но спасибо за этот лакомый кусочек, не знал об этом! – snasmon