In Excel VBA eine If-Schleife um zwei Zeilen voneinander zu subtrahieren (Uhrzeitformat und abs- Funktion inbegriffen)?

2 Antworten

Es könnte sein, wenn Abs(Cells(j - 1;8)) größer ist als der Wert in (j, 8), dann entstünde eine negative Zahl, die nicht als Minute ausgewertet werden kann (weil xl keine negativen Zeiten kennt. Besser wäre m.E,

=if Minute(abs(Cells(j8, 8)-Cells(j - 1, 8))) >1 then ...

oder Du umgehst die Zeitfunktion:

= Cells(j, 8) - Cells(j - 1, 8) >= 1/1440 then...

ich entnehme Deinem Ansatz nämlich nicht, ob auch Verfrühungen oder NUR Verspätungen gerechnet werden sollen Beide Male abs()???. Bei auch Verfrühungen musst Du ein abs(um die gesamte Cells-Differenz) machen

Da Du das nur als Bedingung hast, sollte die Übergabe des Werts an anderer Stelle (vermutlich in einer öffentlichen(?) Variablen gleich bleiben.

 (war aber nur Trockenübung, habs als fauler Mensch im Ggs zu Oubyi nicht nachgestellt!)

im übrigen ist es unökonomisch, bei nur einer Befehlszeile mit with  zu arbeiten, ich machs -auch der Klarheit wegen- normalerweise immer in der Langform!

Also bei mir läuft dieser leicht abgeänderte Code ohne Fehler:

For j = 4 To 700

With ActiveSheet
If .Cells(j, 2) = "" Then Exit For

If Minute(Abs(.Cells(j, 8).Value) - Abs(.Cells(j - 1, 8).Value)) >= 1 Then _
MsgBox "Call FilterCopieVerspätung"

End With
Next j

Wo genau hast Du denn den Typenkonflikt?
Kann es sein, dass in einer der abgefragten Zellen TEXT steht. Dann gibt es nämlich so einen Fehler. Prüfe das mal genau.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Iamiam  28.12.2016, 19:44

auch ="" wäre Text ! (oder natürlich genauso =Wenn(1;"";0) )

1