Нужно вычислить интервал работы, но как вы видите ON OFF и Parameter не идут подряд, нужно чтобы макрос помогал находить начало-конец интервала и вычислял его
Впринципе я никогда не увлекался программированием, вот что я смог придумать прочитав хелпы, но этот алгоритм не работает, точнее работает но дыряво:
Sub Delay()
y = 1
x = 1
Do
Do While Cells(x, 3) <> ""
If (Cells(x + y, 8) = Cells(x, 8)) And (Cells(x + y, 4) = "Off") And (Cells(x, 4) = "On") Then
Cells(x, 2) = Cells(x + y, 3) - Cells(x, 3)
x = x + 2
y = 1
Else
y = y + 1
End If
Loop
y = 1
Loop Until Cells(x + 1, 8) = Cells(x, 8)
А у тебя это в каком виде все представленно? Текстовый файл? Ексель? Или что-то еще? Если Ексель, то данные предоставленны строками, т.е. в ячейке строка Time, ,Identifier, ,Parameter или же они идут в разных ячейках? ?
Представлено в екселе конечно же.
Вроде написал и вроде работает, буду рад если будут комментарии\замечания предложения как улучшить:
Sub Delay()
n = 14000 'количество строк
For x = 1 To n
y = x
If y > n ThenExitFor
If Cells(x, 2) = "On"Then
Do
If Cells(y, 2) = "Off"And Cells(y, 3) = Cells(x,3) Then
Cells(x, 4) = Cells(y, 1) - Cells(x, 1)
A = True
Else
y = y + 1
If y > n ThenExitDo
EndIf
LoopUntil A = True
A = False
EndIf
Next x
EndSub
Если коротко
1.Находит On
2.Смотрит подходит ли следующас ячейка по параметру и идентификатору, да - считает задержку, нет переходит на следующую строку
3.Если на какой-то On нету Off'a то он оставит его в покое когда y>n
Cells(n,1)- время
Cells(n,1)- идентификатор(On\Off)
Cells(n,3)-параметр(Beam Block,Cal.Error...)
Cells(n,4)- собственно, что и считалось - задержка
Макрос который находит период времени от включения до выключения или наоборот. А вот по поводу параметра я чего-то не понял. Как должно быть? Нужно считать время между двумя включениями у которых совпадает параметр?
Option Explicit
Sub Delay()
Dim i As Long
Dim k As Long
Dim lRows As Long
k = 1
lRows = Cells(1, 2).End(xlDown).Row
For i = 2 To lRows
If Cells(i, 2).Value <> Cells(i - 1, 2).Value Then
Cells(i, 4).Value = Cells(i, 1).Value - Cells(k, 1).Value
k = i
End If
Next i
End Sub