AW: Zählen wenn, Zeitabhängigkeit
29.01.2019 08:45:42
Daniel
Wenn nur der letzte Wert als Vergleich genommen werden soll, macht das das Ganze tatsächlich wesentlich einfacher. Mit dieser kleinen Änderung klappt es jetzt bei deinem neuen Beispiel:
Sub Frank()
Dim cell, cell1 As Range, myRange, myRange1 As Range
Dim Counter As Long, i, j As Long
Set myRange = Range(Cells(1, 1), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 1))
'Spalte A / Datum
Set myRange1 = Range(Cells(1, 4), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 4))
'Spalte D / Zählspalte
'Datum und Zeit zusammenfügen und als Zahl ausgeben
For Each cell In myRange
Cells(cell.Row, 3) = CDbl(Cells(cell.Row, 1) + Cells(cell.Row, 2))
Next cell
'Zahlen in Spalte D zählen
For Each cell1 In myRange1
If cell1.Row > 1 Then
For i = cell1.Row - 1 To 1 Step -1 'Gehe alle früheren Werte durch, bis Ende oder Zä _
hlung
If cell1 = cell1.Offset(-cell1.Row + i, 0) Then 'Bei gleichen aufeinanderfolgenden _
Werten
If (cell1.Offset(0, -1) - cell1.Offset(-cell1.Row + i, -1)) > 0.014 Then
'0,014 entspricht etwa 20 Minuten
Counter = Counter + 1
cell1.Offset(0, 2) = Counter
'Nur zählen, wenn ein gleicher Wert vor mehr als 20 Min vorhanden ist
Exit For
Else
Exit For
End If
Else
j = i
'Wenn die Werte ungleich sind, prüfe ob in den letzten 20 Minuten der gleiche _
Wert vorkam
Do While (cell1.Offset(0, -1) - cell1.Offset(-cell1.Row + j, -1)) 1
If cell1 = cell1.Offset(-cell1.Row + j, 0) Then GoTo Weiter
j = j - 1
Loop
Counter = Counter + 1 'Ansonsten Zählung
cell1.Offset(0, 2) = Counter
Exit For
End If
Weiter:
Next i
Else
Counter = Counter + 1 'Erste Zeile wird immer gezählt
cell1.Offset(0, 2) = Counter
End If
Next cell1
MsgBox "Zähler steht bei " & Counter
Set myRange = Nothing
Set myRange1 = Nothing
End Sub